多列作为范围 - 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
我不知道如何为多列设置范围,大约 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