2016-01-17 61 views
1

您是否試圖檢查Y列中的每個單元格是否來自另一個工作表的列表。 vlookup函數的結果總是「false」。我不知道爲什麼。請指教VBA需要檢查Y列中的每個單元格是否來自另一個工作表的列表

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

需要從引號除去任何VBA:'ActiveCell.Formula = 「VLOOKUP(」 &細胞(I,25)。地址(0,0)& 「」 &Lookup_Range.address(1, 1)&「,1,False)」' –

回答

0

我的期望是,你得到這個意外的結果,因爲你沒有寫在ActiveCell一個有效的公式。一個有效的公式將是

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

因此,創建你的代碼的方式,這是引號之間的「」。

如果你在那裏寫了一個有效的公式,就像你試圖在你的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。如果你在公式前面需要'=',不要再記得了,所以你只需要試試那個。

0

我不喜歡將公式和代碼結合起來,當你只用其中一個解決問題時,我建議你使用純代碼來檢查這些代碼的值作爲基礎。

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

澤維爾納瓦羅的代碼運行良好。如果我想要統計最終列表中沒有多少單元值,並反映msgbox中的計數,我應該怎麼做? –

相關問題