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