マクロを作るとかなりの頻度で行うことになる「セルの検索」ですが、
これを実行するには以下の手段が挙げられます。
- 検索範囲の全セルを愚直にFor文で判定
- Range.Findメソッド
- WorksheetFunction.Match
- セル範囲.Formula = "=MATCH"
- 第1セル.Formula2 = "=スピルするMATCH"
- Dictionary(連想配列)オブジェクト
- 自作したバイナリサーチ
この中でどれが早いかを検証してみましょう。
お忙しい方向けに結論を先に述べますと、
1万件からの検索を1万回行った結果がこちらでした。
| 検索方法 | セル直接参照 | 読取を配列 | 出力を配列 | どちらも配列 |
|---|---|---|---|---|
| 愚直にFor文 | 109.2秒 | 2.748秒 | 109.1秒 | 1.796秒 |
| Range.Find | 23.59秒 | |||
| WF.Match | 1.003秒 | 11.56秒 | 0.084秒 | 0.053秒 |
| Formula "MATCH" | 0.073秒 | |||
| Formula "XMATCH" | 0.117秒 | |||
| Formula2 "MATCH" | 0.034秒 | |||
| Dictionary | 0.975秒 | 0.065秒 | 0.031秒 | |
| 自作バイナリサーチ | 0.047秒 |