Excel MATCH関数を使用して、セルの範囲または配列内の特定の値の相対位置を見つけることができます。
MATCH関数はVLOOKUP関数に似ており、どちらもExcelルックアップ/参照関数に分類されています。 VLOOKUPは列内の特定の値を検索して同じ行の値を返し、MATCH関数は範囲内の特定の値を検索してその値の位置を返します。
Excel MATCH関数は、セルまたは配列の範囲内で指定された値を検索し、その範囲内でその値が最初に出現する相対位置を返します。 MATCH関数を使用して、特定の値を検索し、それに対応する値をINDEX関数(Vlookupと同様)を使用して返すこともできます。 Excel MATCH関数を使用して、セルの範囲内のルックアップ値の位置を見つける方法を見てみましょう。
ExcelMATCH関数
MATCH関数は、Excelに組み込まれている関数であり、主に列または行のルックアップ値の相対位置を見つけるために使用されます。
MATCH関数の構文:
= MATCH(lookup_value、lookup_array、[match_type})
どこ:
参照値 - 指定した範囲のセルまたは配列で検索する値。数値、テキスト値、論理値、または値を持つセル参照にすることができます。
lookup_array –値を検索しているセルの配列。単一の列または単一の行である必要があります。
match_type –これは、0、1、または-1に設定できるオプションのパラメーターであり、デフォルトは1です。
- 0 完全に一致するものを探し、見つからない場合はエラーを返します。
- -1 ルックアップ配列が昇順の場合、lookup_value以上の最小値を探します。
- 1 ルックアップ配列が降順である場合、look_up値以下の最大値を探します。
完全一致の位置を見つける
特定の値の位置を見つけたい次のデータセットがあると仮定します。
この表では、列(A2:A23)で都市名(メンフィス)の位置を検索するため、次の式を使用します。
= MATCH( "メンフィス"、A2:A23,0)
都市名と完全に一致するものを見つけたいため、3番目の引数は「0」に設定されています。ご覧のとおり、数式の都市名「メンフィス」は小文字ですが、表では都市名の最初の文字が大文字です(メンフィス)。それでも、数式は指定された範囲内の指定された値の位置を見つけることができます。これは、MATCH関数で大文字と小文字が区別されないためです。
ノート: lookup_valueがルックアップ範囲に見つからない場合、または間違ったルックアップ範囲を指定した場合、関数は#N / Aエラーを返します。
直接値の代わりに、関数の最初の引数でセル参照を使用できます。次の数式は、セルF2の値の位置を見つけ、結果をセルF3に返します。
近似一致の位置を見つける
ルックアップ値の近似または完全一致を検索してその位置を返すには、2つの方法があります。
- 1つの方法は、指定された値以上(次に大きい一致)である最小値を見つけることです。これは、関数の最後の引数(match_type)を「-1」に設定することで実現できます。
- もう1つの方法は、指定された値以下(次に小さい一致)の最大値です。これは、関数のmatch_typeを「1」に設定することで実現できます。
次の最小の一致
一致タイプが「1」に設定されているときに関数が指定された値と完全に一致するものを見つけられない場合、関数は指定された値(つまり次に小さい値)よりわずかに小さい最大値を見つけてその位置を返します。これを機能させるには、配列を昇順で並べ替える必要があります。そうでない場合、エラーが発生します。
この例では、次の式を使用して、次に小さい一致を見つけます。
= MATCH(F2、D2:D23,1)
この数式がセルF2の値と完全に一致するものを見つけることができなかった場合、次に小さい値、つまり98の位置(16)を指します。
次の最大の試合
一致タイプが「-1」に設定されていて、MATCH関数が完全一致を見つけることができない場合、指定された値(次に大きい値を意味する)より大きい最小値を見つけて、その位置を返します。このメソッドでは、ルックアップ配列を降順で並べ替える必要があります。そうしないと、エラーが返されます。
たとえば、次の数式を入力して、ルックアップ値に次に一致するものを見つけます。
= MATCH(F2、D2:D23、-1)
このMATCH関数は、ルックアップ範囲D2:D23でF2(55)の値を検索し、完全に一致するものが見つからない場合は、次に大きい値(58)の位置(16)を返します。
ワイルドカードマッチ
ワイルドカードは、match_typeが「0」に設定され、ルックアップ値がテキスト文字列である場合にのみ、MATCH関数で使用できます。 MATCH関数で使用できるワイルドカードには、アスタリスク(*)と疑問符(?)があります。
- 疑問符(?) 単一の文字または文字をテキスト文字列と照合するために使用されます。
- アスタリスク(*) 任意の数の文字を文字列と照合するために使用されます。
たとえば、MATCH関数のlookup_value(Lo ?? n)で2つの「?」ワイルドカードを使用して、テキスト文字列と任意の2文字(ワイルドカードの場所)に一致する値を検索しました。また、この関数は、セルE5内の一致する値の相対位置を返します。
= MATCH( "Lo ?? n"、A2:A22,0)
(*)ワイルドカードは(?)と同じように使用できますが、アスタリスクは任意の数の文字に一致するために使用され、疑問符は任意の1文字に一致するために使用されます。
たとえば、「sp *」を使用すると、関数はスピーカー、速度、スピルバーグなどと一致する可能性があります。ただし、関数がルックアップ値に一致する複数/重複する値を検出した場合、最初の値の位置のみが返されます。
この例では、lookup_value引数に「Kil * o」と入力しました。したがって、MATCH()関数は、最初に「Kil」、最後に「o」、およびその間に任意の数の文字を含むテキストを検索します。 「Kil * o」は配列内のキリマンジャロと一致するため、関数はキリマンジャロの相対位置である16を返します。
INDEXとMATCH
MATCH関数が単独で使用されることはめったにありません。多くの場合、他の関数と組み合わせて強力な数式を作成します。 MATCH関数をINDEX関数と組み合わせると、高度なルックアップを実行できます。多くの人は、VLOOKUPを使用して値を検索することを好みます。これは、値が単純であるが、INDEXMATCHはVLOOKUPよりも柔軟性があり高速であるためです。
VLOOKUPは値を垂直方向、つまり列のみをルックアップできますが、INDEXMATCHコンボは垂直方向と水平方向の両方のルックアップを実行できます。
テーブルまたは範囲内の特定の場所で値を取得するために使用されるINDEX関数。 MATCH関数は、列または行の値の相対位置を返します。組み合わせると、MATCHは特定の値の行番号または列番号(場所)を検索し、INDEX関数はその行番号と列番号に基づいて値を取得します。
INDEX関数の構文:
= INDEX(array、row_num、[col_num]、)
とにかく、INDEXMATCHがどのように機能するかを例で見てみましょう。
以下の例では、学生「Anne」の「Quiz2」スコアを取得します。そのために、次の式を使用します。
= INDEX(B2:F20、MATCH(H2、A2:A20,0)、3)
INDEXは、値を取得するために行番号と列番号を必要とします。上記の式では、ネストされたMATCH関数は、値「Anne」(H2)の行番号(位置)を検索します。次に、その行番号を、範囲B2:F20と指定した列番号(3)でINDEX関数に指定します。そして、INDEX関数はスコア「91」を返します。
INDEXとMATCHを使用した双方向ルックアップ
INDEX関数とMATCH関数を使用して、2次元範囲の値をルックアップすることもできます(双方向ルックアップ)。上記の例では、MATCH関数を使用して値の行番号を検索しましたが、列番号を手動で入力しました。ただし、2つのMATCH関数をネストすることで行と列の両方を見つけることができます。1つはrow_num引数に、もう1つはINDEX関数のcolumn_num引数にあります。
INDEXとMATCHを使用した双方向ルックアップには、次の式を使用します。
= INDEX(A1:F20、MATCH(H2、A2:A20,0)、MATCH(H3、A1:F1,0))
ご存知のように、MATCH関数は水平方向と垂直方向の両方で値を検索できます。この式では、colum_num引数の2番目のMATCH関数が、Quiz2(4)の位置を見つけて、それをINDEX関数に提供します。そして、INDEXはスコアを取得します。
これで、Excelで一致関数を使用する方法がわかりました。