2017-08-18 44 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“}' –