@kazutopinebook

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Excel VBAによるセル背景色設定

解決したいこと

既存の台帳(マクロ)に以下の処理を追加しようとしています。

<ルール>
・本日の日付が納期より5営業日以下になった場合、納期のセルを黄色に塗りつぶす。
・本日の日付が納期当日および納期以降になった場合、納期のセルを赤色に塗りつぶす。
・ステータスが「完了」の場合、塗りつぶしなし。

そして、以下の処理式を記述しました。

Option Explicit

Sub CellsColor()
    
    Dim i As Integer
    Dim A As Long
    Dim B As Integer
    Dim C As Long
    Dim D As String
    
    'AF列「納期」欄の記載開始行を設定。
    i = 6
       
    '本日から5営業日後の日付をAとする。
    A = WorksheetFunction.WorkDay(Date, 5, Worksheets("祝日").Range("A2:A34").Value)
    
    'AF列が空白になるまで処理を繰り返す。
    Do Until Cells(i, 32).Value = ""
    
        '納期までの日数をBとする。
        B = Cells(i, 32).Value - Date
        
        '5営業日後の日付-納期をCとする。
        C = A - Cells(i, 32).Value
                
        'AI列「ステータス」欄の値をDとする。
        D = Cells(i, 35).Value
    
        '納期より5営業日以下になった場合、AF列のセルを黄色に塗りつぶす。
        '納期当日および納期以降になった場合、AF列のセルを赤色に塗りつぶす。
        'AI列が「完了」の場合、塗りつぶしなし。
        If C <= 6 And C > 0 And D <> "完了" Then
            Cells(i, 32).Interior.Color = RGB(255, 2555, 0) '背景色:黄色
        ElseIf B <= 0 And D <> "完了" 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

すると、画像のように本日から5営業日後の日付「2022/9/13」のセルが黄色になりません。

発生している問題

無題2.jpg

自分で試したこと

「If C <= 6 And C > 0 And D <> "完了" Then」
の「C <= 6」を「C <= 7」に変更しても意図した動きになりませんでした。

この解決方法や、処理式全体を通して改善点があれば、ぜひ教えてください。

0 likes

2Answer

問題点

  1. RGB(255, 2555, 0)
    桁がおかしい

  2. C > 0
    今日:2022/09/06
    A(土日除く):2022/09/13
    C > 0 としているのでA以降の日付は 背景色:なし となる

  3. C <= 6
    ルールは5営業日以下としているのに、これだと6営業日以下になる
    ここはルールに従って修正をする

修正後の問題点

上記3つを修正したコードが以下になるが
C が 6 のとき、どのルールにも当てはまらない

        'AI列が「完了」の場合、塗りつぶしなし。
        '納期当日および納期以降になった場合、AF列のセルを赤色に塗りつぶす。
        '納期より5営業日以下になった場合、AF列のセルを黄色に塗りつぶす。
        If D = "完了" Then
            Cells(i, 32).Interior.Color = xlNone '背景色:なし
        ElseIf 0 >= B Then
            Cells(i, 32).Interior.Color = RGB(255, 0, 0) ' 背景色:赤色
        ElseIf 5 >= C Then
            Cells(i, 32).Interior.Color = RGB(255, 255, 0) '背景色:黄色
        Else
            Debug.Print "?"
        End If
1Like

Your answer might help someone💌