- 公開日:
ExcelのVBAを使って日付を取得する方法
ExcelでVBAを使うと、繰り返し行われる日付に関する作業を自動化することができ、仕事を効率的に行うことができます。
この記事では、ExcelでVBAを使って日付を取得する方法について解説します。
現在の日時が特定の期間内にあるかどうかを表示するVBAや、指定した日付から前後の日を表示するVBAなどを詳しくご紹介します。
ExcelのVBAを使って日付を取得する方法
ExcelではVBAを使って日付を取得することができます。例えば、以下のようなことをマクロで行うことができます。
- 今日の日付を取得する
- 現在の日時が特定の期間内にあるかどうかを表示する
- 指定した日付から前後の日を表示する
- 基準の日付を指定して日を計算する
- DATE関数を利用して年/月/日を取り出す
詳しくは以下でそれぞれ解説します。
今日の日付を取得する
ExcelのVBAを使って今日の日付を取得することができます。例えば、以下のようなパターンで取得することが可能です。
- 今日の日付を「年/月/日」で入力する
- 今日の日付を和暦で入力する
- 今日の日付を時刻を含めて入力する
- 今日の日付に曜日をつけて入力する
以下の記事では、指定したセルに今日の日付を取得するVBAについて解説しています。
現在の日時が特定の期間内にあるかどうかを表示する
以下では、特定の期間内(2023年10月26日の13時00分00秒~2023年10月31日の23時59分59秒)に現在の日時が含まれているかどうかを確認し、その結果を表示するVBAの方法を解説します。
VBAを利用するには開発タブを表示させる必要があります。開発タブの表示方法については、以下の記事を参照してください。
①開発タブ、②Visual Basicの順に選択します。
「Microsoft Visual Basic for Applications」ダイアログボックスが表示されました。
①挿入タブ、②標準モジュールの順に選択します。
標準モジュールが表示されました。
標準モジュールに以下のコードをコピーして貼り付けます。
Sub CheckDateRange()
Dim d1 As Date, d2 As Date, d3 As Date
d1 = Now
d2 = "10/26/2023 13:00:00"
d3 = "10/31/2023 23:59:59"
If d1 >= d2 And d1 <= d3 Then
MsgBox d1 & vbCrLf & _
"期限内です"
Else
MsgBox d1 & vbCrLf & _
"期限外です"
End If
End Sub
このVBAコード「CheckDateRange」は、現在の日時が特定の期間内にあるかを確認するマクロです。
具体的には、2023年10月26日の13時00分00秒から2023年10月31日の23時59分59秒までの範囲内に現在の日時が含まれているかどうかを判定しています。
コードは、現在の日時をd1、期間の開始日時をd2、終了日時をd3として変数に代入しています。
また、d1がd2とd3の範囲内にあるかどうかを確認しています。範囲内にあれば「期限内です」というメッセージを、そうでなければ「期限外です」という内容のメッセージボックスを呼び出します。
①ファイルタブ、②「Book1の上書き保存」の順に選択します。
「名前を付けて保存」ダイアログボックスが表示されました。①ファイルを保存したいフォルダー(例: デスクトップ)を選択します。
②ファイル名に「現在の日時が特定の期間内にあるかどうかを表示する」を入力します。
③ファイルの種類のプルダウンから「Excel マクロ有効テンプレート」を選択します。④保存ボタンを押します。
「Microsoft Visual Basic for Applications」を閉じ、①開発タブ、②マクロの順に選択します。
「マクロ」ダイアログボックスが表示されました。
①「CheckDateRange」を選択し、②実行ボタンを押します。
「Microsoft Excel」ダイアログボックスが表示されました。
現在日時は「2023年10月26日12:42:05」でしたので、期限外だということが判明しました。
現在日時が「2023年10月26日18:07:44」になると、期限内の表示になりました。
指定した日付から前後の日を表示する
例えば、試験応募の締め切りを○日前、合格発表を○日後という日付のメッセージをマクロにしたい場合、VBAコードを使って実行することができます。
以下では、指定した日付から前後の日を表示させるVBAについてご紹介します。
Visual Basicを開く方法、VBA入力後にファイルを保存する方法、マクロの実行方法については上記「現在の日時が特定の期間内にあるかどうかを表示する」セクションを参照してください。
標準モジュールには以下のコードをコピーして貼り付けます。
Sub DisplayAdjacentDates()
Dim d1 As Date, d2 As Date, d3 As Date
d1 = #10/26/2023# '指定した日付を代入
d2 = d1 - 7
d3 = d1 + 30
MsgBox "試験の締切は" & d2 & vbCrLf & _
"合格発表は" & d3
End Sub
このVBAコード「DisplayAdjacentDates」は、指定した日付「2023/10/26」を基準にして、試験の締切日と合格発表の日を計算し、それらの日付を表示するマクロです。
コード内で、d1に「2023/10/26」の日付が直接入力されています。続いて、d2はd1から7日前、すなわち試験の締切日を示し、d3はd1から30日後、すなわち合格発表の日を示しています。
最後に、これらの計算結果をメッセージボックスに表示しています。
マクロを実行すると、指定した日付(2023/10/26)から「試験の締切は2023/10/19(7日前)」「合格発表は2023/11/25(30日後)」という内容のメッセージボックスが表示されました。
DATE関数を利用して年/月/日を取り出す
以下では、DATE関数を利用して年、月、日を取り出すVBAをご紹介します。
メッセージボックスは、必要な情報のみに絞って表示することで見栄えが良くなります。
Visual Basicを開く方法、VBA入力後にファイルを保存する方法、マクロの実行方法については上記「現在の日時が特定の期間内にあるかどうかを表示する」セクションを参照してください。
年を取り出す
現在が「2023年10月26日」だった場合、年だけを取り出して「現在は2023年です」と表示することが可能です。
標準モジュールには以下のコードをコピーして貼り付けます。
Sub ExtractYear()
Dim CurrentYear As Variant
CurrentYear = Year(Date)
MsgBox "現在は" & CurrentYear & "年です"
End Sub
上図の「ExtractYear」というVBAコードは、現在の日付から年だけを取り出し、それを「現在は〇〇年です」という形式のメッセージボックスで表示するマクロです。
このコードは、まずYEAR関数で現在の日付から年を取得し、それを変数「CurrentYear」に保存します。
YEAR関数の書式は「=YEAR(シリアル値)」で、括弧内にはDate(今日の日付)が入っています。
その後、この年を「現在は〇〇年です」という形式でメッセージボックスに表示します。
マクロを実行すると、「現在は2023年です」のメッセージが表示されました。
月を取り出す
現在が「2023年10月26日」だった場合、月だけを取り出して「現在は10月です」と表示することが可能です。
標準モジュールに以下のコードをコピーして貼り付けます。
Sub ExtractMonth()
Dim CurrentMonth As Variant
CurrentMonth = Month(Date)
MsgBox "現在は" & CurrentMonth & "月です"
End Sub
上図の「ExtractMonth」というVBAコードは、現在の日付から月だけを取り出し、それを「現在は〇〇月です」という形式のメッセージボックスで表示するマクロです。
このコードは、まずMONTH関数で現在の日付から月を取得し、それを変数「CurrentMonth」に保存します。
MONTH関数の書式は「=MONTH(シリアル値)」で、括弧内にはDate(今日の日付)が入っています。
その後、この月を「現在は〇〇月です」という形式でメッセージボックスに表示します。
マクロを実行すると、「現在は10月です」のメッセージが表示されました。
日を取り出す
現在が「2023年10月26日」だった場合、日だけを取り出して「現在は26日です」と表示することが可能です。
標準モジュールに以下のコードをコピーして貼り付けます。
Sub ExtractDay()
Dim CurrentDay As Variant
CurrentDay = Day(Date)
MsgBox "現在は" & CurrentDay & "日です"
End Sub
上図の「ExtractDay」というVBAコードは、現在の日付から日だけを取り出し、それを「現在は〇〇日です」という形式のメッセージボックスで表示するマクロです。
このコードは、まずDAY関数で現在の日付から月を取得し、それを変数「CurrentDay」に保存します。
DAY関数の書式は「=DAY(シリアル値)」で、括弧内にはDate(今日の日付)が入っています。
その後、この日にちを「現在は〇〇日です」という形式でメッセージボックスに表示します。
マクロを実行すると、「現在は26日です」のメッセージが表示されました。