This question already has an answer here:
Unable to lookup a date using vba vlookup
(1个答案)
去年关闭。
我们在工作表中有一个简短的表格,例如:

A1到A3中的值是这些公式的结果:
如果我尝试在工作表单元格中使用VLOOKUP():
我得到正确的结果(Moe):
![excel - 在VBA中使用VLOOKUP()-LMLPHP excel - 在VBA中使用VLOOKUP()-LMLPHP]()
但是在VBA中:
我收到一个错误:
![excel - 在VBA中使用VLOOKUP()-LMLPHP excel - 在VBA中使用VLOOKUP()-LMLPHP]()
我们当前的解决方法是使用:
对于我的一生,我看不出原始代码有什么问题?
(1个答案)
去年关闭。
我们在工作表中有一个简短的表格,例如:
A1到A3中的值是这些公式的结果:
=DATE(1999,12,15)
=DATE(1945,1,18)
=DATE(2020,2,23)
如果我尝试在工作表单元格中使用VLOOKUP():
=VLOOKUP(DATE(1945,1,18),A1:B3,2)
我得到正确的结果(Moe):
但是在VBA中:
Sub RetrieveName()
Dim d As Date, nam As String, rng As Range
d = DateSerial(1945, 1, 18)
Set rng = Range("A1:B3")
nam = Application.WorksheetFunction.VLookup(d, rng, 2)
MsgBox nam
End Sub
我收到一个错误:
我们当前的解决方法是使用:
Sub RetrieveName2()
Dim d As Long, nam As String, rng As Range
d = 16455
Set rng = Range("A1:B3")
nam = Application.WorksheetFunction.VLookup(d, rng, 2)
MsgBox nam
End Sub
对于我的一生,我看不出原始代码有什么问题?
最佳答案
Scott Craner是正确的,可以在将VBA日期传递给VLOOKUP之前将其转换为Double。
我认为问题在于Excel和VBA使用Range.Value规则将值传递回VLOOKUP函数。 Excel没有真正的Date数据类型-Excel中的日期是双精度格式,并带有日期格式。
Range.Value尝试将格式化为日期的Excel数字转换为VBA日期,反之亦然,当将VBA日期传递回Excel时反之亦然,但是VLOOKUP无法理解数字和格式代码。
Sub RetrieveName()
Dim d As Double, nam As Variant, rng As Range
d = DateSerial(1945, 1, 18)
Set rng = Range("A1:B3")
nam = Application.WorksheetFunction.VLookup(d, rng, 2)
MsgBox nam
End Sub
Sub RetrieveName2()
Dim d As Variant, nam As Variant, rng As Range
'
' note Range("a2").value will fail
'
d = Range("a2").Value2
Set rng = Range("A1:B3")
nam = Application.WorksheetFunction.VLookup(d, rng, 2)
MsgBox nam
End Sub
关于excel - 在VBA中使用VLOOKUP(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46025524/