2015-09-04 66 views
0

我需要知道A級車中長度爲B的車是否處於其適當的長度範圍內。我想通過VBA將VLookup放在一個具有每個類的最大和最小長度值的表中。我的代碼,其中列23 =長度,列16 =類,列101 =返回它是否不在正確的範圍內。VLookup不等式錯誤

Dim ClassCodeTable As Range 
Set ClassCodeTable = Worksheets("Class Code Tables").Range("A:G") 

Range("A1").Select 
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row 
For i = 2 To Lastrow 
If Cells(i, 23).Value > Application.WorksheetFunction.VLookup(Cells(i, 16), ClassCodeTable, 3, False) And Cells(i, 23).Value < Application.WorksheetFunction.VLookup(Cells(i, 16), ClassCodeTable, 4, False) Then 
    Cells(i, 101).Value = "" 
    Else 
    Cells(i, 101).Value = "Length Range Error" 
End If 
Next 

此代碼返回一個錯誤1004,無法獲取WorksheetFunction類的VLOOKUP財產。但這種方法工作時,我VLookup是否具有特徵C 的A類汽車等於 ClassCodeTable中類A的預期分類值。在我看來,返回的VLookup值不會被存儲爲數字,即使查找表中的所有值都是數字。

有沒有辦法將VLookup值轉換成可以根據不等式檢查的數字?

+0

刪除worksheetfunction只有使用應用程序.vlookup –

+0

@NatG顯示的錯誤信息與您對錯誤的評估不符。 VLookup返回一個Variant變量,所以如果這些值是數字,則比較有效。在同一個語句中調用兩次Application.WorksheetFunction.VLookup可能會有問題。你是否試圖將測試分爲兩步? –

+0

奇怪的是,我試過你的代碼,它完美的工作,但是當我命名名稱中沒有空格的工作表ClassCodeTable。當插入我得到的空格時:運行時錯誤1004 - 應用程序定義或對象定義的錯誤。 –

回答

1

這是另一種做同樣事情的方法,不需要循環。我測試了它給你的描述的設置和對我來說成功運行:

Sub tgr() 

    With Range("CW2:CW" & Cells(Rows.Count, "P").End(xlUp).Row) 
     .Formula = "=IF(COUNTIF('Class Code Tables'!A:A,P2)=0,""Class not found""," & _ 
         "IF(AND(W2>=VLOOKUP(P2,'Class Code Tables'!A:G,3,FALSE)," & _ 
           "W2<=VLOOKUP(P2,'Class Code Tables'!A:G,4,FALSE))," & _ 
          """"",""Length Range Error""))" 
     .Value = .Value 
    End With 

End Sub 

或者,如果你更喜歡有公式都在同一行:

 .Formula = "=IF(COUNTIF('Class Code Tables'!A:A,P2)=0,""Class not found"",IF(AND(W2>=VLOOKUP(P2,'Class Code Tables'!A:G,3,FALSE),W2<=VLOOKUP(P2,'Class Code Tables'!A:G,4,FALSE)),"""",""Length Range Error""))"