Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - Now関数

Excel VBA VBA
スポンサーリンク

Now 関数は「今この瞬間の“日付+時刻”をくれる関数」

まず一言でいうと、
Now 関数は「今この瞬間の“日付と時刻”を、まとめて Date 型で返してくれる関数」です。

  • 今日が何日か(年月日)
  • 何時何分何秒か(時刻)

この両方を一度に持った値が返ってきます。
「いつ実行したか」「処理開始時刻・終了時刻を記録したい」といった場面でよく使います。

Dim dt As Date
dt = Now   ' 例: 2026/02/23 14:57 みたいな値が入る
VB

ここで入るのは文字列ではなく、「日付+時刻として計算できる Date 型」です。


Now 関数の基本的な使い方

今の日時をメッセージボックスに表示する

Sub SampleNowBasic()

    Dim dt As Date

    dt = Now

    MsgBox dt   ' 例: 2026/02/23 14:57

End Sub
VB

表示形式は、PCの地域設定やセルの表示形式に依存しますが、
中身は「日付+時刻」の Date 型です。

セルに「実行した日時」を記録する

Sub SampleNowToCell()

    Range("A1").Value = Now

End Sub
VB

これで、A1 に「マクロを実行した日時」が記録されます。
ログを残したいときの定番パターンです。


Date 関数との違いをはっきりさせる

Date は「日付だけ」、Now は「日付+時刻」

よく一緒に出てくるのが Date です。

Dim d As Date
Dim n As Date

d = Date   ' 今日の日付(時刻は 0:00)
n = Now    ' 今この瞬間の「日付+時刻」
VB

例えば、2026/02/23 の 14:57 に実行したとすると、

  • Date → 2026/02/23 00:00
  • Now → 2026/02/23 14:57

というイメージです。

「日付だけ分かればいい」なら Date、
「何時何分に実行したかも知りたい」なら Now、
という使い分けになります。

Time 関数との関係

ついでに Time も整理しておきます。

Dim t As Date
t = Time   ' 今の“時刻だけ”
VB
  • Date:日付だけ
  • Time:時刻だけ
  • Now:日付+時刻

この3つの役割分担を頭に入れておくと、迷いにくくなります。


Now が「Date 型」で返ってくることの意味

経過時間を計算できる

Now の戻り値は Date 型なので、
「引き算」で経過時間を求めることができます。

Sub SampleNowElapsed()

    Dim startTime As Date
    Dim endTime As Date
    Dim elapsed As Double

    startTime = Now

    ' ここに時間のかかる処理があると仮定
    Application.Wait Now + TimeValue("0:00:03")   ' 3秒待つだけの例

    endTime = Now

    elapsed = endTime - startTime   ' 日数としての差

    MsgBox "経過時間(日数): " & elapsed & vbCrLf & _
           "経過時間(秒): " & elapsed * 24 * 60 * 60

End Sub
VB

endTime - startTime は「日数差」として返ってきます。
それを 24×60×60 倍すれば「秒」に変換できます。

ここでのポイントは、

  • Now は「計算できる日時」
  • 文字列の “2026/02/23 14:57” とはまったく別物

ということです。

「今から○時間後」「○分後」を求める

日付型では、「1」は1日を意味します。
なので、時間や分は「1日を分割した値」として足し算します。

Sub SampleNowAdd()

    Dim dt As Date

    dt = Now

    MsgBox "今: " & dt & vbCrLf & _
           "1時間後: " & dt + TimeSerial(1, 0, 0) & vbCrLf & _
           "30分後: " & dt + TimeSerial(0, 30, 0)

End Sub
VB

TimeSerial(時, 分, 秒) は「時間だけの値」を作る関数です。
Now にそれを足すことで、「今から1時間後」「今から30分後」を簡単に求められます。


表示形式は Format でコントロールする

「yyyy/mm/dd hh:nn:ss」のように整形する

Now の中身は Date 型ですが、
どう見せるかは Format で自由に決められます。

Sub SampleNowFormat()

    Dim dt As Date
    Dim txt As String

    dt = Now

    txt = Format(dt, "yyyy/mm/dd hh:nn:ss")

    MsgBox txt   ' 例: "2026/02/23 14:57:30"

End Sub
VB

ここでのポイントは、

  • hh:時
  • nn:分(mm は月と被るので、分は nn)
  • ss:秒

という書き方をすることです。

「計算は Now(Date 型)で」「見せ方は Format で」
という分担を意識しておくと、コードがすっきりします。


Now を使うときに意識してほしい重要ポイント

「文字列としての日時」と混同しない

セルに「2026/02/23 14:57」と表示されていても、
それが文字列なのか、日付型なのかでできることが変わります。

Dim s As String
Dim dt As Date

s = "2026/02/23 14:57"   ' 文字列
dt = Now                 ' 日付+時刻(Date 型)
VB
  • s に +1 しても、日時計算にはならない
  • dt に +1 すると「1日後の同じ時刻」になる

「いつ実行したかを“計算に使いたい”」と思ったら、
必ず Now(=Date 型)を使う、という意識が大事です。

ログやタイムスタンプにとても相性がいい

Now は、次のような場面でよく使われます。

  • マクロ開始時刻・終了時刻をシートに記録する
  • ログシートに「いつ」「何をしたか」を1行ずつ追記する
  • ファイル名に日時を埋め込んで、重複しない名前を作る

例えば、ログ行を追加するイメージはこんな感じです。

Sub SampleNowLog()

    Dim ws As Worksheet
    Dim nextRow As Long

    Set ws = ThisWorkbook.Worksheets("Log")

    nextRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

    ws.Cells(nextRow, "A").Value = Now
    ws.Cells(nextRow, "B").Value = "処理開始"

End Sub
VB

こうしておくと、「いつ何が起きたか」を後から追いやすくなります。


まとめ:Now 関数は「“今”という瞬間を、計算可能な値として掴むための入口」

Now の本質は、

「今この瞬間の“日付+時刻”を、Date 型として受け取る」

ことです。

押さえておきたいポイントをコンパクトにまとめると、

  • Now は「日付+時刻」を返す(型は Date
  • Date は日付だけ、Time は時刻だけ、Now はその両方
  • Now 同士の引き算で「経過時間(日数)」が求められる
  • TimeSerial などと組み合わせて「今から○時間後」も簡単に書ける
  • 表示は Format で整える(中身はあくまで日時として計算可能)

タイトルとURLをコピーしました