Мне нужна небольшая помощь с некоторым кодом.VBA: VLookUp Несколько результатов
Я пытаюсь выполнить ВПР, и имеет данные, отображаемые в колонках O, P и Q.
Что я пытаюсь сделать, это цикл, хотя лист («Global») колонка А начиная со строки 3 до последнего используемого ряда. Он должен сопоставлять данные на листе («Детали») в столбце А, начиная со строки 2.
Поэтому, когда он находит соответствующее значение, на нем будут отображаться результаты из «Детали» C2 в «Глобальном» O2 ». Подробности «I2 в« Глобальном »P2 и« Подробности »G2 в« Глобальном »Q2.
Для этого необходимо выполнить цикл «Глобальное» сопоставление и копирование всех данных. Если совпадение не найдено, отобразите «NA!».
Последнее, что мне нужно, это удалить все строки в Global, где совпадение не найдено.
Код, который у меня ниже, делает то, что мне нужно, единственная проблема в том, что он невероятно медленный, за считанные минуты, чтобы занять 800 строк, а иногда и дольше!
Есть ли другой способ сделать это, что будет работать более плавно и быстрее?
Любая помощь приветствуется!
Спасибо
`Private Sub btnVlookUp_Click()
Dim i, j, lastG, lastD As Long
' find last row
lastG = Sheets("Global").Cells(Rows.Count, "B").End(xlUp).Row
lastD = Sheets("Details").Cells(Rows.Count, "A").End(xlUp).Row
' loop over values in "Global"
For i = 3 To lastG
lookupVal = Sheets("Global").Cells(i, "B") ' value to find
' loop over values in "details"
For j = 2 To lastD
currVal = Sheets("Details").Cells(j, "A")
If lookupVal = currVal Then
Sheets("Global").Cells(i, "O") = Sheets("Details").Cells(j, "C")
Sheets("Global").Cells(i, "P") = Sheets("Details").Cells(j, "I")
Sheets("Global").Cells(i, "Q") = Sheets("Details").Cells(j, "G")
' mark the row
Sheets("Details").Cells(j, "Z") = "marked"
End If
Next j
Next i
' loop over rows in "details" and delete rows which have not been marked
For j = 2 To lastD
If Sheets("Details").Cells(j, "Z") <> "marked" Then
' delete unmarked rows
Sheets("Details").Cells(j, "A").EntireRow.Delete
If Sheets("Details").Cells(j, "B") <> "" Then
j = j - 1 ' revert iterator so it doesn't skip rows
End If
Else:
' remove the mark
Sheets("Details").Cells(j, "Z") = ""
End If
Next j
End Sub`
hpf, не могли бы вы прокомментировать мой недавний вопрос с измененным кодом? [Здесь] (http://stackoverflow.com/questions/38832559/vlookup-return-multiple-values-to-a-cell) – Jonnyboi