【发布时间】:2019-02-01 17:13:51
【问题描述】:
我想遍历 A 列并检查 B 列中是否存在任何值。我目前正在使用 .Find 函数,但是当我开始处理大量行 (>60 000) 时,它开始占用运行代码的时间很长。
我认为我可以在每列的内存记录集中创建 2 个并使用 .FindFirst 比较它们,但我无法使其工作。我认为这是因为我没有使用任何“ADO/DAO”连接,因为我的数据在工作簿本身中。
有没有办法在 B 列中为 A 列的每个值快速找到匹配项?
我尝试将代码更改为 .FindFirst 并使用记录集,但它一直说“对象不支持属性等...”。
For Each cel In rngRD.Cells
With ThisWorkbook.Sheets("RawData").Range("A1:A" & Last_Row_DB)
.Cells(1, 1).Activate
Set CRef = .Find(What:=cel, _
After:=ActiveCell, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
'If cannot be found then
If CRef Is Nothing Then
'Do Something
Else
Set CRef = .FindNext(CRef)
End If
End With
Next cel
【问题讨论】:
-
Excel
Range不是RecordSet- 它是Range(Excel 也不是“数据库”,但这既不是这里也不是那里......)。我建议在Dictionary中建立一个查找,然后使用它。这里有很多关于如何做到这一点的例子。 -
@Comintern - 感谢您的快速回复。例如,如果我想用值 B 引用值 A,我认为会使用 Dictionary。这里 A 列和 B 列会有相似的数据,我只想知道它们之间是否可以找到重复项,字典会这样做吗?
-
如果
Dictionary包含来自B 列的值,而Dictionary中的A 列值.Exists,则它是重复的。 Here's an example over on Code Review. -
@Comintern - 谢谢,我正在尝试这个并将发布结果!
标签: excel vba recordset findfirst