gpt4 book ai didi

excel - 在 VBA 中使用 VLOOKUP()

转载 作者:行者123 更新时间:2023-12-02 17:15:05 28 4
gpt4 key购买 nike

我们在工作表中有一个简短的表格,例如:

enter image description here

A1A3 中的值是以下公式的结果:

=DATE(1999,12,15)
=DATE(1945,1,18)
=DATE(2020,2,23)

如果我尝试在工作表单元格中使用VLOOKUP():

=VLOOKUP(DATE(1945,1,18),A1:B3,2)

我得到了正确的结果(Moe):

enter image description here

但是在 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

我收到错误:

enter image description here

我们当前的解决方法是使用:

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 Date 传递给 VLOOKUP 之前将其转换为 Double 是可行的。
我认为问题在于 Excel 和 VBA 使用 Range.Value 规则将值传递回 VLOOKUP 函数。 Excel 没有真正的日期数据类型 - Excel 中的日期是带有日期格式的 double 。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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com