[プログラミング: ExcelVBA] 1次元配列から値を検索する方法とその処理速度のまとめ(値の重複有り)
みなさん、VBAでシートに登録されている商品マスタからその商品を特定するような場合、どうしていますか?
僕は、シートに登録されている情報を一度変数に入れて、その中から検索するタイプです。
このノートでは変数(配列)に格納した値をどうやったら簡単に早く見つけられるかを考え、実験をした結果をまとめてみました。
< 実験内容 >
要素数10,000個の1次元配列を作成し、そこから10,000回の検索した場合の処理時間を計測する。
配列に格納する値は10,000を最大値とするランダムな整数値で、重複した値も含まれるが値が見つかった場合はその値の検索を終える(ループから抜ける)。
また、検索する値もランダムに生成された値を使う。
< 実験環境 >
・OS:Windows 8.1 Pro 64bit
・Office:Office365 32bit
・CPU:Intel Core i5 3450 @3.1GHz
・RAM:16GB
< 検索方法 >
(1) ワークシート関数のMatch関数を使う(普段僕が多用している方法)
(2) 配列を要素数の分だけループさせて、要素一つずつ検索値と同じか
どうかを比較する
(3) (2)の方法をループで比較する部分をFunctionプロシージャ化する
(4) Collectionに入れて、ItemをForEachループさせて比較する
(5) (4)のCollectionをForループさせ、Itemをインデックス番号指定で比較する
(6) Dictionaryに入れて、ForEachループで取得したItemと比較する
< その他 >
各検索方法をそれぞれ10回ずつ実行し、その平均速度を取る。