我正在尝试编写一个函数,该函数将根据匹配日期查找表中的值。如果没有匹配,它将在返回错误之前最多7天进行查找。
Option Explicit
Public Function GetWeekEndBalanceFromStatement(lookupDate As Date, statement As Range, column As Integer) As Variant
Dim lookupModifier As Integer
Do While IsError(Application.VLookup(DateAdd("d", lookupModifier, lookupDate), statement, column, False)) And lookupModifier > -7
lookupModifier = lookupModifier - 1
Loop
GetWeekEndBalanceFromStatement = Application.VLookup(DateAdd("d", lookupModifier, lookupDate), statement, column, False)
End Function
当我将其分解为调试时,我遇到的问题是VLookups一直返回
错误2042
即使在电子表格中写入的相同VLookup返回值。
书面函数需要参考,K8是第一行:
=DATE(2018,1,5)
=VLOOKUP(K8, A:F, 6,FALSE )
=GetWeekEndBalanceFromStatement(K8,A:F,6)
关于我可能做错什么的任何线索?我试图在CDate中封装日期,将.Value附加到范围并将日期作为变量并访问.Value2。
答案 0 :(得分:3)
在运行一些测试后,我回想起在使用VLookup
和Match
与日期时遇到的一些问题,更好地使用他们的Excel值(将Date
更改为Double
)。
修改后的功能代码
Option Explicit
Public Function GetWeekEndBalanceFromStatement(lookupDate As Double, statement As Range, column As Integer) As Variant
Dim lookupModifier As Integer
Do While IsError(Application.VLookup(lookupDate + lookupModifier, statement, column, False)) And lookupModifier > -7
lookupModifier = lookupModifier - 1
Loop
GetWeekEndBalanceFromStatement = Application.VLookup(lookupDate + lookupModifier, statement, column, False)
End Function