データベースから特定の値を検索する際に便利なvlookup関数は、データが大きくなると計算が遅くなり、最悪の場合エクセルがフリーズすることもあります。Index matchは、vlookupよりも計算が速く、かつ柔軟性が高いので、効率的なエクセル作成においてはvlookupではなくindex matchを使用します。

このページの説明と合わせて、下のエクセルをダウンロードすると、index matchの使い方を練習できますので、ぜひ使ってください。

vlookupでなくindex matchを使うことのメリット(デメリットなし)

index matchの使い方を説明する前に、index matchがvlookupよりもどれだけ優れているかを解説します。Vlookupを多用している方ほど、以下に列記しているindex matchのメリットの大きさを理解できるかと思います。

index matchを使うことのメリット

  • vlookupはデータベース全体を参照するため、多用すると計算が非常に遅くなる一方、index matchは検索値の入っている列と検索キーの入っている列の2列だけを参照するため、計算が軽い
  • index matchは検索キーが左端になくても検索できる
  • index matchは、後からデータベースに列を挿入しても参照先がずれない

つまり、index matchは(1)vlookupでできることが全て可能、(2)vlookupではできない柔軟な使い方ができる、(3)計算ミスが削減できる、(4)しかも計算が軽い、というメリットづくしで、デメリットは1つもありません。

Index関数とmatch関数の使い方解説

Index matchは、index関数とmatch関数という2つの関数の組み合わせです。まずは、それぞれの関数について簡単に解説します。

Index関数の使い方

Index関数は、指定した範囲の中で、行と列を指定して値を検索する関数です。以下の都道府県と県庁所在地に関するデータベースを例にして説明します。

Index関数は「=index(データ範囲、行番号、列番号)」という形で指定しますので、「=index(A1:F5,3,4)」という式は、A1からF5というデータ範囲の中で3行目と4列目の値、つまり「青森」という値を検索することができます。

Match関数の使い方

Match関数は、指定した行や列の中で検索値が何番目にあるかを探す関数です。以下の縦に都道府県名が並んだデータを例にすると、「=match(“青森”,A1:A5,0)」という式は、A1からA5のデータの中で「青森」が上から何番目にあるかを検索するので、「3」という答えが返ってきます。ちなみに、最後のゼロは、照合の種類といって、ゼロの場合はデータが完全一致した場合のみ値を返して、1や-1の場合は完全一致しなくても検索値以下もしくは以上の近似値を返すというものですが、データベースが昇順に並んでいないときちんとした答えにならないので、基本はゼロを入力します。

Match関数は縦のデータだけでなく、横に並んだデータについても使用することができます。以下のデータを例にすると、「=match(“県庁所在地”,A1:F1,0)」という式は、A1からF1のデータの中で「県庁所在地」が左から何番目にあるかを検索するので、「4」という答えが返ってきます。

Indexmatchの使い方

Index match関数の組み方

では、この2つの関数を組み合わせて、vlookupよりも利便性の高いデータベース検索関数を作ります。

下の都道府県と県庁所在地のデータベースを使って、都道府県名から県庁所在地を検索してみます。

最初に、比較としてvlookupを使った場合の数式を書いてみると、以下のようになります。

「=vlookup(“北海道”,A1:F5,4,0)」

このように、A1からF5まで30個のデータを範囲として、その中から北海道のある行の4列目の値(=札幌)を検索するのが、vlookupになります。

一方、index matchでは、以下のようになります。

「=index(D1:D5,match(“北海道”,A1:A5,0))」

この数式は、D1:D5をデータ範囲として、A1からA5の中で北海道がくる順番(=2番目)の値(=札幌)を検索しています。このようにすると、データの個数は10個に減少しますので、vlookupと比較してデータ検索の負荷が1/3に軽減されることになります。なお、index関数は、検索範囲(上での例ではD列)が1列のみの場合、行のみを指定すればよく、列の指定は不要になります。

Index match関数のメリットを確認する

それでは、実際にvlookupと比較した際のindex matchのメリットをエクセルで確認してみましょう。

まずは、index match関数の演習シートをダウンロードして、演習シートの黒枠で囲まれている部分に、vlookupとindex matchの数式を組んでください。もし組み方がわからない方は、解答シートに数式が書かれていますので、そちらをご確認ください。

ちなみに、演習シートのindex match1とindex match2の違いは、index match1は先ほど説明した方法を指しており、index match2は、vlookupと同様に全てのデータを範囲として、match関数で行と列それぞれを指定して検索する方法を指しております。

Index match2はデータ範囲がvlookupと同じになってしまい、そのぶん検索スピードが遅くなってしまうのであまり使うことはありませんが、参考までにvlookupと全く同じ形の検索も可能であることをお示ししております。

H列とI列の間に列を挿入してみる

Vlookupとindex matchの数式を組むと、上のような結果になります。そこに、エクセルのH列(都道府県)とI列(都道府県かな)の間に1列挿入してみると、以下のようにvlookupは参照先がずれてしまいます。これは、vlookupでは列番号を固定値で入力しているので、列の挿入を自動で反映することができないためです。

この問題は、vlookupの列番号にmatch関数を使うことで解消することはできるのですが、そうすると更にデータ検索スピードが遅くなり、フリーズの原因にもなります。

データベースを作成した後にデータ系列を追加することはよくあることです。もし、各データが全て数字であるなど似ている場合は、参照先がずれても気付かずに参照先エラーが見過ごされてしまうリスクもあるので、index matchを使うことによるデータ検索のミス削減効果は非常に高いと思います。

県庁所在地から都道府県を検索する

これは、vlookupではできない検索方法になります。Vlookupは常に左に検索キーを置いて右側のデータ範囲から検索することになりますが、index matchではそのような制約はありません。結果として、以下のように右側にある県庁所在地を検索キーとして都道府県を検索することが可能になります。