月単位で第X週の曜日や、毎月X日といった条件を指定して日付を抽出・取得するExcel VBAマクロのサンプルコードです。
定例作業のスケジュールやカレンダー作成時に、特定の日時を自動で抽出したい場合などに活用できます。
この記事でできること
指定した期間(開始日~終了日)の中で、以下の条件に一致する日付をJ列に順次出力します。
- 指定した祝日を除外する
- 「第何週の何曜日(月~日、全)」に一致する日を抽出する
- 毎月指定した「X日」に一致する日を抽出する
前提条件・シート構成の仮定
このマクロを実行するためには、Excelシート側に以下のようなセル・範囲の配置(仮定)を用意してください。
- A4: 処理の開始日
- B4: 処理の終了日
- C4:C40: 除外したい祝日の日付リスト
- D4:E40: 第何週(D列)と曜日(E列:「月」「火」「水」「木」「金」「土」「日」「全」)の条件範囲
- F4:F40: 毎月抽出したい日(日数の数値)の条件範囲
- J4以降: 抽出された日付の出力先
Excel VBA サンプルコード
以下のコードをVBAエディタに貼り付けて実行してください。
Option Explicit
Sub Exec()
Dim start As Date
Dim i As Date
Dim limit As Date
Dim r As Range
Set r = Range("J4")
Range("J:J").ClearContents
start = Range("A4")
limit = Range("B4")
For i = start To limit
If IsWrite(i) = True Then
r.Value = i
Set r = r.Offset(1, 0)
End If
Next i
End Sub
Function IsWrite(d) As Boolean
IsWrite = False
Dim weeks As Integer
' 祝日は対象外
Dim r As Range
For Each r In Range("C4:C40")
If r.Value = d Then
GoTo FINALLY:
End If
Next r
' 第X Y曜日?
For Each r In Range("D4:D40")
If r.Value <> "" Or r.Offset(0, 1).Value <> "" Then
' 第何週?
weeks = (Day(d) + 6) \ 7
If r.Value = weeks Then
Select Case r.Offset(0, 1).Value
Case "月"
If Weekday(d) = vbMonday Then
IsWrite = True
End If
Case "火"
If Weekday(d) = vbTuesday Then
IsWrite = True
End If
Case "水"
If Weekday(d) = vbWednesday Then
IsWrite = True
End If
Case "木"
If Weekday(d) = vbThursday Then
IsWrite = True
End If
Case "金"
If Weekday(d) = vbFriday Then
IsWrite = True
End If
Case "土"
If Weekday(d) = vbSaturday Then
IsWrite = True
End If
Case "日"
If Weekday(d) = vbSunday Then
IsWrite = True
End If
Case "全"
IsWrite = True
End Select
End If
End If
Next r
' 毎月X日
For Each r In Range("F4:F40")
If r.Value <> "" Then
If r.Value = Day(d) Then
IsWrite = True
End If
End If
Next r
FINALLY:
End Function
Private Sub CommandButton1_Click()
Call Exec
End Sub
使い方・実行手順
- Excelのワークシートに上記のセル配置(A4に開始日、B4に終了日、C列に祝日、D〜E列に第N週と曜日、F列に毎月の日付)を設定します。
- VBAエディタ(Alt + F11)を開き、標準モジュール等に上記のコードを追加します。
- シート上に配置したコマンドボタン(CommandButton1)をクリックするか、
Execマクロを直接実行します。 - 条件に一致する日付がJ4セル以降に一覧で出力されます。
※本記事のコードは、旧来公開されていた配布ファイルの仕様を基に、現在の読者向けに再構成したサンプルコードです。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年10月2日
- 削除リンク切れとなっていた古いZIPファイルへのダウンロードリンクを削除しました。
- 追加記事で紹介されている仕様を基に、インデントやコメントを整えた見やすいExcel VBAの完全なコードブロックと実行手順を追加しました。

