VBA需要检查Y列中的每个单元格是否来自另一个工作表的列表

嗨,试图检查列Y中的每个单元格是否来自另一个工作表的列表。 vlookup函数的结果总是“false”。 我不知道为什么。 请指教

Sub CheckDropDown() Dim MyStringVar As Variant, i As Integer Dim Lookup_Range As Range, lastRow As Integer, ws As Worksheet Set Lookup_Range = Worksheets("Lists").Range("C1:C21") lastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).row For i = 2 To lastRow On Error Resume Next 'MyStringVar = ActiveCell.FormulaR1C1 = "=VLOOKUP(Cells(i,25),Lists!C[-25],1)" MyStringVar = ActiveCell.Formula = "VLookup(Cells(i, 25).value, Lookup_Range, 1, False)" On Error GoTo 0 Select Case Cells(i, 25).value Case IsEmpty(MyStringVar) ' do nothing Case Is = MyStringVar Case Is <> MyStringVar ActiveSheet.Cells(i, 25).Interior.Color = RGB(255, 255, 5) End Select Next i End Sub 

我的期望是,你会得到这个意外的结果,因为你不写在ActiveCell中的有效公式。 一个有效的公式是

 =VLOOKUP(Y2, 'Lists'!C1:C21, 1, FALSE) 

因此,创build你的代码的方式,这是引号之间的“”。

如果你有一个有效的公式,那就是你自己写在excel表中的那个公式,那么它就会起作用。 现在,您正在将编程语言的界面与excel公式混合在一起。

所以像这样的东西:

 Dim myFormula As String myFormula = "=VLOOKUP(" Dim columnLetter As String columnLetter = "Y" Dim tmpFormula As String For i = 2 to x tmpFormula = myFormula & columnLetter & i & ", 'lists'!C1:C25, 1, FALSE)" .. test formula .. etc. Next i 

成功

PS。 如果你在公式前面需要'=',就不要再记得了,所以就试试这个。

我不喜欢把公式和代码结合起来,只要用其中之一解决问题,所以我build议你使用纯代码来检查这些代码作为基础。

 Sub CheckDropDown() Dim MyStringVar As Variant, i As Integer Dim Lookup_Range, cel As Range, lastRow As Integer, check As Boolean Set Lookup_Range = Worksheets("Lists").Range("C1:C21") lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow For Each cel In Lookup_Range If ActiveSheet.Cells(i, 25) = cel.Value Then check = True: Exit For Else check = False End If Next If check Then 'The cell is on the lookupRange Else 'The cell is NOT on the lookupRange ActiveSheet.Cells(i, 25).Interior.Color = RGB(255, 255, 5) End If Next i End Sub