VBA Vlookup循环问题

时间:2017-07-11 13:18:26

标签: vba excel-vba vlookup excel

我处理大量数据,其中我的工作簿包含多张数据,我希望使用工作表中的列来查看相关数据" URR"这是从纸张" SAP Pull"获得的。因此,由于SAP Pull是包含所有数据的主表单,而URR包含具有相关数据的列,因此我将相关数据列复制到SAP Pull并尝试编写vlookup循环以查找列的每一行的相应数据。问题是我不断抛出一个名为Method' range'对象' _Worksheet失败。这是我的代码,因为我对此问题感到困惑。

foreach ($res as $key => $value) {
    if ($value == "") {
        $res[$key] = "NULL";
    }
}

2 个答案:

答案 0 :(得分:1)

您错过了第3个标准,该标准告诉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中的值放入字段中。

答案 1 :(得分:0)

您在VlookUp中缺少一个Statement。

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

第三个声明适用于将返回的列。