みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「日付および時刻を取得・表現する」です。
日付と時刻は、Excelでもよく扱う値の一種です。
VBAでも、もちろん日付をデータとして扱うことができます。
本記事では、VBAで日付を取得・表現する際に頻出するコードを紹介します。
【目次】
それでは、始めましょう!
【注意】
紹介するコードでは、解説のため変数に日本語を使用しています。
業務で使うマクロを作るときは、変数には半角英数字を使用することが望ましいので、
その点をあらかじめご理解ください。
現在の日付/時刻を求める
マクロ実行時の日付時刻を表示するには、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
(イミディエイトウインドウへの出力)

本記事は以上になります。
それでは、また次回お会いしましょう!



















