![](/img/trans.png)
[英]How to perform an excel vlookup with dynamic lookup_value using VBA?
[英]Using VBA to perform a vlookup
我正在使用以下vba代碼執行vlookup。 奇怪的是,它僅在查找值(單元格C1)中包含文本時才起作用。 如果單元格C1中的查找值是數字(不是文本),則該值不起作用。 有什么想法嗎?
Sub FINDVAL()
On Error GoTo MyErrorHandler:
Dim E_name As String
E_name = Range("C1").Value
If Len(E_name) > 0 Then
Sal = Application.WorksheetFunction.VLookup(E_name, Sheet1.Range("A1:B100000"), 2, False)
MsgBox "Salary is : $ " & Sal
Else
MsgBox ("You entered an invalid value")
End If
Exit Sub
MyErrorHandler:
If Err.Number = 1004 Then
MsgBox "Employee Not Present in the table."
End If
End Sub
要回答該問題以備將來參考,如果由於某種原因需要將變量聲明為字符串,但也會遇到整數。 你可以做這樣的事情。
If Len(E_name) > 0 Then
If IsNumeric(E_name) Then
Sal = Application.WorksheetFunction.VLookup(CDbl(E_name), Sheet1.Range("A1:B100000"), 2, False)
Else
Sal = Application.WorksheetFunction.VLookup(E_name, Sheet1.Range("A1:B100000"), 2, False)
End If
MsgBox "Salary is : $ " & Sal
Else
MsgBox ("You entered an invalid value")
End If
這是因為您將變量E_name
聲明為String
。 此類聲明之后的任何變量初始化將僅接受String
值。
僅在確定變量的所有實例都屬於同一數據類型時 ,才定義變量的數據類型。
在這種情況下,由於C1
可以包含數字和字符值,因此應聲明數據類型Variant
E_name
,該數據類型是通用數據類型。
如有疑問,請使用TypeName()
方法檢查變量的數據類型。
例:
Public Sub variantTest()
Dim E_name As Variant
E_name = "John"
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "John:String"
E_name = 2
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "2:Integer"
E_name = 9.99
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "9.99:Double"
E_name = #1/1/2016#
Debug.Print E_name & ":" & TypeName(E_name) 'Prints "01-01-2016:Date"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.