VBA循环2个范围并将IF语句应用于两个范围

时间:2015-08-13 15:33:18

标签: excel vba excel-vba

我对excel VBA相对较新,我正在尝试编写一个代码来检查几个值并突出显示与IF语句匹配的值。

在表格中,我需要遍历两个不同范围内的所有值,一个范围的值是日期,另一个范围的值是几个不同的字符串,并突出显示(橙色)符合以下要求的行:(1)第一范围值> =到今天的日期和(2)第二范围值="样本收据"。我还需要循环遍历日期范围的所有值,并突出显示(黄色)与vale对应的行>今天的约会。然后,表格中与这些要求不对应的所有其他行都需要突出显示浅蓝色。

我的第一个代码(如下所示)有效,但它突出显示了第二个范围的所有值="样本收据"。

Dim LastRow As Long
Dim cell As Range
Dim cell2 As Range
Worksheets("Sheet3").Activate

With ActiveSheet

 LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
 For Each cell In Range("K3:K" & LastRow)
     If cell.Value >= Date Then
        cell.Range("A1:K1").Offset(0, -10).Interior.ColorIndex = 6
     ElseIf cell.Value >= Date - 7 Then
            For Each cell2 In Range("H3:H" & LastRow)
                If cell2.Value = "Sample Receipt" Then
                 cell2.Range("A1:K1").Offset(0, -7).Interior.ColorIndex = 45
                Else
                 cell2.Range("A1:K1").Offset(0, -7).Interior.Color = RGB(220, 230, 242)
                End If
            Next
     Else
        cell.Range("A1:K1").Offset(0, -10).Interior.Color = RGB(220, 230, 242)
     End If
 Next
End With

我想不出另一种方法来设置For循环以满足我需要的东西并且我已经环顾四周。

1 个答案:

答案 0 :(得分:2)

这样的事情:

Sub TT()
    Dim sht As Worksheet
    Dim LastRow As Long
    Dim cell As Range
    Dim dt, txt
    Dim clr As Long

    Set sht = Worksheets("Sheet3")
    LastRow = sht.Cells(.Rows.Count, "A").End(xlUp).Row

    For Each cell In sht.Range("K3:K" & LastRow).Cells

        dt = cell.Value
        txt = cell.Offset(0, -3).Value

        'don't follow your original logic so
        '  this is just an example....
        If dt >= Date And txt = "Sample Receipt" Then
           clr = vbRed
        ElseIf dt >= Date - 7 Then
           clr = vbYellow
        Else
           clr = RGB(220, 230, 242) 'default color
        End If

        cell.EntireRow.Cells(1).Color = clr

    Next

End Sub