考虑一个场景,我有 2 列(列“A”和列“B”)。

A 列大约有 130000 行/字符串
B 列大约有 10000 行/字符串

我想从“A”列中搜索“B”列的每个字符串。

如您所见,数据量非常大。我已经尝试过 Range.Find() 方法。但是要花很多时间才能完成。我正在寻找一种方法/方式,可以让我的周转时间非常短。

* 关于我的要求的更多说明 *

(1) A & B 列包含字符串值,而不是数字。并且字符串可以非常大

(2)对于“B”列中的每个单元格,“A”列中可以出现多次

(3)我想用行号获取“A”列中“B”列的所有出现

(4) 对于“B”列中存在的字符串。它可以作为“A”列中任何单元格的子字符串找到

下载文件链接 - wikisend.com/download/431054/StackOverFlow_Sample.xlsx *

有什么建议么 ?

如果您需要任何额外的细节来解决上述问题,请随意!

最佳答案

试试这个。

对于 3130000 rows in Col A ,这花费了 10000 rows in Col B 秒。输出在 Col C 中生成。

注意 :我采用了 worst 案例场景,其中 Col B 中的所有 10000 值都存在于 Col A 中

这就是我的数据的样子。

Sub Sample()
    Debug.Print Now

    Dim col As New Collection
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")

    Application.ScreenUpdating = False

    With ws
        .Range("C1:C10000").Value = "No"

        For i = 1 To 130000
            On Error Resume Next
            col.Add .Range("A" & i).Value, CStr(.Range("A" & i).Value)
            On Error GoTo 0
        Next i

        On Error Resume Next
        For i = 1 To 10000
            col.Add .Range("B" & i).Value, CStr(.Range("B" & i).Value)
            If Err.Number <> 0 Then .Range("C" & i).Value = "Yes"
            Err.Clear
        Next i
    End With

    Application.ScreenUpdating = True

    Debug.Print Now
End Sub

这就是结果

关于vba - 在 Excel VBA 中需要最快的搜索方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19840955/

10-17 02:29