VBA VLookup in Loop

时间:2018-01-23 12:35:16

标签: vba loops vlookup

我正在尝试在G列中名为“SyS”的工作表上执行列数据集的VLOOKUP。并且我想使用位于同一工作簿中的另一个名为“CONF_mapping”的工作表中的列来查看相关数据。我需要找到位于该范围内的数据(“A1:E65000”)(它位于A列,但我需要使用我的vlookup从其他列检索数据到SyS)。我的代码没有取得好成绩,请原谅,这是我在论坛上的第一个问题。

Worksheets("SyS").Select
Dim wsThis As Worksheet
Dim aCell As Range

Sheets("CONF_mapping").Columns(2).Copy Destination:=Sheets("SyS").Columns(8)
Set wsThis = Sheets("SyS")
    With wsThis
        For Each aCell In .Range("A1:E65000")
            '.Cells(aCell.Row, 8) = "Not Found"
            On Error Resume Next
            .Cells(aCell.Row, 8) = Application.WorksheetFunction.VLookup( _
                            aCell.value, wsThat.Range("G2:G65000"), 2, False)
            On Error GoTo 0
         Next aCell
     End With
Worksheets("SyS").Select

我找到了这段代码,但我无法让它对我有用。 我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

你错了:

VLookup(aCell.value, wsThat.Range("G2:G65000"), 2, False)

范围" G2:G65000"只有1列G,但是你试图获得不存在的第2列。

UPD: 我想你需要这样的东西:

Const COLUMN_TO_MATCH_IN_SYS = 8 Const COLUMN_TO_MATCH_IN_CONF = 1 Sub test() Dim wsSys As Worksheet Dim wsConf As Worksheet Set wsSys = Sheets("SyS") Set wsConf = Sheets("CONF_mapping") Dim RowSys As Range Dim RowConf As Range For Each RowSys In wsSys.UsedRange.Rows For Each RowConf In wsConf.UsedRange.Rows If RowSys.Cells(1, COLUMN_TO_MATCH_IN_SYS) = _ RowConf.Cells(1, COLUMN_TO_MATCH_IN_CONF) Then ' Copy row values which is needed RowSys.Cells(1, 6) = RowConf.Cells(1, 1) ' From column A(conf) to G(sys) RowSys.Cells(1, 7) = RowConf.Cells(1, 2) ' From column B(conf) to H (sys) End If Next aCell Next End Sub

使用此解决方案,您不需要搜索每个单元格的范围(仅适用于每一行),因此它的工作速度将提高5倍。