VBA – 确定单元格值(string)是否与指定范围内的值(string)相匹配

如果这已经被回答,但是我已经search和search没有运气道歉。 简而言之,即时尝试更改单元格的颜色,如果单元格的值不匹配指定范围内的值。

我已经尝试了一些方法,虽然没有任何工作对我来说,任何来自vba大师的帮助将不胜感激。

基本上我有sheet1(创build)G2上的值的列表:我需要知道,当他们不匹配sheet2(列表)上的值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 

感谢大家提前给予的帮助,我已经看了几天了,似乎没有比刚开始的时候更近。

您可以使用工作表函数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 

虽然我会使用条件格式,你可以稍微调整你的代码,如下所示,以编程方式:

 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