Now 組込関数

関数

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のGetLocalTimeGetSystemTimeを元に値を取得している。

14. まとめ

項目説明
機能現在の日時(システム日付+時刻)を取得
戻り値Date型(整数部分が日付、小数部分が時刻)
引数なし
用途日時表示、ログ記録、ファイル名タイムスタンプ付加、時間差計算
注意点システム時刻依存、秒単位の精度
関連関数Date(現在日付のみ)、Time(現在時刻のみ)
タイトルとURLをコピーしました