gpt4 book ai didi

vba - 使用 Excel VBA 查找工作簿中的所有匹配项

转载 作者:行者123 更新时间:2023-12-01 17:53:50 24 4
gpt4 key购买 nike

我正在尝试编写一个 VBA 例程,该例程将采用字符串、搜索给定的 Excel 工作簿,并向我返回所有可能的匹配项。

我目前有一个可行的实现,但它非常慢,因为它是一个双 for 循环。当然,内置的 Excel Find 函数已“优化”以查找单个匹配项,但我希望它返回一个初始匹配项数组,然后我可以对其应用进一步的方法。

我将发布一些我已经拥有的伪代码

For all sheets in workbook
For all used rows in worksheet
If cell matches search string
do some stuff
end
end
end

如前所述,这个双重 for 循环使运行速度非常慢,因此我希望尽可能摆脱它。有什么建议吗?

更新

虽然下面的答案可以改进我的方法,但我最终采用了略有不同的方法,因为我需要一遍又一遍地执行多个查询。

我决定循环遍历文档中的所有行,并创建一个包含每个唯一行的键的字典。这个指向的值将是一个可能匹配的列表,这样当我稍后查询时,我可以简单地检查它是否存在,如果存在,就得到一个匹配的快速列表。

基本上只需进行一次初始扫描,将所有内容存储在可管理的结构中,然后查询该结构,这可以在 O(1) 时间内完成

最佳答案

如上所述,使用 Range.Find 方法以及工作簿中每个工作表的循环是执行此操作的最快方法。例如,下面的代码查找字符串“Question?”在每个工作表中并将其替换为字符串“已回答!”。

Sub FindAndExecute()

Dim Sh As Worksheet
Dim Loc As Range

For Each Sh In ThisWorkbook.Worksheets
With Sh.UsedRange
Set Loc = .Cells.Find(What:="Question?")
If Not Loc Is Nothing Then
Do Until Loc Is Nothing
Loc.Value = "Answered!"
Set Loc = .FindNext(Loc)
Loop
End If
End With
Set Loc = Nothing
Next

End Sub

关于vba - 使用 Excel VBA 查找工作簿中的所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19504858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com