イケてないVLOOKUPはもうやめよう。
かつてここまでVLOOKUPを辛辣に
入力されたVLOOKUP関数をINDEX&MATCHの組み合わせ型に自動変換します。(HLOOKUP関数にも対応します)
❝VLOOKUPは使えますか?❞
私はこの質問を過去に2度受けたことがある。何れも企業面接を受けたときに面接官が発した言葉であった。どうやら彼らの中では、「VLOOKUPが使える=EXCEL(スプレッドシート)がある程度使える」という定義がされているようで、実際に世の中の求人広告には「VLOOKUPが使える」人を求む案件が数多く存在する。
例えば、あなたがある企業の面接を受けるとしよう。面接官から「VLOOKUPは使えますか?」と質問されたときに次のように述べることができればどうだろうか?
❝はい、使えます。しかしVLOOKUPには2つの大きな欠点があるため、私は使わないようにしています。❞
これであなたはきっと面接官から一目置かれることだろう。(または激しくイラッとされることだろう…諸刃の剣)
仮に、次のようなデータがあるとしよう。
H2セルに注文番号を入力すると、VLOOKUPで商品名とペリカは表示できるが、注文者情報はマスターデータ上(B〜E列)で注文番号(C列)の左側(B列)に位置するため、拾うことができない。
VLOOKUP関数の第3引数(ここでは「2」)は、検索対象列(ここでは「C列」)から数えてx番目(ここでは「2番目」)の列(ここでは「D列」)を示すので、注文番号10003の場合、VLOOKUP関数の第3引数を「2」にすれば商品名(D列)が、「3」にすればペリカ(E列)が、「1」にすれば自分自身(C列)の値が取得できる。
そうとなれば、この第3引数を1より小さくすれば検索対象列の左側に位置するものも拾えるのでは?と思うのが世の常、人の常。しかし実際に0を入れてみると返ってくるのは虚しくも「#VALUE!」だけ。
では、どうすれば良いか?結論を先に述べよう。今回の関数
=VLOOKUP(H2,C3:E7,0,FALSE)
をそのままVLOOKUP変換ツールにかけてみよう。変換される関数は
=INDEX(B3:B7,MATCH(H2,C3:C7,0))
となる。この関数を先程の注文者表示セル(G5)に入れてみるとどうなるか?
これこそが当プロジェクトで激推しする「INDEX&MATCH組み合わせ型」の全貌である。
ちなみに、「OFFSET&MATCH組み合わせ型」というのもあって、
=OFFSET(C2,MATCH(H2,C3:C7,0),-1)
にしても結果は同じだが、この「OFFSET&MATCH組み合わせ型」というのは、次に紹介する「VLOOKUPの欠点その2」をクリアできないため、当プロジェクトではその存在をガン無視で貫く所存である。
今度は、マスターデータの列を一つ増やしてみよう。
理由は単純で、VLOOKUP関数の第3引数(ここでは「2」)は、検索対象列(ここでは「C列」)から数えてx番目(ここでは「2番目」)の列(ここでは「D列」)を示すものであるため、列を増やしたことで注文番号(C列)から数えて2番目のD列が「商品名」から「注文日」に、3番目のE列は、「ペリカ」から「商品名」に入れ替わってしまったからである。
ズレたデータを正すためには、VLOOKUP関数の第3引数の値を、列が増えた分(または減った分)数えて調整する他ない。(ここでは商品名を「2」から「3」に、ペリカを「3」から「4」に)
つまり、「検索対象列からx番目の列」というふうに、絶対値で示すというイケてない仕様であることが全ての元凶なのだ。(しかも、前述の通り0や負の数も使えない)
一方で、我らの「INDEX&MATCHの組み合わせ型」だとどうなるか?
もちろん、検索対象列の左側の値(注文者)も表示できる。
このように、INDEX&MATCHの組み合わせ型を使うことで、VLOOKUP関数の欠点を全てカバーできるのである。
ここまで散々VLOOKUPのダメ出しを言っておいて今更肩を持つのはアレだが、実はこんな私もVLOOKUPを使うときがある。それは、未来永劫編集することのない、ポイと使い捨てるデータをサクッと作るときに限る。もちろんその理由は、INDEXとMATCHという2つの関数を組み合わせるより、VLOOKUP関数1つで完結させたほうが直感的にわかりやすいが故に、関数を書き終わるまでの時間が1秒でも短く済むからである。
VLOOKUPがINDEX&MATCH型に勝る唯一無二の強みは、その「わかりやすさ」にある。
さて、次のグラフは、VLOOKUPとHLOOKUPの人気度を比較したものである。
VLOOKUPとは兄弟関数なのに、ここまで差をつけられたHLOOKUPが不憫でならない。
VLOOKUP変換ツールでは、その名前に反してHLOOKUPにも対応しているので、HLOOKUP関数を実務で使っているというマニアックな人には是非活用していただきたい。
当プロジェクトに関するお問い合わせはこちらからどうぞ。