Excel VBAで日付や時刻の情報を扱う:Date, Time

今回はDate,Time関数を用いて、Excel VBA上で日付と時刻を設定する方法をご紹介します。

Date,Time関数の使い方

VBAで現在の日付や時刻の情報を扱うには、Date関数、Time関数を使用します。ここでいう「現在の」とは、PC設定の日付・時間の事です。現在の時刻をメッセージボックスに表示するプログラムを以下に示します。

マクロ例:

Sub Date_Time_Sample()

    MsgBox "今" & vbCrLf & Date & vbCrLf & Time & "です。"

End Sub

vbCrLfは改行を表しています。Date,Timeとも、引数等は不要です(PCのOSによっては値の取得・設定が可能)。

このように表示されたでしょうか。今回の例では、2017/02/15がDate関数、16:18:30がTime関数の結果です。

「現在の時刻=PC設定の日付・時刻」ではない場合がある?

今のPCはネットワークに全てつながっていることを前提として考えると、疑問に思われる方も多いと思います。インターネット上につながっているPCでは、ネット上で定期的に日付・時刻調整を自動で行なってくれているので、現在の時刻=PC設定の日付・時刻と考えて差し支えありません。

但し、次のような場合は注意が必要です。

  • 企業PCなどであえてネットにつなげていないものや、独自のネットワークにつながっているもの
  • 古いOSのPC(Windows XP以前)
  • 長期間電源を入れていないPC

マクロ作成・実行時の注意点

Date,Time関数をマクロで使用する場合、次の事に注意して使用する場合があります。

Windows XP以前では「値の設定が可能」だったが、Vista以降ではエラーとなる。

これについては、マクロについての大幅な仕様変更が原因です(他にも沢山あります)。従って、Excel 2003以前の古いExcelで作成したマクロではエラーの原因となる場合があります。


Date関数を使用する場合でWindowsとMacでファイルをやり取りする場合、日付の元となる「シリアル値」のずれのため結果が合わないか、エラーとなるということがある。

この場合、Date,Time関数とも「シリアル値」という特別な値に変換してから表示形式を変換して表示しますが、WindowsとMacではこの基準となる日付が下記のように異なるため、ワークシートのセルへ値を代入する時に、同じシリアル値でも異なる日付が表示されることがあります

 Windows:1900年01月01日が「1」
 Mac   :1904年01月01日が「1」(Windowsより4年1日後) 注:Windowsではシリアル値「1462」

なお、セルへシリアル値をそのまま代入した場合、セルの書式設定が標準であれば日付・時間ともExcelのデフォルトの表示形式で表示されますが、それ以外では代入先のセルの表示形式に合わせて表示されてしまう(例:数値だと整数が表示される)ので気をつけましょう。(シリアル値については、DateSerial関数やTimeSerial関数の説明をご参考下さい。)