Excel 用于检查和更改行(如果需要)的代码

Excel 用于检查和更改行(如果需要)的代码,excel,vba,excel-formula,Excel,Vba,Excel Formula,此代码应查看表中的每一行,并将该行的B和C值与其上方的行进行比较,对于满足要求的行,它不执行任何操作,但如果不满足要求,则不满足要求的每一行将以绿色突出显示 我遇到的问题是让范围或行在第3行和第4行上工作 Sub IF_Loop() Dim Row As Range For Each Row In Range("A3:C155") If Row("B3").Value = "GR" And Row("B2").Value = 4 And Row("C3").Value = Row("C2

此代码应查看表中的每一行,并将该行的B和C值与其上方的行进行比较,对于满足要求的行,它不执行任何操作,但如果不满足要求,则不满足要求的每一行将以绿色突出显示

我遇到的问题是让范围或行在第3行和第4行上工作

Sub IF_Loop()
Dim Row As Range
For Each Row In Range("A3:C155")
    If Row("B3").Value = "GR" And Row("B2").Value = 4 And Row("C3").Value = Row("C2").Value Then
        'Do nothing
    Else
        Row.Interior.Color = 9359529
    End If
Next Row
End Sub

范围内的每一行(“A3:C155”)

这不是你想象的那样<代码>行只是一个iterable-将其命名为
并不意味着它代表一行<范围(“A3:C155”)中的每一行的代码>正在迭代
范围(“A3:C155”)
中的每个单元格

此外,您的
If
将只测试
B3
B2
C3
C2
——您需要在其中设置一些变量,以便随着每次迭代而改变。试一下:

Sub IF_Loop()

    Dim i As Long

    For i = 3 To 155
        If Not (Range("B" & i).Value = "GR" And Range("B" & i - 1).Value = 4 And Range("C" & i).Value = Range("C" & i - 1).Value) Then
            Rows(i & ":" & i).Interior.Color = 9359529
        End If
    Next i

End Sub

您对每个循环使用
的本能是很好的。使用对象时,每个
循环的
可能比i=…
循环的等效

缺少的链接是
范围
对象的
属性。它允许您在范围内的行中循环,您可以使用
.cells
访问该行中的特定单元格。例如,
行。单元格(1,1)
是对行中第一个单元格的引用

因此,这里有另一种方法,你可以实现同样的目标:

Sub IF_Loop()
    Dim row As Range

    For Each row In Range("B3:C20").Rows
        With row.Cells(1, 1)
            If Not (.Value = "GR" And .Offset(-1, 0).Value = 4 And .Offset(0, 1).Value = .Offset(-1, 1).Value) Then
                row.Interior.Color = 9359529
            End If
        End With
    Next
End Sub