INDEX関数とMATCH関数

INDEXとMATCH関数を組み合わせると、VLOOKUP関数より高度に検索することが出来ます。

VLOOKUP関数は左端の列からしか検索できませんが、それを好きな列から検索できるようになります。

表の行と列の見出しを検索して値を取得する方法も紹介します。

この表から商品名や単価を求めるとき、ID番号を参照したくなります。

そこで、VLOOKUP関数を使いたくなりますが、この表の場合はできません。なぜなら、VLOOKUP関数では一覧表の左側にID番号がなければいけないのです。

そんな時は、INDEX関数とMATCH関数を組み合わせれば解決します。

 

◆INDEX関数

INDEX関数は、範囲内の縦いくつ、横いくつの位置にあるセルの値を調べる関数です。

書式は=INDEX(範囲,縦位置,横位置)

で、横位置は省略できます。省略すると1列目を指定したことになります。範囲が1列の場合には省略しても構いませんが、複数列がある場合は混乱を避けるために指定するようにしましょう。

この例では、A2からA6の範囲の中でセルA8に入力されている値(今回の例では3)の位置のセルの値を求めています。

セルA8の値を5にすれば、「コート」を返します。

◆MATCH関数

MATCH関数は、範囲内から指定した値を探して、範囲内の上から数えた位置を求める関数です。

書式は=MATCH(検索値,範囲,一致か近似値か)です。

一致か近似値かの値は、1か0か-1を指定します。

0が基本で、検索値と全く同一のものを探す場合で、1または-1の場合、近似値を探します。

☆注意:近似値の場合は、あらかじめ一覧の範囲を並べ替えておかなければなりません。

1では昇順:範囲の中の近似値以下で最大値を探します。

-1では降順、範囲の中の近似値以上で最小値を探します。

※検索値は、文字列でも数値でも構いませんが、近似値検索の場合は、並べ替えが必要です。

文字の並べ替えは、AからZ、あ~んという順番で並べ替えが必要ですが、Excelの並べ替え機能で並べ替えればそのように並びます。

この例では、C2からC6の範囲の中で、セルA8の値(今回はB002)を探して、その位置を求めています。

セルB8の値をA001にすれば、答えは1になります。

 

◆INDEX関数とMATCH関数を組み合わせてVLOOKUP関数の代わりとする方法

この例では、A2からA6の範囲の中から、B002をC2からC6の範囲から探してその番号のものを返しています。

これをINDEX関数とMATCH関数を組み合わせて作っています。

書式は、=INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0))

となります。

この方法であれば、VLOOKUP関数ではできなかった、左端に検索値がない表からの検索が可能になります。

また、実際に求める値の範囲を1列のみを指定すれば、VLOOKUP関数で指定する列番号は指定しなくてもよくなります。

この計算式をコピーする場合は、コピーする前に、実際に求める値の範囲と、検索する値の範囲を絶対参照にしておきましょう。

気を付けたいのは、INDEX関数の求めた値の結果、空白セルを参照していた場合、空白(=””)ではなく、0(=0)と判断されます。

もし空白なら空白としたい場合は、INDEXの求めた結果が0ならば空白とし、

=IF(INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0))=0,””,INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0)))

のような書式になりますが、本当に0が入力されていても空白となります。

この場合は他の関数を利用することになります。

 

◆表の見出しを検索する

次のような表の見出しを検索して値を取得する方法を2つ紹介します。

◆INDEX と MATCH 関数を組み合わせる

行見出しと列見出しを検索条件にして一致するデータを取得します。

=INDEX($C$3:$E$5,MATCH(B8,$B$3:$B$5,0),MATCH(C8,$C$2:$E$2,0))

INDEX 関数」の引数「行番号」と引数「列番号」を「MATCH 関数」で取得しています。

それぞれの「MATCH 関数」の引数「検索範囲」には、見出しの範囲を指定します。行見出しならB3:B5、列見出しならC2:E2を入力します。

 

◆VLOOKUP と MATCH 関数を組み合わせる

行見出しと列見出しを検索条件にして一致するデータを取得します。

=VLOOKUP(B8,$B$3:$E$5,MATCH(C8,$B$2:$E$2,0),FALSE)

 

VLOOKUP 関数」の引数「列番号」を「MATCH 関数」で取得しています。

MATCH 関数」の引数「検索範囲」には列見出しの範囲B2:E2を指定します。行見出しの B 列も範囲に含める必要があります。