В настоящее время у меня есть оператор With, который сравнивает значение ячейки с диапазоном ячеек, и InStr()
возвращает true, затем помечает cell.Value
как "Yes"
, а если нет, то "No"
.
Вот сценарий. Скажем, я проверяю значение A2
, а это 111
. Я сравниваю 111
с диапазоном других ячеек, и поле, которое должно соответствовать, равно 111, 222, 333
, поскольку оно содержит 111
. Мой первый набор кода ниже работает для этого, но медленно. Я надеялся на более быстрый путь и думаю, что смогу сделать это с формулой, но использование True
вместо False
в vlookup не работает так, как я думал.
Вот код:
With inv_twcg_ws
For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
For Each cellx In report_rng
If InStr(cellx.Value, cell.Value) Then
cell.Offset(0, 6).Value = "Yes"
Exit For
End If
cell.Offset(0, 6).Value = "No"
Next cellx
Next cell
End With
Проблема в том, что это довольно медленно. Мое приложение занимает около 5 минут для запуска. Я надеялся как-то объединить InStr()
с Application.Vlookup()
, чтобы попытаться ускорить формулу. Это возможно?
Вот мой текущий Vlookup, но использование True
не подходит для моих нужд ...
With inv_twcg_ws
For Each cell In .Range("G2:G" & .Cells(Rows.Count, "A").End(xlUp).Row)
cell.Value = Application.WorksheetFunction.IfError(Application.VLookup(CStr(cell.Value), report_rng, 1, True), "No")
Next cell
End With