なんかリクエストあったので
木曜日の日付、金曜日の日付、祝日の前日の日付のみを手動で入力しているのを自動化したいというリクエストがありました。
事前準備
シートに祝日リストと、一時的に日付を格納する場所を作ります。
曜日はT列に TEXT 関数で自動取得します。
S列はマクロ実行時に日付が自動で入るので、空白で大丈夫です。
L列、M列の欄はマクロ実行前に開始日と終了日を手入力します。
スヌーピーはマクロボタンです。
印刷シート(マクロ実行前)
B列とG列の7から37行目までに日付を入れる帳票になっています。
プロシージャと実行結果
"なんかシート名"は実際のシート名に書き換えてください。
Sub 図1_Click()
Dim ws As Worksheet
Dim StartDay As Range
Dim LastDay As Range
Dim Period As Date
Dim SpecificDay As Date
Dim i As Long, j As Long, k As Long, LastRowS As Long
Set ws = Sheets("なんかシート名")
Set StartDay = ws.Range("L6")
Set LastDay = ws.Range("M6")
LastRowS = ws.Cells(Rows.Count, 19).End(xlUp).Row 'S列の最終行取得
'B列からG列、S列を初期化
ws.Range("B5").CurrentRegion.Offset(2, 0).ClearContents
For i = 7 To LastRowS
ws.Cells(i, 19).ClearContents
Next i
i = 7 '開始日から終了日まですべての日付をS列に書き出す
For Period = StartDay To LastDay
ws.Cells(i, 19) = Period
i = i + 1
Next Period
LastRowS = ws.Cells(Rows.Count, 19).End(xlUp).Row
j = 7
For k = 7 To LastRowS 'S列に書き出した日付を特定の条件のみB列に突っ込む
If ws.Cells(k, 20) = "木" Or ws.Cells(k, 20) = "金" Or ws.Cells(k + 1, 21) = "祝" Then
ws.Cells(j, 2) = ws.Cells(k, 19)
ws.Cells(j, 7) = ws.Cells(k, 19)
j = j + 1
End If
Next k
ws.Range("B38").ClearContents
ws.Range("G38").ClearContents
End Sub