Vba 查看列并突出显示行。

Vba 查看列并突出显示行。,vba,excel,Vba,Excel,我有一张“数据”表,从G到p的列中填入了价格。我在同一张表中有另一列U,它有最高价格。(目标价格) 现在,我想检查每一行,如果G到p之间的任何一列的价格高于我的U列中的目标价格,那么我想用红色突出显示整行 我尝试了下面这样的代码,但它不起作用。任何人都可以建议,我如何查看每个专栏,并与目标和重点进行比较。如果您可以对代码行进行注释,那就太好了 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim i As

我有一张“数据”表,从G到p的列中填入了价格。我在同一张表中有另一列U,它有最高价格。(目标价格)

现在,我想检查每一行,如果G到p之间的任何一列的价格高于我的U列中的目标价格,那么我想用红色突出显示整行

我尝试了下面这样的代码,但它不起作用。任何人都可以建议,我如何查看每个专栏,并与目标和重点进行比较。如果您可以对代码行进行注释,那就太好了

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

For i = 7 To 16
    If Cells(Target.Row, 21).Value <= Cells(Target.Row, i).Value Then
        Target.EntireRow.Interior.Color = vbRed
    End If
Next i

For i = 7 To 16
    If Cells(Target.Row, 21).Value > Cells(Target.Row, i).Value Then
        Target.EntireRow.Interior.ColorIndex = xlNone
    End If
Next i

    If Cells(Target.Row, 22).Value = "x" Then
        Target.EntireRow.Interior.ColorIndex = xlNone
    End If

End Sub
选项显式
私有子工作表_更改(ByVal目标作为范围)
作为整数的Dim i
对于i=7到16
如果单元格(Target.Row,21).Value单元格(Target.Row,i).Value则
Target.EntireRow.Interior.ColorIndex=xlNone
如果结束
接下来我
如果单元格(Target.Row,22).Value=“x”,则
Target.EntireRow.Interior.ColorIndex=xlNone
如果结束
端接头

尽管如您所坚持的那样通过VBA应用了条件格式,但我仍然会在条件格式的帮助下这样做

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
Dim lr As Long
Dim rng As Range
If Target.Row >= 7 And Not Intersect(Target, Range("G:P")) Is Nothing Then
    lr = Cells(Rows.Count, "U").End(xlUp).Row
    Set rng = Range("G7:U" & lr)
    With rng
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=AND(ROW($G7)>=7,G7<>"""",$U7<>"""",MAX($G7:$P7)>=$U7)"
        .FormatConditions(rng.FormatConditions.Count).SetFirstPriority
        .FormatConditions(1).Interior.Color = 65535
        .FormatConditions(1).StopIfTrue = False
    End With
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.CountLarge>1,则退出Sub
变暗lr为长
变暗rng As范围
如果Target.Row>=7且不相交(Target,Range(“G:P”))为零,则
lr=单元格(行数,“U”)。结束(xlUp)。行
设置rng=范围(“G7:U”和lr)
带rng
.FormatConditions.Delete
.FormatConditions.Add类型:=Xexpression,公式1:_
=和(行($G7)>=7,G7“”,$U7“”,最大($G7:$P7)>=U7)
.FormatConditions(rng.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).Interior.Color=65535
.FormatConditions(1).StopIfTrue=False
以
如果结束
端接头
试试这个

Private Sub Worksheet_Change(ByVal Target As Range)
    If Cells(Target.Row, 22).Value = "x" Or Application.Max(Target.Rows) < Cells(Target.Row, 21) Then
        Cells(Target.Row, 1).EntireRow.Interior.Color = xlNone
    Else
        Cells(Target.Row, 1).EntireRow.Interior.Color = vbRed
    End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果单元格(Target.Row,22).Value=“x”或Application.Max(Target.Rows)<单元格(Target.Row,21),则
单元格(Target.Row,1).EntireRow.Interior.Color=xlNone
其他的
单元格(Target.Row,1).EntireRow.Interior.Color=vbRed
如果结束
端接头

实现这一点不需要VBA。您可以使用条件格式。@sktneer如果我想使用vba,请您帮助。您可以使用vba定义/更改Excel中内置的条件格式。键入值时,我找不到任何更改,它保持不变。代码将跟踪从第7行开始在G:P列中所做的任何更改。即使您按照上面所述进行了更改,也要确保P列中相应的单元格不为空。由于代码将G:P列中的输入与P列中相应单元格中的输入进行比较,因此仅当P列不为空时才会进行比较。