2016-05-24 51 views
1

道歉,如果這已被回答,儘管我搜索並沒有運氣搜索。簡而言之,我試圖改變單元格的顏色,如果該單元格的值與命名範圍中的值不匹配。VBA - 確定單元格值(字符串)是否與指定範圍內的值(字符串)匹配

我已經嘗試了一些方法,雖然沒有人爲我工作,任何來自vba大師的幫助將不勝感激。

基本上,我有sheet1(創建)G2上的值列表:我需要知道它們何時與sheet2(列表)上的值相匹配的G5000 S2:S64 < - 此命名範圍爲Make。

請參閱我目前的代碼的副本低於


Sub testMake() 

    Dim MkData As Range, MkVal As Range 
    Dim MKArray As Variant 

    Set MkData = Worksheets("Create").Range("G2:G5000") 
    Set MkVal = Worksheets("Lists").Range("Make") 

    For Each MyCell In MkData 
     If MyCell.Value <> Range("MkVal") Then 
      MyCell.Interior.ColorIndex = 6 
     Else 
      MyCell.Interior.ColorIndex = xlNone 
     End If 

    Next 


End Sub 

感謝大家提前任何幫助,我一直在尋找這幾天現在似乎是沒有比我開始時更接近。

+0

爲什麼不使用條件格式(非VBA)呢? – brettdj

回答

0

您可以使用工作表函數VLOOKUP兩個範圍之間進行比較:

Sub testMake() 

Dim MkData As Range, MkVal As Range 
Dim MKArray As Variant 
Dim result As Variant 

Set MkData = Worksheets("Create").Range("G2:G5000") 
Set MkVal = Worksheets("Lists").Range("Make") 

For Each MyCell In MkData 
    On Error Resume Next 
    result = Application.WorksheetFunction.VLookup(MyCell, MkVal, 1, False) 

    If Err <> 0 Then 
     result = CVErr(xlErrNA) 
    End If 

    If Not IsError(result) Then 
     MyCell.Interior.ColorIndex = xlNone 
    Else 
     MyCell.Interior.ColorIndex = 6 
    End If 
Next 

End Sub 
+0

YAY它完美地工作,我還有一個問題,如果我可以,如果我想要命名的範圍名稱(當前設置爲「Make」)依賴於單元格的左側(同一行)列中的值,我認爲這將通過偏移功能完成,雖然我似乎無法得到它的工作。 我想這樣 昏暗MkData作爲範圍,MkVal作爲範圍 昏暗MKArray爲Variant 昏暗的結果爲Variant 昏暗nrange爲Variant 設置MkData =工作表( 「創建」)的範圍。( 「G2:G5000」) 設nrange = MkData.Offset(0,1)。值 設置MkVal =工作表(「列表」)。範圍(「nrange」) – Jb86

1

雖然我使用條件格式,你可以稍微調整如下代碼以編程方式做到這一點:

Sub testMake() 

Dim MkData As Range 
Dim MkVal As Range 
Dim MKArray As Variant 
Dim lngRow As Long 
Dim rng1 As Range 
Dim rng2 As Range 


MKArray = Worksheets("Create").Range("G2:G5000").Value2 
Set rng1 = Worksheets("Create").Range("G2") 

Set MkVal = Range("Make") 

For lngRow = 1 To UBound(MKArray) 
    If IsError(Application.Match(MKArray(lngRow, 1), MkVal, 0)) Then 
     If Not rng2 Is Nothing Then 
      Set rng2 = Union(rng2, rng1.Offset(lngRow - 1, 0)) 
      Else 
      Set rng2 = rng1.Offset(lngRow - 1, 0) 
     End If 
    End If 
Next 

If Not rng2 Is Nothing Then rng2.Interior.ColorIndex = 6 

End Sub 
相關問題