有没有办法替换此循环以找到Instr?

时间:2020-01-30 16:34:29

标签: excel vba performance loops

我有“ for i = 1 to x”循环来填充列,但是速度很慢。 我对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 :(得分:0)

此代码会将工作表中的数据放入一个范围变量。使用范围变量的比较比使用类似参考的速度要快得多:

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