Есть ли способ заменить это l oop, чтобы найти Instr? - PullRequest
0 голосов
/ 30 января 2020

У меня есть 'для i = 1 до x' l oop, чтобы заполнить столбцы, однако это очень медленно. У меня недостаточно знаний о VBA, чтобы узнать другой путь.

Вот мой код:

Dim j As Long
j = 6

For i = 4 To EFlast_row
If InStr(ef.Cells(i, ActualTitleColumn).Value, search.Cells(searchboxrow, searchboxcolumn).Value)Then
    search.Cells(j, SearchLayerColumn).Value = ef.Cells(i, layercolumn).Value
    j = j + 1
End If
Next i

Любая помощь будет высоко ценится. Спасибо

1 Ответ

0 голосов
/ 30 января 2020

Этот код поместит данные из листов в переменную диапазона. Сравнения с использованием переменных диапазона выполняются значительно быстрее, чем при использовании такой ссылки, как:

Sheets("Sheet1").Cells(1,1).Value

Вам потребуется обновить это значение, чтобы отразить используемые вами переменные.

Function search()

' Put data on sheets into ranges
Dim rangeOne As Range, rangeTwo As Range
Set rangeOne = Sheets("Sheet1").UsedRange
Set rangeTwo = Sheets("Sheet2").UsedRange

' Iterands for rangeOne and rangeTwo respectively
Dim i As Long, j As Long

For i = 2 To rangeOne.Rows.Count
    For j = 2 To rangeTwo.Rows.Count

        If InStr(rangeOne(i, 1).Value2, rangeTwo(j, 1).Value2) Then

            rangeTwo(j, 2).Value2 = rangeOne(i, 2).Value2

        End If

    Next j
Next i

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...