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:00Now→ 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
VBendTime - 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
VBTimeSerial(時, 分, 秒) は「時間だけの値」を作る関数です。
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 で整える(中身はあくまで日時として計算可能)
