みなさん、こんにちは。
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
(イミディエイトウインドウへの出力)
本記事は以上になります。
それでは、また次回お会いしましょう!