PR

vlookupを高速化するには[検索方法]=true

エクセルまずこれから
スポンサーリンク

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回の探索

コメント

タイトルとURLをコピーしました