INDEXとMATCHで柔軟な検索を実現する方法

INDEXとMATCHで柔軟な検索を実現する方法 IT

第1章:そもそもINDEXとMATCHってなに?基本をざっくり理解しよう

Excelを使いこなすには関数の理解が不可欠ですが、その中でも「INDEX」と「MATCH」は知っておくと非常に便利なスキルです。
とくに、日常の業務で「表の中から特定の情報だけを抜き出したい」「検索の順番や方向性に左右されたくない」といった場面で大活躍します。
ここでは、初心者でもわかりやすいように、INDEXとMATCH関数の基礎をやさしく、ざっくりと解説していきます。

INDEX関数ってどんな役割?

INDEX関数は、指定した範囲(配列)から、特定の位置にある値を返す関数です。
つまり、「この表の3行目・2列目のデータを教えて」といったときに、正確にそのセルのデータを取り出してくれる関数だとイメージしてください。

具体的な書式は以下のようになります。

=INDEX(範囲, 行番号, [列番号])

例えば、「A1:C5」の範囲から3行目・2列目にある値を取得したい場合は、こう書きます:

=INDEX(A1:C5, 3, 2)

これで、A1からC5の中の「3行目・2列目」のセル値が返されます。

MATCH関数ってなにをしてくれるの?

一方、MATCH関数は指定した値が範囲内のどこにあるか(位置)を返す関数です。
言い換えれば、「このリストの中で、◯◯は何番目にある?」という質問に答えてくれるイメージです。

書式は次のようになります:

=MATCH(検索値, 検索範囲, [一致の種類])

たとえば、セル「B1:B5」に社員の名前が並んでいて、「佐藤」がその中で上から何番目かを調べたい場合は次のように記述します。

=MATCH("佐藤", B1:B5, 0)

ここで「0」は「完全一致」を意味します。この式を実行すると、「佐藤」がリスト内で何番目にあるか(例えば3番目なら「3」)が返されます。

INDEXとMATCHをセットで使う理由

INDEXとMATCHは、単体でも使えますが、セットで使うことで非常に強力な検索機能を実現できます。
MATCHで検索したい値の「位置」を調べて、それをINDEXで「行番号や列番号」として使えば、動的な検索結果を得られるというわけです。

このコンビネーションにより、VLOOKUPのような「列の左端から右方向のみ検索可能」といった制限を超え、「表のどの方向にも対応できる検索」が可能になります。

次章では、よく使われているVLOOKUP関数と比較しながら、INDEX+MATCHの強みをさらに詳しく見ていきましょう。

第2章:VLOOKUPとの違いは?INDEX+MATCHの強みを知る

Excelでデータ検索といえば、まず名前が挙がるのがVLOOKUP関数です。おそらく、この記事を読んでいるあなたも業務で一度は使ったことがあるのではないでしょうか?
たしかにVLOOKUPはシンプルで直感的、初心者にも扱いやすい関数です。しかし、実務で使い込むと「あれ、ちょっと不便…?」と感じる場面も少なくありません。

そこで登場するのが、前章で紹介したINDEX+MATCHのコンビネーション。この章では、VLOOKUPと比較しながら、なぜINDEX+MATCHが“柔軟な検索方法”として優れているのかを深掘りします。

1. 左方向への検索が可能になる

VLOOKUPの最大の制約の一つが、「検索は常に左から右のみ」というルールです。つまり、検索値(キー)が表の左端にないと機能しません。

たとえば、以下のようなデータがあったとします。


| B列:商品コード | C列:商品名 |
|-----------------|-----------------|
| A001            | ノートパソコン    |
| A002            | モニター          |

このとき、「商品名をもとに商品コードを取得したい」と思っても、VLOOKUPでは難しいのです。なぜなら検索キー(商品名)が右側にあるからです。

しかし、INDEX+MATCHなら心配無用。どんな順序で列が配置されていても、自由に検索対象を指定できます。この柔軟性は、実務では非常に重宝します。

2. 列の追加や並べ替えに強い

VLOOKUPでは、返したい列を「列番号」で指定する必要があります。たとえば、以下のように:

=VLOOKUP("A001", A2:C5, 3, FALSE)

ところが、表の構成が変更され、列の順番が変わるとこの式は正しく機能しなくなります。結果的に、関数の見直しや修正が必要になります。

一方、INDEX+MATCHでは「どの列に何があるか」をMATCHで動的に検出するため、列の追加や並べ替えにも対応可能。表構造が変わっても、関数が壊れにくいのです。

3. 処理速度や安定性にも差がある

データ量が多くなると、VLOOKUPは内部的にかなりの負荷をかけることがあります。とくに列数が増えると、パフォーマンスに影響が出やすくなります。

一方、INDEX+MATCHは検索と取得を分担している構造のため、高速かつ安定した動作が見込めます。大量のデータを扱う部署や、複数人で同時編集するファイルでは、この安定性が大きな武器になります。

4. 見やすくメンテナンスしやすい数式

INDEX+MATCHというと複雑そうに見えますが、分解して考えると意外とシンプルです。関数同士が論理的に組み合わされているので、「何が起きているのか」が把握しやすく、将来的なメンテナンスがしやすいという特徴もあります。

特に、チームでExcelファイルを共有している場合、「誰が見てもわかる式」がとても重要。INDEX+MATCHはその点でも安心です。

まとめ:柔軟性こそ、実務での強み

VLOOKUPは「カンタン」で「速く」答えが得られる点では優秀ですが、柔軟性や耐久性という点ではINDEX+MATCHのほうが一枚上手です。
とくに、表の構成が頻繁に変わるような職場や、多様な検索条件に対応しなければならない実務の現場では、その差が歴然と表れます。

次章では、実際のビジネスシーンで使えるINDEX+MATCHの活用例を紹介していきます。あなたの業務にもすぐに応用できる内容なので、ぜひチェックしてみてください。

第3章:実務で使える!INDEX+MATCHのシンプルな活用例

ここからは、実際のビジネスシーンに即した形で、INDEX+MATCHをどう活用するかを具体例を使って紹介します。机上の理解だけでなく、実務への応用こそがExcelスキルの真価。営業成績の管理や商品データの検索など、ありがちなシーンをテーマに、シンプルかつ強力な使い方をマスターしましょう。

営業成績シート例:社員名から売上金額を検索する

まずは典型的な営業管理のシーンからです。例えば以下のような表があるとします:


| A列:社員ID | B列:社員名 | C列:売上金額 |
|-------------|-------------|---------------|
| 101         | 山田        | 850000        |
| 102         | 佐藤        | 760000        |
| 103         | 鈴木        | 920000        |

このデータに対して、「佐藤さんの売上金額を知りたい」というケースを考えてみましょう。VLOOKUPでも可能ですが、ここはINDEX+MATCHでやってみます。

まず、社員名から行位置を特定するMATCH関数を使います:

=MATCH("佐藤", B2:B4, 0)

この式は、「佐藤」がB列の中で何番目か(この場合は2番目)を返します。

次に、INDEX関数でその位置に該当する売上金額(C列)を取得します:

=INDEX(C2:C4, MATCH("佐藤", B2:B4, 0))

この一文で「佐藤」さんに対応する売上金額(760,000)が取得できます。
まさに「名前で検索して、別列のデータを引っ張る」典型的なパターンです。

商品コード検索:商品名からコードを取得

次は、商品名から商品コードを取り出すパターン。2章で紹介した「左方向への検索」にも該当する例ですが、もう少し実務的に再現してみましょう。


| A列:商品コード | B列:商品名     |
|-----------------|----------------|
| P001            | マウス         |
| P002            | キーボード     |
| P003            | ディスプレイ   |

この表で、「キーボード」に対応する商品コードを取得したいとします。

=INDEX(A2:A4, MATCH("キーボード", B2:B4, 0))

これで、商品名「キーボード」に該当する商品コード「P002」が取得されます。
VLOOKUPでは左側への検索ができないため、このようなシーンではINDEX+MATCHの柔軟さがとても役立ちます。

セル参照でもっと便利に

さらに便利なのが、検索値をセル参照で指定する方法です。たとえば、セルD1に「鈴木」や「ディスプレイ」など検索したいワードを入力し、それに応じた情報を表示するようにできます。

例えば社員名で売上を検索するなら、以下のように記述できます:

=INDEX(C2:C4, MATCH(D1, B2:B4, 0))

この形にすれば、D1の内容を変えるだけで、結果が自動的に更新されるので、動的検索フォームとしても利用可能になります。

まとめ:シンプルこそ実務で強い

INDEX+MATCHは「応用が効く」と言われますが、こうしてシンプルなパターンでも十分に活用可能です。
とくに、「値で検索して、別の列の情報を取得する」という動作はあらゆる業種・職種で使われています。

次章では、この基本形からさらに一歩進んで、複数条件や部分一致にも対応できる応用術を紹介します。より複雑な検索にも挑戦して、Excelスキルをさらにアップさせていきましょう。

第4章:ここまでできる!複数条件・部分一致検索にも挑戦

前章までは、単一の条件による検索を中心に紹介してきましたが、実務の現場では「条件が複数ある」「あいまいな情報から検索したい」といったシーンも少なくありません。
そんなときに力を発揮するのが、IF関数やSEARCH関数、&演算子(連結)などとINDEX+MATCHを組み合わせたテクニックです。この章では、そうした実用的な応用方法を分かりやすく解説していきます。

1. 複数条件での検索をするには?

まず「部署名が営業部で、かつ社員名が佐藤」のような複数条件を満たすデータを検索したい場合の方法を見ていきましょう。Excelには「複数条件対応のMATCH関数」は存在しないため、少し工夫が必要です。

以下のような表があるとします:


| A列:部署   | B列:社員名 | C列:売上金額 |
|-------------|-------------|---------------|
| 営業部      | 山田        | 850000        |
| 営業部      | 佐藤        | 760000        |
| 技術部      | 鈴木        | 920000        |

「営業部の佐藤さんの売上」を検索したい場合、まずはA列とB列を連結して「検索対象列」を作りましょう。
例えばD列に以下の式で連結列を作成します:

=A2&B2

そうすると、D2セルには「営業部山田」、D3セルには「営業部佐藤」という文字列が生成されます。

次に、MATCH関数でこの連結列に対して条件を設定し、該当データの行番号を取得します:

=MATCH("営業部佐藤", D2:D4, 0)

この式で「営業部佐藤」が何行目かを見つけたら、あとはINDEXで売上金額を取得します:

=INDEX(C2:C4, MATCH("営業部佐藤", D2:D4, 0))

このように、複数の検索条件は列の値を結合することで対応できます。組織内の情報を細かく絞り込むときに非常に便利な方法です。

2. SEARCH関数との組み合わせで部分一致検索

次に、「完全には一致しないけど、含まれているキーワードで検索したい」場合、つまり部分一致検索を実現する方法です。

例えば、以下のような商品リストがあったとします:


| A列:商品コード | B列:商品名          |
|-----------------|----------------------|
| P1001           | ワイヤレスマウス     |
| P1002           | 有線マウス           |
| P1003           | ワイヤレスキーボード |

この中から「ワイヤレス」を含む商品名のコードを探したいときは、ARRAY数式(配列数式)SEARCH関数を組み合わせて実現する必要があります。

検索部分はSELECTの代わりに次のような構文になります:


=INDEX(A2:A4, MATCH(TRUE, ISNUMBER(SEARCH("ワイヤレス", B2:B4)), 0))

この式は、B2~B4の中から「ワイヤレス」という文字列を含むセルを探し、その行のA列の商品コードを返します。

補足:この数式は、Ctrl+Shift+Enter(Excel 2019以前)またはスピル機能対応のExcelが必要です。

3. ワークフローで活きる:セル参照による柔軟化

これらの応用パターンも、検索キーをセル参照にすることで、動的なデータ検索フォームとして使えるようになります。

たとえば複数条件の検索を、以下のようにユーザーが入力できる形にすることも可能です:

=INDEX(C2:C4, MATCH(E1&E2, D2:D4, 0))

ここで、E1セルに「営業部」、E2セルに「佐藤」と入力すれば、自動的に「営業部佐藤」の売上額が抽出されます。検索条件が都度変わる業務に非常にフィットします。

まとめ:実務を更に一歩プロフェッショナルに

複数条件検索や部分一致検索のような応用技は、実務のニーズにピタリと応える強力な武器になります。
一見複雑に見えるかもしれませんが、仕組みを理解してしまえば応用範囲は無限大。特に営業、総務、在庫管理などのシーンではすぐに役立つはずです。

次章では、こうしたINDEX+MATCHの技をもっと快適に使いこなすための「小ワザ集」を紹介します。面倒な式の修正を減らしたり、見やすさや使いやすさを格段にアップさせるコツが満載ですので、お楽しみに!

第5章:今日から使える!検索効率がアップする小ワザ集

ここまでINDEX+MATCHの基本から応用までを学んできましたが、実務で本当に便利なのは「ちょっとした工夫」で使いやすさが大きく変わることです。
この章では、関数をより効率的に、安全に、そして見やすく管理するための小ワザを紹介します。明日からすぐに業務に取り入れられるものばかりなので、ぜひ押さえておきましょう。

1. 絶対参照($マーク)でセル参照を固定しよう

INDEX+MATCHでは、検索範囲や参照範囲が複数のセルに渡っていることが多いため、コピー&ペーストでセルを動かすと参照がずれることがあります。これを防ぐには、$を使った絶対参照が有効です。

=INDEX($C$2:$C$100, MATCH(E1, $B$2:$B$100, 0))

こう記述することで、数式をコピーしても参照する範囲(C2:C100など)が固定されます。
とくにテンプレート化したファイルを他人にも使わせたい場合、このテクニックはミス防止に効果絶大です。

2. 名前定義で式をもっと読みやすく

Excelの「名前の定義(Name Manager)」機能を使えば、セルの範囲にわかりやすい名前を付けることができます。
たとえば、B2:B100の範囲に「社員名リスト」、C2:C100に「売上金額リスト」という名前を付けておけば、以下のように式が一気にスマートになります。

=INDEX(売上金額リスト, MATCH(E1, 社員名リスト, 0))

これにより、数式を見た人が「何を検索しているのか」を瞬時に理解できるようになります。
チームでファイルを共有する場合にも、コミュニケーションのコストが大きく下がります。

3. IFERRORで見た目もスマートに

MATCH関数などを使用していると、検索値が見つからないときにエラー(#N/A)が表示されてしまいます。
これは作業者の混乱を招くので、IFERRORを使ってエラー時の表示をカスタマイズしましょう。

=IFERROR(INDEX(C2:C100, MATCH(E1, B2:B100, 0)), "該当なし")

このように記述すれば、検索結果が見つからない場合は「該当なし」と表示されるようになります。
見た目もよく、ユーザーフレンドリーなシートに仕上がります。

4. COLUMN関数との組み合わせで列番号を自動取得

MATCH関数の代わりに、データの列番号を取得する際にCOLUMN関数を使えば、より動的な検索設定も可能になります。
たとえば、検索範囲が行方向で変化しにくい文脈では、以下のように使えます。

=INDEX(A2:D10, MATCH("佐藤", B2:B10, 0), COLUMN(C2))

このようにしておけば、列の移動に対しても柔軟に対応でき、式の再調整が不要になります。

5. テーブル機能と併用して管理しやすく

Excelのテーブル機能(Ctrl + T)を活用すると、データの追加・削除にも強くなります。
テーブル化したデータは「構造化参照」に対応しており、社員名[売上金額]のようなわかりやすい記述が可能になります。

INDEX+MATCHもテーブルと一緒に使うことで、式の維持管理がぐっとラクになります。
今後データ量が増えても、関数の修正が不要になるケースが多くなるため、長期的な運用に非常にオススメです。

まとめ:積み重ねがExcelスキルの明暗を分ける

どれも一つひとつは地味に見えますが、こうした小ワザの積み重ねが「デキる人」と「表計算に手を焼く人」の差を生みます。
特に、絶対参照や名前定義、IFERRORのような工夫は、作業効率とファイルの信頼性を大きく底上げしてくれる要素です。

INDEX+MATCHの応用力をさらに強化するためにも、今回紹介したテクニックをどんどん実務に取り入れていきましょう。ほんの少しの工夫が、あなたの仕事を一層スマートに変えてくれるはずです。

コメント

NewsTowerをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む