多列作为范围 - Worksheet_Change - 条件格式的替代方法

Multiple columns as a range - Worksheet_Change - alternative for conditional formatting

我不知道如何为多列设置范围,大约 150 列,或者以 Q 列开始的每 4 列。 我尝试单独设置每一列,但代码行太长且无法拆分(此代码中列出了前 15 列)。 我希望你明白问题是什么。

这是我的代码:

    Private Sub Worksheet_Change(ByVal Target As Range)

r = Target.Row

If Not Intersect(Target, Range("Q3:Q5000, U3:U5000, Y3:Y5000, AC3:AC5000, AG3:AG5000, AK3:AK5000, AO3:AO5000, AS3:AS5000, AW3:AW5000, BA3:BA5000, BE3:BE5000, BI3:BI5000, BM3:BM5000, BQ3:BQ5000, BU3:BU5000")) Is Nothing Then

    If Target.Value = "Likvidirana partija" Or Target.Value = "likvidirana partija" Then
        Target.EntireRow.Interior.Color = RGB(220, 230, 241)
        
        Else
        
    If Target.Value = "" Then
        Target.Interior.Color = RGB(255, 255, 255)

        Else

    If Target.Value < Cells(r, 7).Value Then
        Target.Interior.Color = RGB(255, 255, 0)
        Target.Font.Color = RGB(255, 0, 0)

        Else
    
    If Target.Value > Cells(r, 7).Value Then
        Target.Interior.Color = RGB(146, 208, 80)
        Target.Font.Color = RGB(0, 0, 0)

    End If
    End If
    End If
    End If
    
End If

End Sub

我是新来的,这是我的第一个 post,所以如果我做错了什么,我深表歉意。

试试这个。它没有经过测试,所以可能会有一些小故障。

就目前而言,您的代码不会删除任何现有格式。

建议您阅读 VBA 中的 If-Else 结构。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column < 17 Or Target.Column > Range("BU1").Column Then Exit Sub 'column
If Target.Row < 3 Or Target.Row > 5000 Then Exit Sub                       'row
If (Target.Column - 4) Mod 4 <> 0 Then Exit Sub                            'every 4th from 17

Dim r As Long

r = Target.Row

If Target.Value = "Likvidirana partija" Or Target.Value = "likvidirana partija" Then _
                            Target.EntireRow.Interior.Color = RGB(220, 230, 241)
If Target.Value = "" Then Target.Interior.Color = RGB(255, 255, 255)

If Target.Value < Cells(r, 7).Value Then
    Target.Interior.Color = RGB(255, 255, 0)
    Target.Font.Color = RGB(255, 0, 0)
ElseIf Target.Value > Cells(r, 7).Value Then
    Target.Interior.Color = RGB(146, 208, 80)
    Target.Font.Color = RGB(0, 0, 0)
End If

End Sub

我要找的答案:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column < 13 Then Exit Sub                     'column
If Target.Row < 3 Or Target.Row > 5000 Then Exit Sub    'row
If (Target.Column - 5) Mod 4 <> 0 Then Exit Sub         'every 4th from 17

Dim r As Long

r = Target.Row

    If Target.Value = "Likvidirana partija" Or Target.Value = "likvidirana partija" Then
        Target.EntireRow.Interior.Color = RGB(220, 230, 241)
    Else
                            
        If Target.Value = "" Then
            Target.Interior.Color = RGB(255, 255, 255)
        Else
    
            If Target.Value < Cells(r, 7).Value Then
                Target.Interior.Color = RGB(255, 255, 0)
                Target.Font.Color = RGB(255, 0, 0)
            Else
            
                If Target.Value >= Cells(r, 7).Value Then
                    Target.Interior.Color = RGB(146, 208, 80)
                    Target.Font.Color = RGB(0, 0, 0)
                End If
                
            End If
            
        End If
        
    End If

End Sub