VLOOKUPでは引けない「左の列」を引く:INDEXとMATCHの組み合わせと2つの注意

VLOOKUPでは引けない「左の列」を引く:INDEXとMATCHの組み合わせと2つの注意

記事
IT・テクノロジー
社員名簿で「社員番号から名前を出したい」のに、名前の列が社員番号より左にある。VLOOKUPは探す列より右しか返せないので、このままでは使えません。列を並べ替えずに済ませる方法が、INDEXとMATCHの組み合わせです。

■ 見本の表
A列に担当者、B列に社員番号、C列に部署が入っている名簿です。
・1行目:担当者/社員番号/部署(見出し)
・2行目:田中/A101/営業
・3行目:佐藤/A102/経理
・4行目:鈴木/A103/総務

E2 に探したい社員番号(例: A102)を入れ、F2 に担当者の名前を出します。

■ 式
=INDEX($A$2:$A$4, MATCH(E2, $B$2:$B$4, 0))

読み方は2段階です。
1. MATCH(E2, $B$2:$B$4, 0) … B2:B4 の中で、E2 と同じ値が「上から何番目」にあるかを返します。A102 なら 2。
2. INDEX($A$2:$A$4, 2) … A2:A4 の上から2番目、つまり「佐藤」を返します。

探す列(B)と返す列(A)を別々に指定するので、左右どちら向きでも引けます。見本で計算すると、A102 → 佐藤、A103 → 鈴木 になりました。

見つからないときは #N/A になります。空欄や案内の文字にしたいときは IFERROR で包みます。
=IFERROR(INDEX($A$2:$A$4, MATCH(E2, $B$2:$B$4, 0)), "見つかりません")
存在しない A999 を入れると「見つかりません」と出ました。

■ 注意1:2つの範囲は「同じ行から」始める
INDEX の範囲と MATCH の範囲は、始まりの行をそろえます。たとえば INDEX だけ $A$3:$A$5 と1行ずらすと、A102 を探して返ってくるのは「鈴木」でした。エラーにならず、1つ下の人の名前が静かに出るので気づきにくい間違いです。式を作ったら、1件だけ手で答え合わせをしておくと安心です。

■ 注意2:MATCH の最後の 0 を省略しない
最後の 0 は「完全に一致するものだけ」という指定です。省略すると「並べ替え済みの表で、近い値を探す」動きになります。見本で、表に無い A1025 を探したところ、0 ありは #N/A(正しく「無い」)、0 なしは「佐藤」が返りました。存在しない番号に名前が出てしまうので、名簿や商品コードを探すときは 0 を必ず付けます。

また、式を下の行へコピーするときは、範囲に $ を付けて固定しておきます($A$2:$A$4)。付けないとコピーのたびに範囲が下へずれていきます。

■ まとめ
・左の列を引きたいときは INDEX(返す列, MATCH(探す値, 探す列, 0))
・2つの範囲は同じ行から始める
・MATCH の 0 は省略しない、範囲は $ で固定する

※式は Excel 互換の計算ライブラリ(Python の formulas)で見本の表を計算して確かめました。Google スプレッドシートの画面そのものでは試していません。

「こういう表から、この値を出したい」という式づくりは、出品中の「スプレッドシート関数・GASを1つお作りします」でもお受けしています。購入前のご相談だけでも大丈夫です。

この記事は生成AI(Claude)を使って書き、式は上の方法で計算して確かめています。
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す