
Excelのすべての検索タスクにVLOOKUPを使ってきたとしても、それは珍しいことではありません — VLOOKUPはスプレッドシートの世界で最もよく知られた関数のひとつです。しかし、Excelの上級ユーザーのほぼ全員が、最終的にはINDEX MATCHという2つの関数の組み合わせに移行します。この組み合わせはより柔軟で信頼性が高く、VLOOKUPでは解決できない問題にも対応できます。この記事では、実際の構文・実例・すぐに試せる実践的な手順を交えながら、その理由を詳しく説明します。
組み合わせる前に、それぞれの関数を個別に理解しておくことが大切です。
INDEXは、範囲または配列内の指定した位置にあるセルの値を返します。
=INDEX(array, row_num, [col_num])
たとえば、=INDEX(A1:A10, 3)は、A1からA10の範囲のA列3行目にある値を返します。
MATCHは範囲内で値を検索し、値そのものではなく、その値がある位置番号を返します。
=MATCH(lookup_value, lookup_array, [match_type])
0(最も一般的)、以下検索には1、以上検索には-1を使用たとえば、A1:A5に{Apple, Banana, Cherry, Date, Fig}が入力されている場合、=MATCH("Cherry", A1:A5, 0)はCherryが3番目の項目であるため3を返します。
INDEXの中にMATCHをネストしたときに、真の力が発揮されます。行番号をハードコードする代わりに、MATCHに動的に計算させます:
=INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
これはExcelに「検索範囲の中で検索値の位置を見つけ、返り値範囲から対応する値を返せ」と指示しています。2つの範囲は同じサイズで、同じ方向に揃っている必要があります。
次のような構造の商品在庫テーブルを想像してください:
| 商品ID | 商品名 | カテゴリ | 単価 | 在庫数 |
|---|---|---|---|---|
| P-101 | Wireless Mouse | Electronics | $29.99 | 142 |
| P-102 | USB-C Hub | Electronics | $49.99 | 87 |
| P-103 | Desk Lamp | Office | $34.99 | 55 |
| P-104 | Notebook A5 | Stationery | $8.99 | 310 |
| P-105 | Ergonomic Chair | Furniture | $299.00 | 12 |
データはA2:E6にあり、1行目にヘッダーが入っています。セルH2に入力した商品IDの単価を検索したいとします。
INDEX MATCHを使った場合、H3の数式は次のようになります:
=INDEX($D$2:$D$6, MATCH(H2, $A$2:$A$6, 0))
ステップごとに説明します:
ドル記号を使った絶対参照の使用に注目してください。範囲を固定することで、数式を他のセルにコピーしても正しく機能します。
VLOOKUPの完全ガイドでVLOOKUPをすでに知っている方はその強みを理解しているでしょう。しかし、INDEX MATCHがすっきりと解決する既知の制限もあります。
VLOOKUPはテーブルの最左列のみを検索し、右側の値を返します。検索列が返り値列の右にある場合、VLOOKUPは機能しません。INDEX MATCHにはそのような制限がなく、返り値範囲と検索範囲は完全に独立しているため、検索列の左側にある列も含め、どの列からでも値を返せます。
VLOOKUPはハードコードされた列インデックス番号(例:3列目)を使用します。列を挿入または削除するとその番号がずれ、誤ったデータが静かに返されてしまいます。INDEX MATCHは実際の範囲を参照するため、列の挿入によって数式が壊れることはありません。
VLOOKUPは計算のたびにテーブル配列全体をスキャンします。INDEX MATCHは特定の検索列と特定の返り値列だけを評価するため、数万行のブックでは明らかに高速です。
2つのMATCH関数をネストして — 1つを行、もう1つを列に使用 — VLOOKUPがヘルパー数式なしには実現できない2次元検索を作成できます:
=INDEX(B2:E6, MATCH(H2, A2:A6, 0), MATCH(H3, B1:E1, 0))
ここで、MATCH(H2, A2:A6, 0)が正しい行を、MATCH(H3, B1:E1, 0)が正しい列を見つけます。どちらの入力セルを変更しても数式は即座に適応します。これは複数のディメンションにわたってメトリクスを引き出す必要があるセールスダッシュボードで特に役立ちます。
一致する値が見つからない場合、MATCHは#N/Aエラーを返します。INDEX MATCH全体をIFERRORで囲んで、わかりやすいメッセージを表示しましょう:
=IFERROR(INDEX($D$2:$D$6, MATCH(H2, $A$2:$A$6, 0)), "該当商品なし")
これは、エンドユーザーが検索値を入力する共有ブックやテンプレートで特に重要です — 適切なエラー処理により混乱やストレスを防げます。入力セルにデータの入力規則を組み合わせて有効なリストへの入力を制限すれば、堅牢でユーザーフレンドリーな検索ツールができあがります。
最もよく求められる検索シナリオのひとつが、複数の条件による一致です。たとえば、カテゴリが「Electronics」かつ在庫数が100未満の単価を検索したいとします。これはINDEX MATCHの配列バージョンで実現できます。
=INDEX($D$2:$D$6, MATCH(1, ($C$2:$C$6="Electronics")*($E$2:$E$6<100), 0))
旧バージョンのExcel(365以前)では、Ctrl + Shift + Enterを押して配列数式として入力してください — Excelが波括弧{}で囲みます。Excel 365およびExcel 2021では、動的配列が自動的に処理されるため、通常のEnterキーで十分です。
仕組み:各条件がTRUE/FALSE(1と0)の配列を生成します。それらを掛け合わせることで、両方の条件がTRUEの場合にのみ1となる新しい配列が作成されます。MATCHが最初の1を見つけ、INDEXが対応する価格を返します。
Excel 365ではXLOOKUPが導入され、単一の関数で多くの検索タスクが簡略化されました。XLOOKUPは単純な検索に優れており、左方向の検索もネイティブに処理できます。ただし、INDEX MATCHがいまだに重要である理由がいくつかあります:
INDEX MATCHの理解は、Excelで動的ダッシュボードを作成するなどのより高度な作業にも基礎となります。検索数式がグラフや集計テーブルに値を提供し、自動的に更新されます。
=INDEX(UnitPrices, MATCH(H2, ProductIDs, 0))のほうがはるかに確認しやすくなります。複数条件、標準的でないテーブルレイアウト、クロスシート参照など、複雑な検索要件に直面した場合は、必要な内容を平易な言葉でGPTExcelに説明するだけで、正確な絶対参照とエラー処理を含むINDEX MATCH数式を数秒で入手できます。試行錯誤なしに、すぐに使える数式にたどり着けます。
AIを活用したより広範な数式作成テクニックについては、ChatGPTを使ってExcelの数式を書くの記事でワークフローを詳しく解説しています。
プロフェッショナルなユースケースの大多数においては、はいと言えます。INDEX MATCHは左方向の検索に対応し、列の挿入で壊れることなく、2次元検索や複数条件の一致もサポートします。VLOOKUPは基本的な右方向の検索では書きやすいですが、データが複雑になるにつれてその制限が問題になります。
Excel 2019以前で複数条件の配列バージョンの数式を使う場合のみ必要です。標準的な単一条件のINDEX MATCH数式は、すべてのExcelバージョンで通常のEnterキーで入力できます。動的配列に対応したExcel 365およびExcel 2021では、複数条件バージョンでも配列ショートカットは不要です。
MATCHは常に最初に見つかった最初の一致の位置を返します。検索列に重複があり、それぞれの出現に対してデータを取得する必要がある場合は、連結キーを使ったヘルパー列の使用を検討するか、Power Queryガイドで解説しているPower Queryを使って検索を適用する前にデータを整形することをお勧めします。
はい。範囲参照にシート名を含めるだけです。例:=INDEX(Sheet2!$D$2:$D$100, MATCH(H2, Sheet2!$A$2:$A$100, 0))。範囲が同じシートにあるか、同じブック内の別のシートにあるかにかかわらず、数式はまったく同じように動作します。
ExcelのTEXT関数が書式コードを使って数値、日付、時刻を書式付きテキスト文字列に変換する方法を、実際の例と実践的なユースケースを交えて解説します。
ExcelのIF関数の仕組み、複数のIFをネストする方法、そしてより読みやすいロジックを実現するIFSやSWITCHなどの最新の代替関数について解説します。
ExcelのSUMIFとSUMIFSをマスターして、1つまたは複数の条件に基づいてデータを合計する方法を、実際の構文・実践的な例・ステップバイステップの解説で学びましょう。