Excel VBA中的VLookup,用于第一次通过后失败的循环
我尝试在VBA中使用FOR循环来循环一个工作表,并使用VLookup根据每个范围确定值。基本上,工作表是在我有14个范围的地方设置的,每个范围有两列(日期和值),设置如下: 这段代码循环遍历每个范围并执行VLookup以返回值,如果没有值,则返回-1 我遇到的问题是,这适用于第一行数据,但此后所有行都返回-1Excel VBA中的VLookup,用于第一次通过后失败的循环,excel,for-loop,vlookup,vba,Excel,For Loop,Vlookup,Vba,我尝试在VBA中使用FOR循环来循环一个工作表,并使用VLookup根据每个范围确定值。基本上,工作表是在我有14个范围的地方设置的,每个范围有两列(日期和值),设置如下: 这段代码循环遍历每个范围并执行VLookup以返回值,如果没有值,则返回-1 我遇到的问题是,这适用于第一行数据,但此后所有行都返回-1 Sub Format(inSheet As String, outSheet As String, lastAvail as Date, maxRows as Long) Do Whil
Sub Format(inSheet As String, outSheet As String, lastAvail as Date, maxRows as Long)
Do While curDate <= lastAvail
For x = 2 To (maxRows - 1) * 2 Step 2
' Get value of current data series
Sheets(inSheet).Activate
Range(Cells(8, x - 1), Cells(8, x)).Select
Range(Selection, Selection.End(xlDown)).Select
Set lookupRange = Selection
val = Application.VLookup(curDate, Worksheets(inSheet).Range(lookupRange.Address), 2, False)
Sheets(outSheet).Activate
If IsError(val) Then
Cells(curRow, x / 2 + 1).Value = -1
ElseIf IsNumeric(val) Then
Cells(curRow, x / 2 + 1).Value = val
Else
Cells(curRow, x / 2 + 1).Value = Null
End If
Next
curDate = DateAdd("m", 1, curDate)
Cells(curRow, maxRows + 1).Value = curDate - 1
curRow = curRow + 1
val = ""
Loop
子格式(inSheet为字符串,outSheet为字符串,lastAvail为日期,maxRows为长度)
虽然curDate谢谢你们的帮助,但事实证明,当我用DateAdd
增加curDate时,它会改变格式,所以VLookup
无法识别它与实际数据匹配。就在VLookup
之前,我把curDate转换成了Long
,一切都自行解决了 您是否尝试过单步查看循环中发生了什么?我不是100%确定,但您是否在curDate=DateAdd(“m”,1,curDate)
上添加了一个月,而您的数据示例仅是同一个月(1月)中的一组天?此外,它也是,这通常会有所帮助。除了其他方面,您在循环的每次迭代中都会更改查找范围:您真的只想更改查找值(您在表中搜索的内容)。@BruceWayne出于好奇,您有什么建议?我想不出一个更优雅的方法来捕捉这个范围