この記事ではMonth関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
Month関数の使い方と注意点
Month関数は、指定した日付から「月」の部分だけを取得する関数です。
1~12のいずれかの整数を返します。
構文
Month(日付)
- 日付 : 日付を表すDate型の値、もしくは日付として解釈可能な文字列
- 戻り値 : 指定した日付の「月」(Integer型。1~12)
使用例
日付から年を取得する
Sub Sample()
Dim MyDate As Date
MyDate = #1/2/2025#
Debug.Print Month(MyDate)
End Sub
▶ 出力結果
1
Now関数の結果から月を取得する
Sub Sample()
Debug.Print Month(Now)
End Sub
▶ 出力結果(1月の場合)
1
月によって処理を分ける
Sub Sample()
Dim Mymonth As Integer
Mymonth = Month(Date)
Select Case Mymonth
Case 1 To 3
Debug.Print "第1四半期"
Case 4 To 6
Debug.Print "第2四半期"
Case 7 To 9
Debug.Print "第3四半期"
Case 10 To 12
Debug.Print "第4四半期"
End Select
End Sub
▶ 出力結果(1月の場合)
第1四半期
月名(1月、2月など)を取得する
月名を取得する場合にはMonthName関数を使います。
Sub Sample()
Debug.Print MonthName(Month(Now))
End Sub
▶ 出力結果(1月の場合)
1月
⚠️注意
文字列を渡す場合は、日付として解釈できる形式にする必要がある
次のような文字列はVBAが日付として解釈できずエラーになります
Sub Sample()
On Error Resume Next
Err.Clear
Debug.Print Month("2025.07.09") ' 区切り文字が不正
If Err.Number <> 0 Then Debug.Print "2025.07.09 : エラー:" & Err.Description
Err.Clear
Debug.Print Month("2025年13月1日") ' 13月は存在しない
If Err.Number <> 0 Then Debug.Print "2025年13月1日 : エラー:" & Err.Description
Err.Clear
Debug.Print Month("2025/07/32") ' 日付が存在しない
If Err.Number <> 0 Then Debug.Print "2025/07/32 : エラー:" & Err.Description
Err.Clear
Debug.Print Month("07-2025-09") ' 順序・区切りが不正
If Err.Number <> 0 Then Debug.Print "07-2025-09 : エラー:" & Err.Description
Err.Clear
Debug.Print Month("来月") ' 自然言語は無効
If Err.Number <> 0 Then Debug.Print "来年 : エラー:" & Err.Description
On Error GoTo 0
End Sub
▶ 出力結果(実行が2025年の場合)
2025.07.09 : エラー:型が一致しません。
2025年13月1日 : エラー:型が一致しません。
2025/07/32 : エラー:型が一致しません。
07-2025-09 : エラー:型が一致しません。
来月 : エラー:型が一致しません。
上記ではエラー発生時にエラーを無視して次の処理を実行するよう記述していますが、
エラーを無視する記述が無い場合、エラー時に処理が止まってしまいます。
引数に渡す内容には注意しましょう。
戻り値に「前ゼロ」は付かない
戻り値は数値であり文字列ではないため前ゼロ(例:01)は付きません。
前ゼロを付けたい場合にはFormat関数を使用しましょう。
Sub Sample()
Debug.Print Format(Month(Now), "00")
End Sub
▶ 出力結果(1月の場合)
01
関連するVBA関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方