第1章:VLOOKUPだけじゃない!柔軟な検索のカギは「INDEX」と「MATCH」
こんにちは。あなたはExcelでデータを検索する時、ついつい VLOOKUP関数 ばかり使っていませんか?学校や職場で最初に覚える関数の一つなので、多くの人が「検索=VLOOKUP」と思い込んでいるかもしれません。でも実は、それだけでは少しもったいない!
Excelによるデータ処理で「自由度の高い検索」や「より柔軟な分析」をしたいなら、ぜひ知っておきたいのが INDEX関数とMATCH関数の組み合わせ です。この2つをうまく使えば、VLOOKUPではできなかったような操作も簡単に実現できます。
VLOOKUPの限界を知ろう
まずは、なぜVLOOKUPだけではダメなのか?代表的な「VLOOKUPの弱点」を3つ挙げてみましょう。
- 検索列は常に一番左でなければならない
- 列の追加・削除に弱い(列番号がズレると結果もズレる)
- 複数条件の検索が難しい
例えば、社員番号を元に社員名や部署を取得するような場面では、列の順序が変わることもありますよね。VLOOKUPは検索対象が左端にないと動作しないため、列を並び替えると関数を修正しなければならない…という面倒が発生します。
INDEX関数×MATCH関数で自由な検索が可能に
ここで登場するのが、INDEX関数とMATCH関数のコンビ。これらを組み合わせることで、以下のような柔軟な検索が可能になります。
- 検索列がどこにあってもOK(左横でも右横でも)
- 列を追加・削除しても数式が壊れにくい
- 条件を組み合わせた検索も対応可能
実際に使ってみると「なんでもっと早く知っておかなかったんだ!」となるはずです。特に、実務で複数の表を扱うことが多い20代ビジネスマンのみなさんには、大きな武器になるはずですよ。
次章では、まずこのコンビの片方「INDEX関数」について詳しく見ていきます。データの「どこを」取り出すかを指定する役割を担う重要な関数なので、基本と応用をしっかり押さえていきましょう。
第2章:「INDEX関数」でデータを取り出す仕組みを理解しよう
INDEX関数は、Excelで特定のセルの値を「位置」で指定して取得する関数です。前章で紹介したように、VLOOKUPでは指定できなかったような柔軟な場所のデータ取り出しも可能になるのが、このINDEXの力。
まずは基本的な使い方から見ていきましょう。
INDEX関数の基本構文を理解しよう
INDEX関数には主に2つの構文があり、使う状況に応じて使い分けます。以下は最も一般的な形式です。
INDEX(範囲, 行番号, [列番号])
それぞれのパラメータの意味を解説すると…
- 範囲:データが含まれているセルの範囲(例:A2:C10)
- 行番号:範囲内の上から何行目か
- 列番号(省略可能):範囲内の左から何列目か
つまり、INDEX(A2:C10, 3, 2)であれば、A2:C10範囲内の「3行目・2列目」のセル、つまりB4の値を取り出すという意味になります。
実務で活きる!INDEX関数の使いどころ
「行・列を指定して値を取り出す」と言われても、ピンとこない方もいるかもしれません。そこで、いくつかのよくあるExcel業務のシーンで、INDEX関数がどう活躍するかを紹介します。
シーン1:ある社員番号に対する給与額を取得
社員データが縦に並んでいる表で、社員番号ごとに給与や所属部署が管理されている場合、VLOOKUPでは検索列を先頭にしないとダメでしたが、INDEX関数を使えば検索列がどこでもOK。行番号さえ分かれば任意の列からデータを抜き出せます。
シーン2:出張精算表で特定の日の交通費を取得
例えば、1行目に日付、2行目以降に社員ごとの出張費用が入力されている表があるとします。「田中さんが5月10日に使った交通費」を知りたい!そんなときにも、INDEX関数は大活躍。日付に該当する列番号と、田中さんの行位置が分かれば、ピンポイントでデータを取得可能です。
「行や列の番号」の参照を柔軟に
ここでピンときた人もいるかもしれません。行や列の番号って、毎回手作業で数えるの?…それじゃ実務じゃ大変ですよね。実はその「番号」を自動で取得してくれるのが、次章で紹介する MATCH関数です。
この後は、MATCH関数を使って、検索対象の位置情報を動的に取得する方法を解説します。INDEX関数との組み合わせが完成すれば、より実践的な検索テクニックが身につくはずです!
第3章:「MATCH関数」で欲しいデータの位置を特定する
前章では、INDEX関数を使って「どの行・列にあるか分かっているデータを取り出す」方法を紹介しました。しかし実務では、「行番号や列番号が分からない」状況の方が多いですよね。そこで登場するのが、今回紹介するMATCH関数です。
MATCH関数は、特定の値がセル範囲の中で「何番目にあるか」を返してくれる関数です。つまり、「検索対象がどの位置にあるのか」を見つけて、INDEX関数に渡すための“座標”を作るイメージ。これにより、より動的かつ柔軟な検索処理が可能になります。
MATCH関数の構文と基本の使い方
まずは、MATCH関数の基本構文を覚えておきましょう。
MATCH(検索値, 検索範囲, [照合の種類])
- 検索値:探したい値(例:社員番号など)
- 検索範囲:上から順番に探していくデータ範囲
- 照合の種類:一致の方法を指定(後述します)
例えば、MATCH(1023, A2:A10, 0)とすると、「範囲A2:A10の中から『1023』に完全一致するセルを探し、それが何番目にあるか」を返してくれます。
この「何番目」が、そのままINDEX関数の「行番号」や「列番号」として使えるわけです。地味ですが、かなり強力な仕組みです。
完全一致・近似一致の違いを知って使い分ける
MATCH関数の3つ目の引数「照合の種類」では、どのような検索方法で一致を探すかを指定します。ここが重要なポイントです。
- 0:完全一致(ほとんどの場合、このパターンを使います)
- 1:検索範囲が昇順に並んでいることを前提に、検索値以下の最大値を返す
- -1:検索範囲が降順の場合に、検索値以上の最小値を返す
実務では「0」を使うことが圧倒的に多いです。昇順・降順などデータがきれいに並んでいることは少ないですし、間違った結果を避けるためにも、まずは「完全一致」が基本と覚えておきましょう。
実務で活用!MATCH関数が役立つシーン
MATCH関数の実力を正しく理解するために、具体的なシーンをいくつか紹介します。
シーン1:社員番号からその行の位置を取得する
例えば、社員番号が縦に並んだ表があり、そこから該当する人の情報を取り出したいとします。そのとき、MATCH関数で社員番号の「位置(行番号)」を取得すれば、INDEX関数と組み合わせて所属部署や役職など他の列から関連情報を引き出すことが簡単になります。
シーン2:日付から該当列番号を自動取得
出張費や売上など、日付が横軸で並んでいる集計表では、「●月●日のデータ」を取り出す処理が頻繁に発生します。しかし、日付が列にあり列番号が毎回変わる…という問題も起こりがちですよね。
そこでMATCH関数を使って、MATCH("5月10日", B1:Z1, 0)のようにすれば、指定した日付が何列目にあるかが分かります。これをINDEXと組み合わせれば、特定の日付のデータを自動的にピンポイントで取得できるのです。
POINT:MATCH関数は照合結果で0を返さない
少し小ネタですが、覚えておくと安心なのがMATCH関数の動き。「該当データが見つからない場合」には、「0」ではなく、#N/Aエラーが返されます。
つまり、「0って出たから該当がないのかな…」と誤解しないでくださいね。これを使えば、IFERROR関数などと一緒に、エラー処理を自動化することも可能です。
次章では、今回覚えたINDEX関数とMATCH関数を組み合わせて、「実際にどんな柔軟な検索ができるか」をテクニックとして紹介していきます。Excelの力を一気に引き出せるので、楽しみにしていてください!
第4章:INDEXとMATCHの組み合わせで実現する柔軟検索テクニック
ここまでで、「INDEX関数で値を取り出す方法」と、「MATCH関数でその位置を特定する方法」について学びました。つまり、「どこから」「何を」取得するかをExcel上で柔軟に指定できるようになったわけです。では、これらを組み合わせることで、実際にどのような検索が可能になるのか?この章では実務に直結する応用テクニックを紹介します。
なぜINDEX+MATCHは柔軟な検索に強いのか?
多くの人がVLOOKUPを使っていますが、VLOOKUPの最大の制約は「検索列は常に左端でなければならない」こと。つまり「左方向への検索」ができないのです。ですが、INDEX + MATCHの組み合わせならこの制約を簡単に突破できます。
例えば、次のような構文を見てみましょう。
=INDEX(B2:B10, MATCH("鈴木", C2:C10, 0))
この数式では、C2:C10から「鈴木」を探して、その位置(=行番号)をB2:B10の範囲に適用し、左にある「社員番号」などを取得しています。つまり、「検索対象が右側にあるケース」でも全く問題なく検索可能なんです。
応用テク①:複数条件での検索を可能にする
実務では単一の条件だけでなく、「部署が営業部で、かつ勤続年数が5年以上」のように、複数の条件に一致するデータを取り出す場面も多いですよね。そんなときは、MATCH関数の中で配列数式を使うことで対応可能です。
例えば以下のような構成の表があるとしましょう。
- A列: 氏名
- B列: 部署
- C列: 勤続年数
- D列: 給与
「部署が『営業』かつ勤続年数5年以上の人の給与」を取得するには、次のように配列数式として入力します(Ctrl + Shift + Enterで確定):
=INDEX(D2:D100, MATCH(1, (B2:B100="営業")*(C2:C100>=5), 0))
この式では、複数条件を掛け合わせて、両方の条件を満たしたデータの行番号を自動取得しています。通常のVLOOKUPでは実現が難しい条件付き検索も、これならスマートに対応できます。
応用テク②:実務で役立つデータ活用例
社員情報から役職を検索する
社員番号をもとに社員の役職を自動表示したいときにも、INDEX+MATCHが大活躍します。例えば社員番号がD2セルにあるとして、社員番号がA列、役職がC列にある社員リストが別シートのA2:C100にある場合、検索式は以下のようになります。
=INDEX(別シート!C2:C100, MATCH(D2, 別シート!A2:A100, 0))
このようにすれば、社員番号→役職というように、どこに列があっても順番に関係なく情報を自動取得できるようになります。
売上データから日別の実績を取得する
横に日付、縦に部門名が並ぶ表で、例えば「営業部の5月10日の売上」を取得したい場合も、INDEX+MATCHで対応できます。
=INDEX(B2:Z10, MATCH("営業部", A2:A10, 0), MATCH("5月10日", B1:Z1, 0))
このように、縦方向・横方向の両方でMATCHを使い、交差するセルの値をINDEXで抽出することが可能です。日別実績や部門別の詳細レポートなど、動的で変更に強い表の構築に威力を発揮します。
まとめ:検索の可能性を広げる「組み合わせの力」
INDEXとMATCHの組み合わせは、「列の順番」や「検索の方向」に縛られず、複数条件にも対応できるため、日々の業務効率化には欠かせない武器です。特に、データ構造が頻繁に変わるような案件や、大量の情報を扱う業務では、構造の柔軟性が大きな強みになります。
次章では、この強力な組み合わせでよくあるエラーや悩みどころに焦点を当て、より深い理解と安定した運用のためのテクニックを紹介していきます。
第5章:知っておくと差がつく!INDEX-MATCHの応用とトラブルシューティング
INDEX関数とMATCH関数を組み合わせることで、柔軟な検索処理を実現できることは前章までで理解いただけたと思います。しかし、実際の業務では「うまく動かない」「意図しない結果が出る」など、さまざまなトラブルにも遭遇するもの。ここでは、INDEX+MATCH式でよくあるエラーのパターンとその対処法、さらなる応用として範囲を動的に指定して柔軟性を高める方法を紹介します。
よくあるエラー①:MATCHで#N/Aが出てしまう
MATCH関数で最もよくあるトラブルが、「一致する値が見つからなかった」ときに返される#N/Aエラーです。これは、検索値とセル範囲にある値が”完全に”一致していない場合に発生します。以下のような原因が多いです。
- スペース(全角・半角)の違い
- 文字列と数値の混同(例:”123″ と 123)
- 照合の種類の設定ミス(完全一致にすべき場面で「1」を選んでしまう)
対処法としては、CLEANやTRIM関数を使って不要なスペースを除去したり、TEXT関数を使って書式を統一したりするのが効果的。また、IFERROR関数を組み合わせて、エラー時の表示内容を調整するのもおすすめです。
=IFERROR(INDEX(B2:B100, MATCH(D2, A2:A100, 0)), "該当なし")
これで、エラー時には「該当なし」と表示されるようになり、不要な混乱を防げます。
よくあるエラー②:INDEXが意図しない値を返す
MATCHではなくINDEXでエラーが出る場合は、「行番号や列番号が存在しないインデックスを指定している」ことが原因です。たとえば、MATCH関数が「0」や巨大な数字を返してしまっていた場合、INDEX関数がその位置を参照できずエラーになります。再確認すべきポイントは以下です。
- MATCHの検索範囲が正しく設定されているか?
- 検索値に余計な記号や空白がないか?
- 範囲の相対的な位置関係があっているか?(行・列のズレ)
また、MATCH関数の結果を確実に補足するためには、事前にMATCHの結果を確認するのが有効です。試しに=MATCH(...)だけをセルに打ち込んで、返される行・列番号が想定内かをチェックしてみましょう。
応用テク:範囲を「動的」にすることで柔軟性アップ
INDEX+MATCHの式で柔軟性をさらに高めるためには、検索範囲自体を動的に設定する工夫が有効です。そのためには、次のような関数との併用がポイントになります。
- OFFSET関数:基準セルからのずれを指定して範囲を動的に取得
- COUNTA関数:データの最終行などを自動取得することで可変範囲を実現
例えば、社員番号が入力されている範囲が毎回増減するようなケースでは、以下のような定義を用いることで検索範囲を自動化できます。
=INDEX(A2:A1000, MATCH(D2, OFFSET(A2,0,0,COUNTA(A2:A1000)), 0))
このように、可変の範囲定義をうまく使えば、「範囲が更新されたときにも数式がそのまま使える」というメリットが得られます。特にデータを日々更新する業務では、修正の手間が省けて作業効率が格段に上がります。
まとめ:トラブルにも強い柔軟な検索処理を身につけよう
INDEXとMATCHの組み合わせは、VLOOKUPではできなかった検索を可能にするだけでなく、エラー対処や動的範囲の定義などを駆使することで、さらに「強力な武器」へと進化します。
20代のビジネスパーソンにとって、日々のExcel業務で「なぜか動かない」「やりたいことができない」を卒業するきっかけになります。ちょっとした知識と工夫で、見た目や工数以上の効果を得られるのがExcelの面白いところです。
ぜひ今日から、「検索=VLOOKUP一択」という常識を捨て、INDEX×MATCHという自在な検索術を職場で取り入れてみてください。次に困ったときに「任せて!」と言える自分がきっと待っていますよ。


コメント