2017-08-18 271 views
0

我試圖通過VLOOKUP值讀取並通過查找錶轉換成另一種價值,我必須能夠在這兩個數字閱讀和字母。VLOOKUP值 - 字符串VS長(或整數)

下面是我的代碼...

Dim myVLookupResult As String 
Dim myRange As Range 
Dim value As String 
Dim value1 As Long 

value = "30"   ' works only if there is a character in the string 
value1 = 30    ' because this is a long, it can't have characters 

With Worksheets("vlookup") 

    Set myRange = .Range(.Cells(2, 3), .Cells(257, 9)) 

End With 

myVLookupResult = WorksheetFunction.VLookup(value, myRange, 7, False) 
MsgBox myVLookupResult 

現在我想不通的部分是下面的,我真的很感謝所有幫助...

如果我把變量「值'的字符串轉換爲.vlookup命令(,myRange,7,False),只要字符在字符串中,我就不會收到錯誤。如果值是是所有數字,我得到1004的錯誤。

我需要能夠讀取/支持用作vlookup命令中的查找值的輸入參數的數字和字母。因爲我將value指定爲字符串類型,所以如果我輸入30例如爲什麼會失敗?很明顯,字符串並不總是vba中的字符串。

再次,任何幫助表示讚賞!

回答

0

這取決於查找範圍是什麼。

如果查找範圍是看起來像數字的文本,那麼您需要使用一個字符串。

如果查找範圍是數字,那麼您需要使用一個數字。他們需要匹配。

如果查找範圍都有,那麼您將需要執行兩個vlookups並處理該錯誤。

Dim myVLookupResult As Variant 
Dim myRange As Range 
Dim value As String 
Dim value1 As Long 

value = "30"   ' works only if there is a character in the string 
value1 = 30    ' because this is a long, it can't have characters 

With Worksheets("vlookup") 

    Set myRange = .Range(.Cells(2, 3), .Cells(257, 9)) 

End With 


myVLookupResult = Application.VLookup(value, myRange, 7, False) 
If IsError(myVLookupResult) Then myVLookupResult = Application.VLookup(value1, myRange, 7, False) 
If IsError(myVLookupResult) Then 
    MsgBox "Value not found as a number or string" 
Else 
    MsgBox myVLookupResult 
End IF 
+0

即使查找表中的所有數據都只設置爲文本,這是真的嗎? (單元格格式爲文本類型) – ViggyTheBadMonkey

+0

@ViggyTheBadMonkey以我的經驗,「格式爲文本」是破壞查找的最佳方式。 –

+0

@ViggyTheBadMonkey如果你的「數字」是看起來像數字的文本,那麼你將需要在vlookup的第一個標準中使用一個字符串。 vlookup找不到'300'匹配'{「200」,「300」,400「}' –