VBA VLookup в цикле

Я пытаюсь сделать VLOOKUP набора данных столбца на листе под названием "SyS" в столбце G. и я хотел бы просмотреть соответствующие данные 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 ответ

Вы ошиблись здесь:

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 раз быстрее.

Другие вопросы по тегам