Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA中的VLookup,用于第一次通过后失败的循环_Excel_For Loop_Vlookup_Vba - Fatal编程技术网

Excel VBA中的VLookup,用于第一次通过后失败的循环

Excel 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

我尝试在VBA中使用FOR循环来循环一个工作表,并使用VLookup根据每个范围确定值。基本上,工作表是在我有14个范围的地方设置的,每个范围有两列(日期和值),设置如下:

这段代码循环遍历每个范围并执行VLookup以返回值,如果没有值,则返回-1

我遇到的问题是,这适用于第一行数据,但此后所有行都返回-1

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出于好奇,您有什么建议?我想不出一个更优雅的方法来捕捉这个范围