vlookupは手軽で便利ですが、データ数が増えるにつれ反応が悪くなる傾向があります。
これを高速にするコツがあります。
遅いけど安全なvlookupの [検索方法]=false
A列とB列を検索し、品番から雑貨名称を得るために、こんな感じのvlookup設定をしたとします。
この検索方法false(または0)が肝です。

意図してfalseなら良いのですが、よく分からないけどfalse(または0)にしたら動いたから、という理由でそのまま定着していませんか?
検索方法のオプションをfalseにすると、先頭から検索してヒットするまで探す、線形探索をします。
探すデータが末尾にあった場合、2行なら2回、10万行なら10万回、100万行なら100万回探索します。
データ数に比例して探索回数が増える代わり、全てをくまなく探索してくれます。
注意は要るけど速いvlookupの [検索方法]=true
検索方法をtrue(または1)にすると二分探索になります。
後述しますが、前提として昇順(小さい順)に整列させておかないとちゃんとヒットしてくれません。

ざっくりと下図のように、半分ずつそぎ落としていきます。
①探している対象が、真ん中の数字より大きいか小さいか
②もっと大きい数字を探しているのなら、残りの数字の真ん中と比較する。
これより小さい数字を探しているのなら①と②の真ん中と比較する
(以下、②繰り返し)
対象を半分ずつに絞っていくという探索です。

この絞り方の特徴がら、昇順に並べかえていることが必要になる訳です。
また、ピタリ一致するものがない場合には近似のものを返します。そのため「検索方法 trueだと間違ったものを引っ張ってくる」という印象を持っている人もすくなくないでしょう。
何はともあれ、1回の探索ごとに1/2に絞っていけます。
探している行が一番下にあったとして
2行なら2回(または1回)でヒットします。
10万行なら最大17回(2の17乗で10万を超えるので、10万を1/2にし続けたら17回で1つになる)
100万レコードでも最大20回の探索でヒットします。(2の20乗で100万を超えるので、100万を1/2にし続けたら20回で1つになる)
まとめ
- 遅いけど安全な線形探索、 [検索方法]=false
100万行なら最大100万回の探索 - 昇順に並べ替える必要があるけど速い二分探索、 [検索方法]=true
100万行でも最大20回の探索


コメント