ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.29

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回紹介するのは、「日付および時刻を取得・表現する」です。

日付と時刻は、Excelでもよく扱う値の一種です。
VBAでも、もちろん日付をデータとして扱うことができます。
本記事では、VBAで日付を取得・表現する際に頻出するコードを紹介します。

【目次】

  1. 現在の日付/時刻を求める
  2. 日付/時刻を変数に格納する
  3. 日付型変数から一部を抽出する
  4. 日付型変数の書式を変える

それでは、始めましょう!

【注意】
紹介するコードでは、解説のため変数に日本語を使用しています。
業務で使うマクロを作るときは、変数には半角英数字を使用することが望ましいので、
その点をあらかじめご理解ください。

現在の日付/時刻を求める

マクロ実行時の日付時刻を表示するには、Date関数およびNow関数を使用します。

関数出力(戻り値)
Date現在の日付
Now現在の日付時刻

以下のソースコード実行で、イミディエイトウインドウに結果を出力します

(ソースコード)

Sub ExcelVBA_029_Example1()
    Debug.Print "現在の日付=", Date
    Debug.Print "現在の日付および時刻=", Now
End Sub

(イミディエイトウインドウへの出力)

日付/時刻を変数に格納する

①セルの値を変数へ格納

日付および時刻は、VBAではDate型の変数、またはVariant型の変数に記録できます。
セルに日付が入力されている状態から、日付および時刻を変数へ記録することが可能です。

(セルの状態)

(ソースコード)

Sub ExcelVBA_029_Example2()
    Dim 日付 As Date
    Dim 日付および時刻 As Date
    日付 = Range("A2").Value
    日付および時刻 = Range("C2").Value
    Debug.Print "セルの日付=", 日付
    Debug.Print "セルの日付および時刻=", 日付および時刻
End Sub

(イミディエイトウインドウへの出力)

数値を組み合わせて変数へ格納

年/月/日の値がセルへバラバラに入力されているときは、DateSerial関数を使用すれば、日付に変換できます。
DateSerial関数の書式は以下になります。

DateSerial(数値(年), 数値(月),数値(日))

(セルの状態)

(ソースコード)

Sub ExcelVBA_029_Example3()
    Dim 年, 月, 日
    Dim 日付 As Date
    年 = Range("A2").Value
    月 = Range("B2").Value
    日 = Range("C2").Value
    日付 = DateSerial(年, 月, 日)
    Debug.Print "DateSerial関数の戻り値=", 日付
End Sub

(イミディエイトウインドウへの出力)

③固定の値を変数へ格納

セルの値ではなく、固定の日付・時刻を変数に記録する場合は、値の前後に#を付与します。

(ソースコード)

Sub ExcelVBA_029_Example4()
    Dim 日付および時刻 As Date
    日付および時刻 = #10/31/2022 9:15:05 AM#
    Debug.Print 日付および時刻
End Sub

(イミディエイトウインドウへの出力)

日付型変数から一部を抽出する

日付を記録した変数から、年や月などの特定の値を抽出するには、以下の関数を使用します。

関数出力(戻り値)
Year年を抽出
Month月を抽出
Day日を抽出
Hour時を抽出
Minute分を抽出
Second秒を抽出

以下のコードでは、Now関数で取得した日時から、年/月/日/時/分/秒を抽出しています。

(ソースコード)

Sub ExcelVBA_029_Example5()
    Dim 日付および時刻 As Date
    日付および時刻 = Now
    Debug.Print "年=", Year(日付および時刻)
    Debug.Print "月=", Month(日付および時刻)
    Debug.Print "日=", Day(日付および時刻)
    Debug.Print "時=", Hour(日付および時刻)
    Debug.Print "分=", Minute(日付および時刻)
    Debug.Print "秒=", Second(日付および時刻)
End Sub

(イミディエイトウインドウへの出力)

日付型変数の書式を変える

現在日付を8桁の数値に変換する時など、日付時刻の表現を変更するには、Format関数を使用します。
Format関数の書式は以下になります。

Format(変数または指定の値, フォーマット)

フォーマットには、出力する値の書式に合わせて書式文字を設定します。
書式文字は複数ありますので、以下を参照してください。

書式文字出力
y
m
d
H
M
S

以下のコードで、Format関数を用いて、現在日付・時刻の表現を変更しています。

(ソースコード)

Sub ExcelVBA_029_Example6()
    Dim 日付および時刻 As Date
    日付および時刻 = Now
    Debug.Print "日付を8桁表示→", Format(日付および時刻, "yyyymmdd")
    Debug.Print "日付時刻を表示→", Format(日付および時刻, "yyyymmdd-HHMMSS")
End Sub

(イミディエイトウインドウへの出力)

本記事は以上になります。

それでは、また次回お会いしましょう!