考虑一个场景,我有 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 *
有什么建议么 ?
如果您需要任何额外的细节来解决上述问题,请随意!
最佳答案
试试这个。
对于 3
和 130000 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/