2015-08-13 59 views
1

我對excel VBA相對比較陌生,我試着編寫一個代碼來檢查兩個值並突出顯示與IF語句匹配的值。VBA循環遍歷2個範圍,並將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循環,以允許我需要和我已經查看周圍。

+0

的之前和之後的圖像將是有益的,因爲當你說的亮點行,你的代碼只突顯某些細胞(所以它是什麼呢?),你可以申請多個標準如果這是你的意圖(對我來說不清楚),用'和'表示一個if語句。 – findwindow

+0

這是一些時髦的代碼 - For Each cell2循環對我來說沒有意義。你確定你無法得到你想要的條件格式嗎? –

+0

如果您想查看與cell相同行的H列值,那麼您可以使用'cell.Offset(0,-3)' –

回答

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 
+0

謝謝蒂姆!我不得不改變一些東西,但它現在像一種魅力。邏輯使得更多的意義:)。 –