对于每个循环将无法在一张纸上搜索值并在另一张纸上更改值

时间:2015-01-26 15:05:12

标签: excel excel-vba for-loop foreach vba

我在表3列A上有一个真值和假值列表,在表2列A上有一个代码列表。如果表3 A5上的值是= True,那么我想要表2上的值A5应该是彩色的红色。如果工作表3 A6上的值为= True,那么我希望工作表2上的值A6应为红色。这应该沿着表2和表3中的A列向下移动,直到数据耗尽。到目前为止,我已经让它为A列中的第一个单元格工作,但无法使For Each循环工作。非常感谢任何帮助。

Sub compare_cols()

    Dim myRng As Range
    Dim lastCell As Long

    'Get the last row
    Dim lastRow As Integer
    lastRow = ActiveSheet.UsedRange.Rows.Count

    'Debug.Print "Last Row is " & lastRow

    Dim c As Range
    Dim d As Range

    Set c = Worksheets("Sheet3").Range("A5:25")
    Set d = Worksheets("Sheet2").Range("A5:25")


    Application.ScreenUpdating = False

     For Each cell In c
     For Each cell In d

            If c.Value = True Then
            d.Interior.Color = vbRed
            End If

Next
Next

    Application.ScreenUpdating = True

End Sub   

1 个答案:

答案 0 :(得分:1)

更有效的解决方案不一定是彼此之间的2个循环。相反,遍历您要检查的范围,并引用单元格Address属性以标识要突出显示的新单元格。

检查以下代码,如果您理解,请告诉我

Sub ColorOtherSheet()
    Dim wsCheck As Worksheet
    Dim wsColor As Worksheet
    Dim rngLoop As Range
    Dim rngCell As Range

    Set wsCheck = Worksheets("Sheet3")
    Set wsColor = Worksheets("Sheet2")
    Set rngLoop = Intersect(wsCheck.UsedRange, wsCheck.Columns(1))

    For Each rngCell In rngLoop
        If rngCell.Value = True Then
            wsColor.Range(rngCell.Address).Interior.Color = vbRed
        End If
    Next rngCell


End Sub