使用VLOOKUP()我們有一個短表像一個工作表:通過在A1在VBA
值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
對於我的生活,我看不出有什麼不對的原代碼?
聲明d爲double並使用'cdbl(dateserial(1945,1,18))'。不知道爲什麼,但我認爲vba將日期視爲一個字符串,並且輸入的值是來自工作表的一個數字。 –
@ScottCraner你是對的....雙'和'長'工作..........我只是不知道爲什麼轉換是必要的? –
或者您可以將d保留爲Date,但在調用VLOOKUP時使用cDbl(d)。我懷疑原因是Excel試圖將日期變量轉換爲Excel日期,這不是本機數據Excel數據類型,而是一個伴隨格式化指令的雙精度型:如果將d作爲日期直接傳遞給使用範圍的範圍。它將值作爲數字傳遞並將其格式化爲日期。如果使用Range.Value2,它會以excel的形式顯示爲沒有日期格式的數字。 –