【问题标题】:VBA Vlookup loop issueVBA Vlookup循环问题
【发布时间】:2017-07-11 13:18:26
【问题描述】:

我正在处理大量数据,其中我的工作簿包含多张数据表,我想使用从工作表“SAP Pull”获得的工作表“URR”中的列来查找相关数据。因此,由于 SAP Pull 是包含所有数据的主表,并且 URR 包含具有相关数据的列,因此我将相关数据的该列复制到 SAP Pull 并尝试编写一个 vlookup 循环来查找该列的每一行的相应数据.问题是我不断收到一个错误,称为对象'_Worksheet 的方法'范围'失败。这是我的代码,因为我对为什么不断遇到这个问题感到困惑。

Dim wsThis As Worksheet
Dim aCell As Range

Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22)
Set wsThis = Sheets("SAP Pull")
    With wsThis
        For Each aCell In .Range("V2:V")
            .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup( _
                                aCell.Value, wsThat.Range("A2:D3500"), False)
            Next aCell
         End With
End Sub

【问题讨论】:

    标签: vba excel vlookup


    【解决方案1】:

    您错过了告诉 Excel 您想要返回哪一列的第三条标准。

    你还需要处理aCell.Value在wsThat.Range("A2:D3500")中找不到的问题,当找不到值时它也会停止你的代码。

    您需要以某种方式捕获错误。

    Dim wsThis As Worksheet
    Dim aCell As Range
    
    Sheets("URR").Columns(1).copy Destination:=Sheets("SAP Pull").Columns(22)
    Set wsThis = Sheets("SAP Pull")
        With wsThis
            For Each aCell In .Range("V2:V65000")
                .Cells(aCell.Row, 23) = "Not Found"
                On Error Resume Next
                .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup( _
                                    aCell.Value, wsThat.Range("A2:D3500"),4, False)
                On Error Goto 0
             Next aCell
         End With
    End Sub
    

    这会将Not Found 放入每个单元格中,如果在该范围内找到该值,则会将D 列中的值放入该字段中。

    【讨论】:

    • 谢谢!看起来第三个标准让我一时不知所措。此外,意识到我的代码中不存在 wsThat - 用于切换工作表,但我只是将所有数据移动到一张工作表以解决该问题,现在是 wsThis。不幸的是,这个错误在 For Each aCell In .Range("V2:V") 行中仍然存在,我不确定为什么。任何额外的编辑都会有所帮助!再次感谢。
    • @Shin 查看编辑。您可以将 65000 更改为您的最大范围。
    • 嗨,是的,我理解这个问题,我希望 V2:V 能带我浏览整个列,直到在下一行中找不到值,因为最大范围是可变的。此外,由于某种原因,vlookup 在大约 10 个实例中返回“未找到”,我不确定为什么,因为它们位于 A2:D3500 范围内。
    • 这样不行,需要自己找数据的结尾。有关如何找到最后一行的信息,请参阅 here。至于Not Found,请检查这些值并确保没有空格或任何其他不可见的字符会导致它找不到匹配项。
    • Scott,谢谢你的建议,我相信这就是我想要的。最后一点,我注意到没有返回适当数据的单元格在单元格的左上角有一个错误通知,上面写着“此单元格中的数字被格式化为文本或前面带有撇号。”我试图将其转换为数字,并在数字代码前退格,但无济于事。在这方面您有什么建议吗?再次感谢。
    【解决方案2】:

    您在 VlookUp 中缺少一个声明。

    .Cells(aCell.Row, 23) = Application.WorksheetFunction.VLookup( _
                                    aCell.Value, wsThat.Range("A2:D3500"),2, False)
    

    第三条语句用于将返回的列。

    【讨论】:

      猜你喜欢
      • 2011-10-29
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多