LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Excel VBA 条件に一致する日付のみを転記する

Last updated at Posted at 2024-06-28

なんかリクエストあったので

木曜日の日付、金曜日の日付、祝日の前日の日付のみを手動で入力しているのを自動化したいというリクエストがありました。

事前準備

シートに祝日リストと、一時的に日付を格納する場所を作ります。
曜日はT列に TEXT 関数で自動取得します。
S列はマクロ実行時に日付が自動で入るので、空白で大丈夫です。
L列、M列の欄はマクロ実行前に開始日と終了日を手入力します。
スヌーピーはマクロボタンです。

日付1.png

U列に、祝日なら"祝"が入る式を入れます。
日付3.png

印刷シート(マクロ実行前)

B列とG列の7から37行目までに日付を入れる帳票になっています。

日付2.png

プロシージャと実行結果

"なんかシート名"は実際のシート名に書き換えてください。

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

実行結果
日付4.png
日付5.png
日付6.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0