エクセル INDEX/MATCH
excel-indexmatch• MATCHで位置を探し、INDEXで値を取り出す流れをアニメーションで表示。 • VLOOKUPと違い、検索列の左側の値も取り出せます。
💡 商品コードを変えるだけで商品名が自動で変わります。VLOOKUPと違い、検索列の左側の値も取り出せます。
INDEX/MATCH はこう読みます
MATCH で値の位置(N)を探し、INDEX でその位置の値を取り出します。VLOOKUPと違い、左の列も取り出せます。
IFERROR で囲むと、存在しないコードは #N/A ではなく「コードなし」と表示されます。
VLOOKUPではなくINDEX/MATCHを使う理由
INDEX/MATCHは結果こそVLOOKUPと同じですが、使える場面が広いです。MATCHが値の位置(何行目か)を求め、INDEXがその位置の値を取り出す2段構造なので、探す列と取得する列を自由に決められます。
つまり、取得したい値が探す値より左にあっても構いません。VLOOKUPは構造上これができず、列の順番を入れ替えたり作業列を追加したりすることになりますが、INDEX/MATCHならその必要がありません。
表を長く使うほど差が大きくなります。VLOOKUPは取得列を番号で指定するため、途中で列を1つ挿入すると別の値を返し始めます。INDEX/MATCHは列そのものを指すのでそのまま動きます。最初は長く見えても、あとが楽です。
よくある質問
INDEX MATCH の順番がいつも分からなくなります
=INDEX(取り出す列, MATCH(探す値, 探す列, 0)) の形を1つ覚えれば十分です。内側の MATCH が先に何番目かを求め、その数字を受け取って INDEX が値を取り出します。上のデモで M の段階と I の段階が分かれて動くのを見ると順番が定着します。
MATCH の最後に付く 0 は何ですか?
照合の種類です。0は完全に一致する値だけを探し、1と-1は並べ替えられた表で近似値を探します。0を省くと既定の1が使われ、並べ替えていない表では見当違いの位置を返すため、理由がなければ常に0を書きましょう。
INDEX MATCH で #N/A が出ます
MATCH が値を見つけられなかったという意味です。探す値と探す列のどちらかに空白が混じっていたり、数値と文字列が混在していることが多いです。見つからないのが想定内であれば =IFERROR(INDEX(...),"該当なし") で囲んで好きな文言を表示できます。
INDEX と MATCH の範囲がずれていても大丈夫ですか?
行数と開始行はそろえる必要があります。MATCH が返すのは範囲内で何番目かという位置なので、MATCH は2行目から、INDEX は1行目からだと結果が1つずれます。エラーが出ずに静かに間違う種類のミスなので特に注意が必要です。
行と列の両方を条件にして値を取り出せますか?
MATCH を2回使います。=INDEX(表, MATCH(行の条件, 行見出し, 0), MATCH(列の条件, 列見出し, 0)) と書けば、行と列が交わるセルの値が取れます。VLOOKUP なら列番号を書き換えていた作業が、数式1つで済みます。
INDEX MATCH と XLOOKUP はどちらを使うべきですか?
XLOOKUP は1つの関数で完結し、見つからないときに表示する値も引数で指定できるので簡単です。ただし比較的新しいバージョンでしか動かないため、古いエクセルとファイルをやり取りする環境では、どこでも開ける INDEX/MATCH が安全です。