目次
このチュートリアルでは、ExcelでINDEXとMATCHを使用する方法と、VLOOKUPより優れている点を紹介します。
最近の記事では、初心者にはVLOOKUP関数の基本を説明し、パワーユーザーにはより複雑なVLOOKUP式の例を提供することに努めました。 そして今、私はVLOOKUPを使用しないように説得しないとしても、少なくともExcelで垂直検索を行うための代替方法を紹介しようと思っています。
「VLOOKUPには多くの制限があり、多くの状況で望む結果を得ることができないからです。 一方、INDEX MATCHの組み合わせはより柔軟で、多くの点でVLOOKUPより優れている素晴らしい機能を備えています。
ExcelのINDEX関数とMATCH関数 - 基本編
このチュートリアルの目的は、INDEX関数とMATCH関数を組み合わせてExcelでVLOOKUPを行う別の方法を示すことなので、それらの構文や使用方法にはあまり触れません。 一般的な考え方を理解するために必要な最低限のことだけを取り上げ、その後、VLOOKUPではなくINDEX MATCHを使う利点すべてを明らかにする式の例を詳しく見ていきます。
INDEX関数 - シンタックスと使用法
ExcelのINDEX関数は、指定した行番号と列番号に基づいて配列内の値を返します。 INDEX関数の構文は単純です。
INDEX(array, row_num, [column_num])ここでは、各パラメーターについて、ごく簡単に説明します。
- 勢揃い - 値を返したいセルの範囲を指定します。
- 行番号 - 値を返したい配列の行番号。 省略した場合は column_num が必要となる。
- 列番号 - 値を返したい配列の列番号。 省略した場合は row_num が必要。
詳しくは、ExcelのINDEX関数をご覧ください。
そして、最も単純な形のINDEX式の例です。
=index(a1:c10,2,3)
この数式は、セルA1からC10を検索し、2行3列目のセル、つまりセルC2の値を返します。
しかし、実際のデータを扱う場合、どの行とどの列が欲しいのかがほとんど分からないので、そこでMATCH関数が役に立ちます。
MATCH関数 - シンタックスと使用法
ExcelのMATCH関数は、セル範囲内のルックアップ値を検索して、その値を返します。 相対位置 の範囲にあるその値の
MATCH関数の構文は以下の通りです。
MATCH(lookup_value、lookup_array、[match_type])- ルックアップバリュー - 探している数値またはテキストの値です。
- ルックアップ_アレイ - 検索されるセルの範囲。
- マッチタイプ - は、完全一致と最近接のどちらを返すかを指定する。
- 1 または省略 - ルックアップ値以下の最大の値を検索します。 ルックアップ配列の昇順でのソートが必要です。
- 0 - ルックアップ値と正確に等しい最初の値を見つけます。 INDEX / MATCHの組み合わせでは、ほとんどの場合、完全一致が必要なので、MATCH関数の第3引数を0に設定します。
- -1 - lookup_value と等しいかそれより大きい最小の値を見つけます。 lookup 配列を降順にソートする必要があります。
例えば、範囲B1:B3に「New-York」、「Paris」、「London」という値がある場合、「London」は範囲内の3番目の項目なので、以下の数式では数値3が返されます。
=MATCH("ロンドン",B1:B3,0)
詳しくは、ExcelのMATCH関数をご覧ください。
一見、MATCH関数の有用性には疑問符がつくかもしれない。 値がどの範囲にあるかなんて、誰が気にするのだろう。 知りたいのは、値そのものだ。
ルックアップ値の相対位置(行番号や列番号など)は、まさに 行番号 と 列番号 ExcelのINDEXは、行と列の接点にある値を求めることはできても、どの行と列にあるのかを正確に判断することはできません。
ExcelでINDEX MATCH関数を使用する方法
MATCHとINDEXがどのように連携しているのか、ご理解いただけたと思います。 INDEXは列と行の番号で検索値を求め、MATCHはその番号を提供します。 以上です。
垂直方向の検索では、MATCH関数を使用して行番号を決定し、列の範囲をINDEXに直接供給するのみです。
INDEX ( から値を返すための列です。 , MATCH ( ルックアップ値 , 見上げるような柱 , 0))例えば、各国の首都とその人口のリストがあったとします。
ある首都、例えば日本の首都の人口を求めるには、次のINDEX MATCHの式を使う。
=INDEX(C2:C10, MATCH("日本", A2:A10, 0))
では、この式の各要素が実際にどのような働きをするのか、分析してみましょう。
- MATCH関数は、ルックアップ値「日本」を範囲A2:A10で検索し、「日本」がルックアップ配列の3番目にあることから、数値3を返します。
- 行番号はそのまま 行番号 の引数で、その行から値を返すように指示する。
つまり、上記の数式は、セルC2からC10を検索し、その範囲の3番目のセル、つまり2行目から数え始めるのでC4から値を引き出すという単純なINDEX(C2:C,3)に変わる。
都市名を数式にハードコードしたくない場合は、セル(例えばF1)に入力し、セル参照をMATCHに供給すると、動的な検索式が得られます。
=index(c2:c10, match(f1,a2:a10,0))
重要なお知らせ の行数です。 勢揃い の行数と一致する必要があります。 ルックアップ_アレイ の引数で指定されないと、数式は不正確な結果を生成します。
ちょっと待てよ、なぜ次のVlookup式を使わないんだ? ExcelのMATCH INDEXの難解な仕組みを理解するのに時間を浪費する意味があるのか?
=vlookup(f1, a2:c10, 3, false)
この場合、全く意味がありません :) この簡単な例は、INDEXとMATCH関数がどのように一緒に動作するかを感じてもらうためのデモンストレーションに過ぎません。 以下に続く他の例では、VLOOKUPがつまずく多くの複雑なシナリオに簡単に対処する、この組み合わせの本当の力をお見せします。
ヒント
- Excel 365 と Excel 2021 では、より現代的な INDEX XMATCH 式を使用することができます。
- Google Sheetsの場合は、こちらの記事でINDEX MATCHを使った計算式の例をご覧ください。
INDEX MATCHとVLOOKUPの比較
縦方向のルックアップにどの関数を使うかを決めるとき、多くのExcelの達人はINDEX MATCHがVLOOKUPよりはるかに優れているという意見で一致しています。 しかし、多くの人がVLOOKUPを使い続けています。その理由は、第一にシンプルであること、第二にExcelでINDEX MATCH式を使うメリットを完全に理解していないためです。 そのように理解しなければ、誰もより複雑な関数を学ぶために時間を投資しようとはしないのです。の構文で構成されています。
以下では、VLOOKUPに対するMATCH INDEXの主な利点を指摘し、あなたのExcelの武器として価値があるかどうかを判断していただきます。
VLOOKUPの代わりにINDEX MATCHを使用する4つの主な理由
- 右から左へのルックアップ。 VLOOKUPは、その左側を見ることができません。つまり、ルックアップ値は常にテーブルの左端の列に存在しなければなりません。 INDEX MATCHは簡単に左ルックアップできます!次の例は、それを実際に示しています: Excelで値を左側にVlookupする方法です。
- 列の挿入や削除を安全に行うことができます。 VLOOKUPの構文では、データを取得する列のインデックス番号を指定する必要があるため、ルックアップテーブルから新しい列を削除したり追加したりすると、VLOOKUPの計算式が崩れたり、不正な結果をもたらします。 当然、列を追加または削除すると、インデックス番号も変更されます。
INDEX MATCHでは、インデックス番号ではなく、返す列の範囲を指定します。 そのため、関連する数式をすべて更新する心配がなく、自由に列を挿入したり削除したりすることができます。
- ルックアップ値のサイズに制限を設けない。 VLOOKUP関数を使用する場合、検索条件の長さの合計が255文字を超えると、#VALUE!エラーが発生します。 したがって、データセットに長い文字列が含まれている場合、INDEX MATCHが唯一の解決策となります。
- 処理速度の向上。 しかし、ワークシートに数百、数千の行があり、その結果、数百、数千の計算式がある場合、Excelはテーブル配列全体ではなく、検索列と戻り列だけを処理すればよいので、MATCH INDEXはVLOOKUPよりもはるかに速く処理することができるのです。
VLOOKUPがExcelのパフォーマンスに与える影響は、VLOOKUPやSUMのような複雑な配列式がワークブックに含まれている場合に特に顕著になります。 要は、配列内の各値をチェックするためにVLOOKUP関数を個別に呼び出す必要があるからです。 したがって、配列に含まれる値が多く、ワークブック内にある配列式の数が多くなるほど、Excelのパフォーマンスは遅くなるのです。
Excel INDEX MATCH - 数式の例
MATCH INDEX関数を学ぶ理由を理解した上で、最も興味深い部分に触れ、理論的な知識を実際にどのように適用できるかを見てみましょう。
右から左へ見上げるINDEX MATCH式
すでに述べたように、VLOOKUPは左側を見ることができないので、ルックアップ値が左端の列にない限り、Vlookup式が望む結果をもたらす可能性はありません。 ExcelのINDEX MATCH関数はより汎用的で、ルックアップ列と戻り列がどこにあるのかをあまり気にしません。
今回の例では、サンプル表の左側にRankの列を追加し、ロシアの首都モスクワの人口順位を調べてみる。
G1のルックアップ値で、以下の式でC2:C10を検索し、A2:A10に対応する値を返す。
=index(a2:a10,match(g1,c2:c10,0))とする。
ヒント:INDEX MATCH式を複数のセルに使用する場合は、絶対セル参照($A$2:$A$10や$C$2:4C$10など)で両方の範囲をロックして、式をコピーするときに歪まないように注意してください。
INDEX MATCH 行と列を検索するためのMATCH
上記の例では、INDEX MATCHを従来のVLOOKUPの代わりに使用して、あらかじめ定義された1列の範囲から値を返しました。 しかし、複数の行や列で調べる必要がある場合はどうでしょうか。 つまり、いわゆる、次のような処理を行いたい場合はどうでしょう。 マトリックス または りょうほうこう ルックアップ?
この式は、ExcelのINDEX MATCH関数と非常によく似ていますが、1つだけ違う点があります。 何だと思いますか?
単純に、2つのMATCH関数を使って、1つは行番号を、もう1つは列番号を取得します。 そして、正解された方には、おめでとうございます :)
INDEX (配列, MATCH ( ルックアップ値 , 見上げるような柱 0)、MATCH( ルックアップ値 , 見上げるような列 , 0))それでは、下の表を見て、ある年のある国の人口(百万人)を求めるINDEX MATCH MATCHの式を作ってみましょう。
対象国をG1(vlookup値)、対象年をG2(hlookup値)とすると、式は次のような形になる。
=index(b2:d11, match(g1,a2:a11,0), match(g2,b1:d1,0))
この式の仕組み
複雑なExcelの数式を理解する必要があるときは、数式を小さなパーツに分解し、個々の関数が何をするのかを見てみましょう。
マッチ(g1,a2:a11,0)
- は、セル G1 の値("中国")を A2:A11 から検索し、その位置(2)を返します。
match(g2,b1:d1,0)) があります。
- は、B1:D1を検索して、セルG2("2015")の値の位置を取得し、その値は3である。
上記の行番号と列番号は、INDEX関数の対応する引数になります。
index(b2:d11, 2, 3)
その結果、範囲B2:D11の2行目と3列目の交点にある値が得られ、それがセルD3の値です。 簡単ですか、そうです!
複数の条件を調べるExcel INDEX MATCH
Excel VLOOKUPチュートリアルをご覧になった方は、複数の条件でVlookupする数式をすでに試されたと思います。 しかし、その方法の大きな制限は、ヘルパー列を追加する必要があることです。 ExcelのINDEX MATCH関数は、ソースデータを修正または再構築せずに、二つ以上の条件で検索することもできますよ!(※)。
以下は、複数の条件を持つ一般的なINDEX MATCHの式です。
{=INDEX( return_range , MATCH(1, ( クライテリア1 = レンジ1 ) * ( クライテリア2 = レンジ2 ), 0))}注:この数式は、Ctrl + Shift + Enter のショートカットで完成させる必要がある配列数式です。
下の表の例では、2つの条件から金額を求めるとします。 お客様 と 製品 .
次のINDEX MATCHの式は、うまくいく。
=index(c2:c10, match(1, (f1=a2:a10) * (f2=b2:b10), 0))
ここで、C2:C10 は値を返す範囲、F1 は基準1、A2:A10 は基準1と比較する範囲、F2 は基準2、B2:B10 は基準2と比較する範囲である。
Ctrl + Shift + Enterキーで数式を正しく入力すると、Excelは自動的にスクリーンショットに示すように、それを波括弧で囲むことを忘れないでください。
ワークシートで配列数式を使いたくない場合は、数式にもう一つINDEX関数を追加して、普通にEnterキーを押して完成させてください。
これらの計算式の仕組み
この式は、1つの列を調べる基本的なINDEX MATCH関数と同じ手法を使用しています。 複数の条件を評価するには、個々の条件の一致と非一致を表すTRUE値とFALSE値の配列を2つ以上作成し、これらの配列の対応する要素を乗算します。 乗算操作は、TRUEとFALSEを1と0に変換するものです。MATCH関数のルックアップ値を1にすると、配列の最初の "1 "が見つかり、その位置がINDEXに渡され、指定した列からこの行の値が返されます。
非配列式は、INDEX関数が配列をネイティブに扱えることに依存しています。 2番目のINDEXは、0を設定します。 行番号 で、列の配列全体をMATCHに渡します。
以上が数式のロジックのハイレベルな説明ですが、詳細については、Excel INDEX MATCH with multiple criteriaをご覧ください。
ExcelのINDEX MATCHとAVERAGE、MAX、MINの関係
Microsoft Excelには、範囲内の最小値、最大値、平均値を求める特別な関数があります。 しかし、これらの値に関連する別のセルから値を取得する必要がある場合はどうでしょうか。 この場合、INDEX MATCHと一緒にMAX、MIN、AVERAGE関数を使用します。
INDEX MATCH with MAX
D列の最大値を求め、同じ行のC列の値を返すには、次の式を使用します。
=index(c2:c10, match(max(d2:d10), d2:d10, 0))
MINとのINDEX MATCH
D列の最小値を探し出し、C列から関連する値を引き出すには、こちらを使用します。
=index(c2:c10, match(min(d2:d10), d2:d10, 0))
AVERAGEとのINDEX MATCH
D2:D10の平均値に最も近い値を計算し、C列から対応する値を得るには、次の式を使用します。
=index(c2:c10, match(average(d2:d10), d2:d10, -1 ))
MATCH関数の第3引数(match_type)には、データの構成に応じて、1または-1を指定します。
- ルックアップカラム(この例ではD列)がソートされている場合 上昇 である最大の値を計算します。 未満 または平均値と等しい。
- ルックアップカラムがソートされている場合 下行 である最小の値を計算します。 より大きい または平均値と等しい。
- ルックアップ配列に値が含まれている場合 ジャスト・イコール を平均値に設定すると、完全一致の場合は0を入力します。 並べ替えは必要ありません。
この例では、D列の人口は降順にソートされているので、マッチタイプに-1を使用します。 その結果、東京の人口(1318万9000人)が平均(1226万9006人)よりも大きい最も近いマッチであることから、"東京 "が得られます。
VLOOKUPでもこのような計算ができることをご存じでしょうか。ただし、VLOOKUPとAVERAGE, MAX, MINという配列式で計算します。
IFNA / IFERRORでINDEX MATCHを使用する。
お気づきのように、ExcelのINDEX MATCH式でルックアップ値が見つからない場合、#N/Aエラーが発生します。 標準のエラー表記をより意味のあるものに置き換えたい場合は、INDEX MATCH式をIFNA関数で囲みます。 例えば、次のようになります。
=IFNA(INDEX(C2:C10, MATCH(F1,A2:A10,0)), "No match is found")
そして今、誰かが検索範囲に存在しないルックアップテーブルを入力した場合、数式は一致しないことを明示的にユーザーに通知します。
N/Aだけでなく、すべてのエラーを検出したい場合は、IFNAの代わりにIFERROR関数を使用してください。
=IFERROR(INDEX(C2:C10, MATCH(F1,A2:A10,0)), "おっと、何かおかしいぞ")
多くの場合、すべてのエラーを隠すことは得策ではないことに注意してください。
以上、ExcelのINDEXとMATCHの使い方でした。 今回ご紹介した数式が皆様のお役に立てれば幸いです!また、来週のブログでお会いしましょう。
練習用ワークブック(ダウンロード
ExcelのINDEX MATCHの例(.xlsxファイル)