6/16/2015

Excel。一覧表から行単位で抽出するならVLOOKUP関数よりもINDEX関数がおススメ。


Excel。一覧表から行単位で抽出するならVLOOKUP関数よりもINDEX関数がおススメ。

INDEX関数+配列


ちょっと前ですが、VLOOKUP関数だと、
修正が面倒で大変なんだよねぇ~とお聞きしたことがあって、どんなことなのかと聞いてみたら、
下記のような作業だそうでして、

抽出結果を表示する行があって、下なのか別シートなのかわかりませんが、データがあって、
その中から、NOを入力したら、該当するデータを抽出したいということらしいのです。

今回は4月から9月というサンプルですが、もっと列数が結構あるそうです。

確かにVLOOKUP関数でも結果を求めることはできますが、列数が多いとなると、
確かに大変かもしれませんね。

では、VLOOKUP関数で考えてみましょう。
B2をクリックして、VLOOKUP関数ダイアログボックスを表示しましょう。

検索値は、A2
範囲は、$A$6:$H$14 右方向にオートフィルハンドルを使って数式をコピーしますので、
絶対参照は欠かせませんね。

列番号は、2

検索方法は、0 の完全一致ですね。FALSEでもOKですね。

数式は、

=VLOOKUP(A2,$A$6:$H$14,2,0)

では、OKボタンをクリックしてみると、

NOが2なので、店舗名には渋谷と表示されましたね。

では、この数式を右方向にオートフィルハンドルを使ってコピーしてみると、

当然、#N/Aというエラーが表示されてしまいましたね。
これは、検索値がA2ではなくて、B2・C2とずれてしまったからですね。
ですので、複合参照のA2を$A2にするといいでしょう。

=VLOOKUP($A2,$A$6:$H$14,2,0)

ただ、これでは、全部渋谷になってしまいます。

もう一か所直さないといけません。実はそここそが、面倒といわれたところなのです。
その場所とは、
【列番号】
列番号が2のままなので、それを3・4・5・6…と変更しなければいけません。

列番号を算出させる、COLUMN関数をアレンジして…なんていう方法もあることはありますが、
それも大変です。

そこで、このような列数がたくさんある場合には、
INDEX関数+配列関数というテクニックを知っていると、アッサリ算出することが出来ますので、
紹介してきます。

では、B2:H2の数式を削除します。

B2をクリックして、INDEX関数ダイアログボックスを表示してきますが、
INDEX関数を選択すると、引数の選択ダイアログボックスが表示されますので、

今回は、配列,行番号,列番号 を選択します。
OKボタンをクリックすると、INDEX関数のダイアログボックスが表示されてきます。

配列は、リストの B6:H14 を入力します。
行番号は、 A2 を入力します。

列番号は、複数列を参照しませんので、0(ゼロ)を入力します。

OKボタンをクリックしましょう。

渋谷と表示されました。
数式は、=INDEX(B6:H14,A2,0) となっていますが、この数式をコピーするのではありません。

この数式を配列関数にしていきますので、
B2:H2までを範囲選択します。

そうしましたら、そのまま、数式バーにある数式を範囲選択します。

そして、配列関数にしますので、

Ctrl + Shift + Enter 

を押します。

すると、データが抽出されました。
数式は、

{=INDEX(B6:H14,A2,0)}

と変わったことがわかりますね。
では、A2を変えてみましょう。

このように、VLOOKUP関数でもOKですが、場合によっては、
INDEX関数+配列関数というテクニックもありかもしれませんので、
頭の片隅にあると、いざという時に便利ですよ。

ただ、ひとつ注意があります。A2は行番号です。

つまり、コード番号などの文字ではダメで、数値である必要があります。