Excel VBAを使った日付セルの背景色変更の方法
解決したいこと
既存のマクロ台帳に以下の処理を追加しようと考えています。
<ルール>
・本日の日付が納期より5営業日以下になった場合、納期のセルを黄色に塗りつぶす。
・本日の日付が納期当日および納期以降になった場合、納期のセルを赤色に塗りつぶす。
・ステータスが「完了」の場合、塗りつぶしなし。
発生している問題・エラー
下記のソースコードにて実行したところ、動作自体はするものの、
「納期より5営業日以下になった場合、AF列のセルを黄色に塗りつぶす。」処理にて、
処理式30行目で祝日を指定できないのと、
日付によっては当日以前のセルも黄色になってしまうという課題が残っています。
該当するソースコード
Option Explicit
Sub CellsColorChange()
Dim h As Variant
Dim A As Long
Dim i As Integer
Dim B As Integer
Dim Cnt As Variant
Dim C As Integer
Dim D As Integer
Dim E As String
'シート名「祝日」から祝日を取得(h:holyday)
h = Worksheets("祝日").Range("A2:A163").Value
'本日から5営業日後の日付をAとする。
A = WorksheetFunction.WorkDay(Date, 5, h)
'AF列「納期」欄の記載開始行(i:初期値)を設定。
i = 7
'AF列が空白になるまで処理を繰り返す。
Do Until Cells(i, 32).Value = ""
'5営業日後の日付-納期をBとする。
B = A + 1 - Cells(i, 32).Value
'Bの期間に含まれている祝日の日数を計算する。
Cnt = WorksheetFunction.CountIf(Range(Cells(i, 32), Cells(i + 7, 32)), "2022/9/19")
'1週間後+祝日の日数
C = 7 + Cnt
'本日から納期までの日数をDとする。
D = Cells(i, 32).Value - Date
'AI列「ステータス」欄の値をEとする。
E = Cells(i, 35).Value
'納期より5営業日以下になった場合、AF列のセルを黄色に塗りつぶす。
'納期当日および納期以降になった場合、AF列のセルを赤色に塗りつぶす。
'AI列が「完了」の場合、塗りつぶしなし。
If B <= C And B > 0 And E <> "完了" Then
Cells(i, 32).Interior.Color = RGB(255, 255, 0) '背景色:黄色
ElseIf D <= 0 And E <> "完了" Then
Cells(i, 32).Interior.Color = RGB(255, 0, 0) '背景色:赤色
Else
Cells(i, 32).Interior.Color = xlNone '塗りつぶしなし
End If
i = i + 1
Loop
End Sub
※「祝日」シートのA列に2022年から2030年の祝日の日付を記載済み。
「処理式が間違っている」「もっとこうした方が良い」など、
遠慮なくお知らせください。