2016-05-24 49 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 
相关问题