Excel業務カイゼンブログ
INDEX関数とMATCH関数
次の表をご覧ください。
この表から商品名や単価を求めるとき、ID番号を参照する場合が多いです。そこで、VLOOKUP関数を使いたくなりますが、この表の場合はできません。
理由は、VLOOKUP関数では一覧表の左側にID番号がなければいけないのです。そんな時は、どのようにすればいいのでしょうか。これから紹介するINDEX関数とMATCH関数を組み合わせれば解決します。
INDEX関数
INDEX関数は、範囲内の縦いくつ、横いくつの位置にあるセルの値を調べる関数です。書式は
=INDEX(範囲,縦位置,横位置)
で、横位置は省略できます。省略すると1列目を指定したことになります。範囲が1列の場合には省略しても構いませんが、複数列がある場合は混乱を避けるために指定するようにしましょう。
この例では、B3からB6の範囲の中でセルB8に入力されている値(今回の例では3)の位置のセルの値を求めています。
セルB8の値を1にすれば、シャツAを返します。
MATCH関数
=MATCH(検索値,範囲,一致か近似値か)
です。一致か近似値かの値は、1か0か-1を指定します。0が基本で、検索値と全く同一のものを探す場合です。1または-1の場合、近似値を探します。
注意しなければならないのは、近似値の場合は、あらかじめ一覧の範囲を並べ替えておかなければ、正しい位置番号を返すことができません。
1では、範囲の中の近似値以下で最大値を探します。一覧を昇順で並べ替える必要があります。-1では、範囲の中の近似値以上で最小値を探します。一覧を降順で並べ替える必要があります。検索値は、文字列でも数値でも構いませんが、近似値検索の場合は、並べ替えが必要です。
文字の並べ替えは、AからZ、あ~んという順番で並べ替えが必要ですが、Excelの並べ替え機能で並べ替えればそのように並びます。
この例では、D3からD6の範囲の中で、セルB8の値(今回はB001)を探して、その位置を求めています。セルB8の値をA002にすれば、答えは2になります。
INDEX関数とMATCH関数を組み合わせてVLOOKUP関数の代わりとする方法
この例では、B3からB6の範囲の中から、B001をD3からD6の範囲から探してその番号のものを返しています。これをINDEX関数とMATCH関数を組み合わせて作っています。書式は、
=INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0))
となります。この方法であれば、VLOOKUP関数ではできなかった、左端に検索値がない表からの検索が可能になります。また、実際に求める値の範囲を1列のみを指定すれば、VLOOKUP関数で指定する列番号は指定しなくてもよくなります。この計算式をコピーする場合は、コピーする前に、実際に求める値の範囲と、検索する値の範囲を絶対参照にしておきましょう。
気を付けたいのは、INDEX関数の求めた値の結果、空白セルを参照していた場合、空白(="")ではなく、0(=0)と判断されます。もし空白なら空白としたい場合は、INDEXの求めた結果が0ならば空白とし、
=IF(INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0))=0,"",INDEX(実際に求める値の範囲,MATCH(検索値,検索する値の範囲,0)))
のような書式になりますが、本当に0が入力されていても空白となります。この場合は他の関数を利用することになります。
まとめ
INDEX関数とMATCH関数の組み合わせは、代表的なこの2つの関数の利用例です。単独でも有用な使い方や応用の範囲が広い関数です。
Forguncyをもっとよく知る
各業種や用途別にForguncyを活用して、成功した事例や使い方のご紹介します。