- 公開日:
ExcelのVLOOKUP関数とINDEX×MATCH関数の違い
この記事では、ExcelのVLOOKUP関数とINDEX×MATCH関数の違いをご紹介します。
Excelで名簿やさまざまな管理表を扱う場合、データ検索でVLOOKUP関数やINDEX関数とMATCH関数を組み合わせた数式を使う場面が多いと思います。
以下では、どのような違いがあってどちらを使えばいいのかという疑問にお答えします。
VLOOKUP関数とは?
VLOOKUP関数は、データ検索で広く使われる関数です。データを縦方向に検索して、検索値に一致した値と同じ行の値を指定した列から抽出します。書式は「=VLOOKUP(検索値,範囲,列番号,[検索の型])」です。
また、ほかの関数や比較演算子などを組み合わせることで、複数条件を指定したり複数のデータを取り出せたりすることができる応用の利く関数です。
VLOOKUP関数の引数の説明や使い方の詳細は、以下の記事でご紹介しています。
ExcelのVLOOKUP関数の使い方|指定の列と同じ行にある値を返す
INDEX×MATCH関数とは?
まず、INDEX関数とMATCH関数の機能をそれぞれご紹介します。
INDEX関数は、指定した行数と列数が交差する位置にあるセルやセル参照を求めます。今回使用する書式は「=INDEX(配列,行番号,[列番号])」です。
INDEX関数の引数の説明や使い方の詳細は、以下の記事でご紹介しています。
ExcelのINDEX関数の使い方|行と列が交差する位置にあるセルを返す
MATCH関数は、指定した照合の型に当てはまる検査値が範囲の何番目にあるのかを求めます。書式は「=MATCH(検査値,検査範囲,[照合の型])」です。
MATCH関数の引数の説明や使い方の詳細は、以下の記事でご紹介しています。
ExcelのMATCH関数の使い方|検索値の範囲内での相対的な位置を返す
INDEX関数とMATCH関数の単独使用では、VLOOKUP関数のような検索機能はありませんが、2つの関数を組み合わせることで検索機能を持たせることが可能になります。
ExcelのVLOOKUP関数とINDEX×MATCH関数の違い
データ検索といえば「VLOOKUP関数」というほど一般的な関数ですが、場合によってはINDEX×MATCH関数を使う方が効率よくデータ検索をすることができます。
以下では、ExcelのVLOOKUP関数とINDEX×MATCH関数の違いをご紹介します。
検索列の指定について
VLOOKUP関数は、検索列を探す列を必ず表の左端にするという制約がありますが、INDEX×MATCH関数には列の指定がありません。
以下では、検索列を指定する違いについて詳しくご紹介します。
VLOOKUP関数の場合
上記の画像は、F3セルにVLOOKUP関数を入力しています。検索列が左端にあるので、検索値(例:A102)に紐づく値(例:マグカップ)が抽出できました。
今回は、範囲が分かりやすいようにF3セルと同じ数式をE4セルにも入力しています。
以下では、検索列が左端にない場合にVLOOKUP関数の結果がどうなるのかを試してみます。
上記の画像は、検索列が左端にないので検索値(例:マグカップ)に紐づく値(例:A102)を抽出できず、#N/Aエラーが表示されました。
つまり、VLOOKUP関数で検索列より左側の列は検索できないということが分かりました。
INDEX×MATCH関数の場合
上記の画像は、F3セルにINDEX×MATCH関数を入力しています。VLOOKUP関数と同様に検索値(例:A102)に紐づく値(例:マグカップ)が抽出できました。
今回は、範囲が分かりやすいようにF3セルと同じ数式をE4セルにも入力しています。
上記の画像は、検索列より左側の列を抽出列として指定していますが、検索値(例:マグカップ)に紐づく値(例:A102)が抽出できました。
INDEX関数とMATCH関数は、検索列がどの列にあっても必要なデータを抽出することができることが分かりました。
VLOOKUP関数ではできない検索列の左側にある列のデータ検索が可能になるので、データの並び替えができない場合などにおすすめです。
範囲の指定について
VLOOKUP関数は、検索列から抽出列までをすべて選択する必要がありますが、INDEX×MATCH関数は、検索列と抽出列をそれぞれ単独で指定できます。
以下では、範囲指定の違いについて詳しくご紹介します。
VLOOKUP関数の場合
上記の画像は、社員ID(例:1007)に紐づく内線(例:8005)を抽出したい場合のVLOOKUP関数の範囲選択です。
VLOOKUP関数は、検索列(例:A列)から抽出列(例:H列)までをすべて選択する必要があります。
ただし、VLOOKUP関数の範囲選択には注意点があります。
上記の画像では、「性別」と「部署」の間に1列挿入したところ、抽出する値が1列ずれて結果に「役職」リーダーが返されてしまいました。
VLOOKUP関数は、範囲内で列の挿入または削除をした場合、列がずれて別の列の値やエラーが返されるので、列番号を手動で修正する必要があります。
また、データの列数が多い場合は列番号を目視で数えると、ミスの原因やCOLUMN関数などで列番号を取得する手間が増えてしまいます。
INDEX×MATCH関数の場合
上記の画像は、社員ID(例:1007)に紐づく内線(例:8005)を抽出したい場合のINDEX×MATCH関数の範囲選択です。
INDEX×MATCH関数では検索値を探す列(例:A列)から抽出したい列(例:H列)をそれぞれ選択することができるので、列の挿入や削除をした場合に列がずれることはありません。
計算速度について
エクセルの計算はデータ数が多くなるほど遅くなり、ファイル自体が重くなるのでメモリを圧迫する原因にもなります。
以下では、計算速度の違いについて詳しくご紹介します。
VLOOKUP関数の場合
上記の画像は、商品ID(例:1010)に紐づく、保存(例:冷蔵)の値を取得したい場合のVLOOKUP関数の選択範囲です。
VLOOKUP関数は、検索列から抽出列までをすべて選択する必要があるため、抽出したい保存(例:J列)まで選択するとデータ数が多くなり計算速度が遅くなります。
INDEX×MATCH関数の場合
上記の画像は、商品ID(例:1010)に紐づく、保存(例:冷蔵)の値を取得したい場合のINDEX×MATCH関数の選択範囲です。
INDEX×MATCH関数は、検索列と抽出列をそれぞれ選択することが可能です。データ数を最小限にすることができるため計算速度が速くなります。
データ数が多い場合は、INDEX×MATCH関数を使うようにしましょう。
まとめと使い分けについて
「ExcelのVLOOKUP関数とINDEX×MATCH関数の違い」セクションでご紹介したそれぞれ関数の主な違いと使い分けについて下記のテーブルにまとめています。
ポイント | VLOOKUP | INDEX×MATCH |
---|---|---|
検索値 | 表の左端の列 | 指定なし |
範囲指定 | 検索列から抽出列までをすべて指定 | 検索列と抽出列をそれぞれ指定 |
計算速度 | 遅い(選択範囲が広いため) | 速い(選択範囲が狭いため) |
使い分け | シンプルかつ、データ数が少ない表に効果的 | 複雑かつ、データ数が多い表に効果的 |
上記のテーブルからも分かるように、VLOOKUP関数よりINDEX×MATCH関数の方がメリットが多く扱いやすいことが分かりました。
ただし、INDEX×MATCH関数の方が数式が少し長くなるため、データ数が少なくシンプルな表やリストを検索する場合は、VLOOKUP関数でも問題ありません。