あなたの質問はむしろコードなしで意見を求めるテキストベースなので、私はあなたに私の意見を述べ、この答えを通して見つけます-十分に公平です:)
私のコメントによると、
したがって、data book
別の本から検索を行いたい場合は、このバグを考えると、それがより良いアイデアです: ActiveX データ オブジェクト (ADO) を使用して、開いている Excel ワークシートをクエリすると、メモリ リークが発生します。
そのようにdata book
して、データベース自体を扱い、Excel シートからクエリを実行します。そうしても、データセットとして検討している検索可能な各シートが同様の構造を持っていることを確認したい場合があります。サンプルデータを提供していただければ、暗闇でターゲットに石を投げ続けるよりもはるかに優れています... ;) 行の検索について言及しました。シートごとに 1 列の行を検索していますか? その場合、検索可能なすべてのシートにこの列が含まれていますか?
したがって、検索/スキャンする行については、Microsoft が次のように述べていることに注意してください。
「スキャンする行: Excel は、リレーショナル データベースのように、含まれるデータに関する詳細なスキーマ情報を ADO に提供しません。したがって、ドライバーは、知識に基づいた推測を行うために、既存のデータの少なくとも数行をスキャンする必要があります。各列のデータ型. "Rows to Scan" のデフォルトは 8 行です. 1 行から 16 行までの整数値を指定するか、ゼロ (0) を指定してスキャンすることができます.すべての既存の行. これは、オプションの MaxScanRows= 設定を接続文字列に追加するか、DSN 構成ダイアログ ボックスで [スキャンする行] 設定を変更することによって行われます。
ただし、ODBC ドライバーのバグにより、現在、[スキャンする行数 (MaxScanRows)] 設定を指定しても効果がありません。つまり、Excel ODBC ドライバー (MDAC 2.1 以降) は、各列のデータ型を判別するために、指定されたデータ ソースの最初の 8 行を常にスキャンします。"
さらに、検索可能な行にデータ型が混在している場合は、大きな危険にさらされます。マイクロソフトもその側面について語っています。
VBA Binary Search
したがって、上記のプロセスでは多くの予防措置を講じることができますが、aや aよりも高速です.Find
。ただし、アプローチを取りたくないADO
場合は、思いついたデザインを提供することができます。それについても喜んで提案します。:)