
VLOOKUP関数、便利だけどなんか使いづらいな…

表の形によっては使えない時がある!

すもりーマンのように感じたことはありませんか?
もしかしたら、Excelの理解がどんどん進んできてあんなことやこんなことがしたいと思えているのではないでしょうか?
Excelでデータを検索したり抽出したりする際に、多くの人がまず思い浮かべるのがVLOOKUP関数ですよね。
でも、実はVLOOKUP関数にはいくつかの弱点があるんです。
そして、その弱点を克服し、もっと自由に、もっと効率的にデータを取り出せるようになるのが、INDEX関数とMATCH関数の組み合わせです!
この記事では、

について、解説していきます!
VLOOKUP関数で困っていませんか?その悩み、INDEX+MATCHで解決できるかも!

普段Excelで作業している中で、VLOOKUP関数を使っていて次のような悩みに直面したことはありませんか?

もしひとつでも当てはまったら、あなたはVLOOKUP関数の「壁」にぶつかっている状態かもしれません。
実はVLOOKUP関数には、いくつか得意ではないことがあるんです。
VLOOKUP関数の主な弱点
もちろん、VLOOKUP関数が便利で使いやすいことに変わりはありません。
しかし、これらの弱点があるために、もっと柔軟なデータ検索が必要な場面で立ち往生してしまうことがあるんです。
データが大量の場合、VLOOKUP関数以外の使用を検討する必要があります。

「VLOOKUP関数についてもっと詳しく知りたい!」という方は、こちらの記事も参考にしてみてください!
なぜExcel上級者はINDEX関数とMATCH関数を組み合わせるの?
VLOOKUP関数の弱点を補い、さらに強力なデータ検索を可能にするのが、INDEX関数とMATCH関数の組み合わせです。
Excel上級者の多くがこの組み合わせを使うのは、その圧倒的な柔軟性と処理速度の速さに理由があります。

え、関数を2つも使うなんて難しそう…

すもリーマンのように感じるかもしれませんが、大丈夫!
それぞれの関数の役割を理解すれば、意外とシンプルなんです。
INDEX関数の役割:指定した場所の「値」を取り出す
INDEX関数は、
「指定した範囲の中から、〇行目と〇列目にある値は何ですか?」と尋ねると、その答えを返してくれる関数です。
イメージとしては、宝の地図で「A地点の東へ3歩、北へ2歩の場所にある宝は何?」と聞くようなものです。
構文: =INDEX(参照範囲, 行番号, [列番号])
参照範囲
:値を取り出したいセルの範囲を指定します。行番号
:参照範囲内で、上から何番目の行にあるデータを取り出したいかを指定します。列番号
:参照範囲内で、左から何番目の列にあるデータを取り出したいかを指定します。(省略可能です。1列の範囲から取り出す場合は不要です。)
例: =INDEX(A1:C10, 3, 2) → A1からC10の範囲で、3行目2列目(つまりB3セル)の値を取り出します。
MATCH関数の役割:指定した「値」がどこにあるか見つける
MATCH関数は、
「この値は、指定した範囲の中で何番目にありますか?」と尋ねると、その「位置(何番目か)」を返してくれる関数です。
イメージとしては、本棚で「〇〇というタイトルの本は、左から何番目にありますか?」と聞くようなものです。
構文: =MATCH(検索値, 検索範囲, [照合の種類])
検索値
:検索したい値を指定します。検索範囲
:検索値を探す範囲を指定します。(必ず1行または1列の範囲を指定します)照合の種類
:検索方法を指定します。0
:完全一致(最もよく使われます。検索値と完全に一致するものを探します)1
:検索値以下で最大の値(昇順で並べ替えられている場合に使う)-1
:検索値以上で最小の値(降順で並べ替えられている場合に使う)
例: =MATCH(“りんご”, A1:A10, 0) → A1からA10の範囲で「りんご」が上から何番目にあるかを返します。例えば、A5に「りんご」があれば「5」を返します。
INDEXとMATCHの組み合わせが最強な理由
これらの関数を組み合わせると、「〇〇という値が、この範囲の△番目の行にあるから、その行の□番目の列にある値を取り出して!」というように、動的に行番号や列番号を指定できるようになるんです。
=INDEX(取得したい範囲, MATCH(検索値, 検索値がある列の範囲, 0))
この組み合わせによって、VLOOKUP関数の弱点を見事にカバーできるわけです。
具体例で見てみよう!INDEX+MATCH関数の使い方

それでは、具体的なデータを使って、INDEX関数とMATCH関数の組み合わせがどれほど便利か見ていきましょう。
以下の商品リストのデータがあるとします。
【商品リスト】
商品ID | 商品名 | カテゴリ | 価格 |
A001 | ノートパソコン | 家電 | 80000 |
A002 | スマートフォン | 家電 | 60000 |
A003 | デジタルカメラ | 家電 | 50000 |
B001 | Tシャツ | 衣料品 | 3000 |
B002 | ジーンズ | 衣料品 | 8000 |
C001 | コーヒー豆 | 食品 | 1500 |
C002 | 紅茶 | 食品 | 1200 |

例1:商品IDから「価格」を検索する

ここでは、「商品ID」から「価格」を検索してみましょう。
VLOOKUP関数でもできますが、今回はINDEX+MATCHを使います。
目的:商品ID「A002」の価格を知りたい
- INDEX関数の取得したい範囲:価格が入力されている列(例:D列)を指定します。
- MATCH関数の検索値:「A002」
- MATCH関数の検索範囲:商品IDが入力されている列(例:A列)を指定します。
数式: =INDEX(D:D, MATCH(“A002”, A:A, 0))
この数式は、次のように解釈されます。
MATCH("A002", A:A, 0)
:A列の中から「A002」が何行目にあるかを探します。この場合、「3」が返されます(「A002」はA列の3行目にあるため)。INDEX(D:D, 3)
:D列の3行目にある値(「60000」)を取り出します。
結果として、「60000」が返されます。

例2:商品名から「商品ID」を検索する(VLOOKUPでは難しいパターン!)

今度は、「商品名」から「商品ID」を検索してみましょう。これはVLOOKUP関数では難しいパターンですね。
なぜなら、商品ID(A列)が商品名(B列)の左側にあるからです。
目的:商品名「ジーンズ」の商品IDを知りたい
- INDEX関数の取得したい範囲:商品IDが入力されている列(例:A列)を指定します。
- MATCH関数の検索値:F2
- MATCH関数の検索範囲:商品名が入力されている列(例:B列)を指定します。
数式: =INDEX(A:A, MATCH(F2, B:B, 0))
この数式は、次のように解釈されます。
MATCH(F2, B:B, 0)
:B列の中からF2セル(“ジーンズ”)が何行目にあるかを探します。この場合、「6」が返されます(「ジーンズ」はB列の6行目にあるため)。INDEX(A:A, 6)
:A列の6行目にある値(「B002」)を取り出します。
結果として、「B002」が返されます。

例3:行と列の両方を動的に指定してデータを抽出する

INDEX関数は列番号も指定できるので、MATCH関数をもう一つ使って、行と列の両方を動的に検索することもできます。
これは、特に複雑なデータ抽出やクロス集計のような場面で非常に役立ちます。
目的:商品ID「C001」の「カテゴリ」を知りたい
- INDEX関数の取得したい範囲:データ全体(例:A:D列、または表全体)を指定します。
- 1つ目のMATCH関数(行番号用)の検索値:「C001」
- 1つ目のMATCH関数(行番号用)の検索範囲:商品IDが入力されている列(例:A列)を指定します。
- 2つ目のMATCH関数(列番号用)の検索値:「カテゴリ」
- 2つ目のMATCH関数(列番号用)の検索範囲:見出し行(例:A1:D1)を指定します。
数式: =INDEX(A:D, MATCH(“C001”, A:A, 0), MATCH(“カテゴリ”, A1:D1, 0))
この数式は、次のように解釈されます。
MATCH("C001", A:A, 0)
:A列の中から「C001」が何行目にあるかを探します。この場合、「7」が返されます。MATCH("カテゴリ", A1:D1, 0)
:A1からD1の範囲(見出し行)の中から「カテゴリ」が何列目にあるかを探します。この場合、「3」が返されます。INDEX(A:D, 7, 3)
:A列からD列の範囲で、7行目3列目にある値(つまりC7セル)を取り出します。
結果として、「食品」が返されます。

INDEX+MATCH関数を使いこなすためのヒント
まとめ:INDEX+MATCHでExcelの可能性を広げよう!

VLOOKUP関数は手軽で便利な関数ですが、INDEX関数とMATCH関数の組み合わせは、そのVLOOKUP関数の弱点を補い、より柔軟で便利なデータ検索を可能にします。
特徴 | VLOOKUP関数 | INDEX + MATCH関数 |
検索列の位置 | 必ず左端である必要あり | 左右どちらでも可能 |
列の変更への耐性 | 弱い(エラーになりやすい) | 強い(変更に影響されにくい) |
処理速度 | 大量データでは遅くなる可能性あり | 大量データでも高速に処理可能 |
複雑な条件検索 | 不向き | 可能 |
記述のしやすさ | シンプルで分かりやすい | 最初は複雑に感じる |
最初は少し難しく感じるかもしれませんが、一度使い方を覚えてしまえば、Excelでの作業効率がグンと上がり、データ活用の幅が大きく広がります。VLOOKUP関数で困っていたあの悩みも、きっと解決できるはずですよ!

ぜひ、この記事を参考にINDEX関数とMATCH関数を組み合わせて、Excelを自由自在に操る楽しさを体験してみてくださいね!
コメント