必要时用于检查和更改行的代码

时间:2019-03-22 20:51:42

标签: 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").Value Then
        'Do nothing
    Else
        Row.Interior.Color = 9359529
    End If
Next Row
End Sub

2 个答案:

答案 0 :(得分:1)

您使用For Each循环的本能很好。与对象一起使用时,For Each循环比等效的For i = ...循环要27x faster

您缺少的链接是.Rows对象的Range属性。它允许您遍历范围的行,并且可以使用.Cells访问该行中的特定单元格。例如,Row.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

答案 1 :(得分:0)

For Each Row In Range("A3:C155")

这不是您想的那样。 Row只是一个可迭代的过程,将其命名为Row并不能使其代表一行For Each Row In Range("A3:C155")正在遍历Range("A3:C155")中的每个单元格。

此外,您的If仅会测试B3B2C3C2-您需要在其中添加一些变量以进行更改每次迭代。试一试:

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