VBAで今日の月や日付を取得する方法
Excel VBAで「今日の月だけを取り出したい」「今日の年月日をそれぞれ取得したい」というケースはよくあります。
そのときに使うのが Year関数・Month関数・Day関数 です。
- Year:日付から「年」を取得します。
- Month:日付から「月」を取得します。
- Day:日付から「日」を取得します。
例えば「今日の月を取得したい」なら、以下のように「変数 = Month(Date)」と書きます。
1 2 3 4 5 6 |
Sub 今日の月を取得() Dim 今月 As Integer 今月 = Month(Date) '// または Month(Now) Debug.Print "今日は" & 今月 & "月です" End Sub |
実行結果の例
今日は10月です
構文
Year関数:指定日の年を取得する。戻り値は1900〜9999。
1 |
Function Year(Date) As Integer |
Month関数:指定日の月を取得する。戻り値は1~12。
1 |
Function Month(Date) As Integer |
Day関数:指定日の日を取得する。戻り値は1~31。
1 |
Function Day(Date) As Integer |
いずれの関数も引数に日付を指定する必要があります。引数に指定できるものは以下の通りです。
- Date型の変数や関数(Date、Nowなど)
- 日付の文字列(”2025/10/9″、”2025-10-9″など)
- 日付と認識できるVariant型
よく使われる今日の年月日を取得したい場合は、「Date」や「Now」を指定して、「Year(Date)」や「Year(Now)」のように書きます。
Dateはシステム日付、Nowはシステム日時を表すため、どちらを使っても結果は同じになります。
関数の実行結果はInteger型の形式のVariant型で返却されます。
日付と認識できない値を渡すと実行時エラー13が発生
日付は”yyyy/mm/dd”形式の文字列、Date型など、日付と認識できるものであれば許容されます。
しかし、日付と認識できない場合は実行時エラー13が発生します。よくあるエラーはスラッシュ区切りがない8文字の”yyyymmdd”で日付と認識されないケースです。
以下は8文字の”yyyymmdd”の引数が不正としてエラーになるサンプルです。
1 2 3 4 5 |
Sub YearErrorTest() Dim y As Integer y = Year(20170831) End Sub |
今日の年月日を取得するサンプルコード
現在の年月日、および、文字列指定の年月日を出力するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub YearMonthDayTest() Dim y As Integer Dim m As Integer Dim d As Integer '// 引数:Date型 y = Year(Now) m = Month(Now) d = Day(Now) Debug.Print "現在の年:" & y Debug.Print "現在の月:" & m Debug.Print "現在の日:" & d '// 引数:文字列 y = Year("2017/11/30") m = Month("2017/11/30") d = Day("2017/11/30") Debug.Print "文字列引数の年:" & y Debug.Print "文字列引数の月:" & m Debug.Print "文字列引数の日:" & d End Sub |
実行結果
1 2 3 4 5 6 |
現在の年:2017 現在の月:11 現在の日:30 文字列引数の年:2017 文字列引数の月:11 文字列引数の日:30 |
文字列の日付から年月日を取得するサンプルコード
1 2 3 4 5 |
Sub StringYearMonthDay() Debug.Print Year("2017/11/30") '// → 2017 Debug.Print Month("2017/11/30") '// → 11 Debug.Print Day("2017/11/30") '// → 30 End Sub |
実行結果
2017
11
30
安全なコードの書き方
日付が正しいかどうかをIsDate関数で事前にチェックしてからYear、Month、Day関数を使うと、エラーを回避できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub 安全に月を取得() Dim 入力値 As Variant Dim 月 As Integer 入力値 = Range("A1").Value '// IsDate関数で日付かどうかチェック If IsDate(入力値) Then 月 = Month(入力値) Debug.Print "月:" & 月 Else Debug.Print "日付ではありません" End If End Sub |