1. 概要
VBAのNow
関数は、現在の日付と時刻を取得するための組み込み関数です。
パソコンのシステム時計からリアルタイムで現在の日時を返し、日付や時刻を扱う処理で広く利用されます。
2. 基本的な使い方
Dim currentDateTime As Date
currentDateTime = Now
- 変数
currentDateTime
に、実行時の現在の日付と時刻(日時)が格納されます。 Now
は引数を取らず、戻り値はDate
型です。
3. 戻り値の型と構造
- VBAにおける
Date
型は、実は整数部分が日付(1899年12月30日からの経過日数)、小数部分が時刻(1日を1としての割合)を表す特殊な数値型です。 - 例えば、整数部分が45000なら、それは「1899年12月30日から45000日後の日」を意味し、
- 小数部分0.5なら「正午(12:00)」を示します。
Now
関数の戻り値は、この日付+時刻の複合的な値です。
4. 日付のみ、時刻のみを取得する方法
- 現在の日付のみを取得したい場合は
Date
関数を使います。 - 現在の時刻のみを取得したい場合は
Time
関数を使います。
Dim currentDate As Date
Dim currentTime As Date
currentDate = Date ' 現在の日付(時刻は00:00:00)
currentTime = Time ' 現在の時刻(日付は1899/12/30)
5. Now関数の用途
- ファイル名にタイムスタンプを付けたいとき
- ログに処理の開始時間や終了時間を記録したいとき
- 時間差を計算したいとき
- メッセージや画面に現在日時を表示したいとき
6. Now関数の使用例
6-1. 現在の日時をメッセージボックスに表示
Sub ShowNow()
MsgBox "現在の日時は " & Now
End Sub
実行すると、2025/06/21 15:30:25
のような文字列が表示されます。
6-2. ファイル名に日時を付加して保存
Dim filename As String
filename = "Report_" & Format(Now, "yyyymmdd_hhnnss") & ".xlsx"
ActiveWorkbook.SaveAs filename
日時を「20250621_153025」のように整形してファイル名に付ける例。
7. Now関数とFormat関数の組み合わせ
Now
関数の戻り値はDate
型なので、そのまま表示するとシステムの地域設定に依存した形式になります。
任意の表示形式に変換するにはFormat
関数と組み合わせるのが一般的です。
Dim dt As String
dt = Format(Now, "yyyy/mm/dd HH:nn:ss")
MsgBox dt
ここで使われる書式記号例:
書式文字 | 説明 |
---|---|
yyyy | 西暦4桁 |
mm | 月(2桁) |
dd | 日(2桁) |
HH | 時(24時間制) |
nn | 分 |
ss | 秒 |
8. Now関数の注意点
8-1. システムの時計に依存する
Now
はPCのシステム日時を参照するため、ユーザーが時計を変更すると結果も変わります。
サーバーの時刻と同期したい場合は、外部APIやネットワーク時刻取得が必要です。
8-2. 時刻の精度は秒単位
VBAのNow
関数は秒単位までの精度です。ミリ秒やマイクロ秒単位の高精度計測はできません。
9. 時刻差の計算
Date
型の特性を利用し、日時の差を計算できます。
Dim startTime As Date, endTime As Date, elapsed As Double
startTime = Now
' 処理を待つ例
Application.Wait Now + TimeValue("00:00:05") ' 5秒待つ
endTime = Now
elapsed = endTime - startTime ' 差は日数(小数部分が時間)
' 秒に変換
MsgBox "経過時間は " & elapsed * 24 * 60 * 60 & " 秒です。"
10. Now関数の活用例(ログ記録)
処理の開始終了時刻をログに記録するシンプルな例。
Sub LogProcess()
Dim logFile As String
logFile = ThisWorkbook.Path & "\process.log"
Open logFile For Append As #1
Print #1, "処理開始: " & Format(Now, "yyyy/mm/dd HH:nn:ss")
' 処理本体
Application.Wait Now + TimeValue("00:00:03")
Print #1, "処理終了: " & Format(Now, "yyyy/mm/dd HH:nn:ss")
Close #1
End Sub
11. Now関数とTime関数、Date関数の違い
関数名 | 内容 | 戻り値例(実行日時2025/06/21 15:45:10) |
---|---|---|
Now | 現在の日時(日時+時刻) | 2025/06/21 15:45:10 |
Date | 現在の日付のみ | 2025/06/21 00:00:00 |
Time | 現在の時刻のみ | 1899/12/30 15:45:10 |
12. システムの日付時刻の設定が正しいかチェック
時刻が正確でない場合はプログラムの動作に影響を与えるため、日時を取得後に異常値チェックを行うこともあります。
If Year(Now) < 2000 Then
MsgBox "システムの日付が正しく設定されていません。"
End If
13. Now関数の歴史と仕様
Now
関数はVBAだけでなく、VB6やVBScriptなどのVisual Basic系言語に共通の組み込み関数。- Microsoft ExcelのVBAでは
Now
関数が標準関数として組み込まれている。 - VBAの内部ではWinAPIの
GetLocalTime
やGetSystemTime
を元に値を取得している。
14. まとめ
項目 | 説明 |
---|---|
機能 | 現在の日時(システム日付+時刻)を取得 |
戻り値 | Date型(整数部分が日付、小数部分が時刻) |
引数 | なし |
用途 | 日時表示、ログ記録、ファイル名タイムスタンプ付加、時間差計算 |
注意点 | システム時刻依存、秒単位の精度 |
関連関数 | Date(現在日付のみ)、Time(現在時刻のみ) |