VBA
文字列を取得し、特定の Excel ワークブックを検索して、考えられるすべての一致を返すルーチンを作成しようとしています。
現在、機能する実装がありますが、二重の for ループであるため、非常に低速です。もちろん、組み込みの ExcelFind
関数は単一の一致を見つけるように「最適化」されていますが、最初の一致の配列を返し、さらにメソッドを適用できるようにしたいと考えています。
私はすでに持っているもののいくつかの擬似コードを投稿します
For all sheets in workbook
For all used rows in worksheet
If cell matches search string
do some stuff
end
end
end
前に述べたように、この二重の for ループは実行を非常に遅くするため、可能であればこれを取り除くことを検討しています。助言がありますか?
アップデート
以下の回答で私の方法は改善されましたが、複数のクエリを何度も実行する必要があったため、最終的にはわずかに異なるものになりました。
代わりに、ドキュメント内のすべての行をループして、一意の行ごとにキーを含む辞書を作成することにしました。これが指す値は、可能な一致のリストになるため、後でクエリを実行するときに、存在するかどうかを確認し、存在する場合は、一致の簡単なリストを取得できます。
基本的には、最初のスイープを 1 回実行してすべてを管理可能な構造に格納し、その構造をO(1)
時間内にクエリするだけです。