MATCH関数って何を求めるの?
INDEX関数と組み合わせるって聞いた事あるけど…
わかりやすく教えて…
こんにちは。MATCH関数はなんとなく聞いた事はあるけど、使い方が分からず日常的に取り入れていない。という方もいるのではないでしょうか。私もなんとなく使ってすぐ忘れる…という事が何度もありましたが、一度じっくりと理解したら何も見なくても使えるようになりました。
MATCH関数は、データの「何行目、何列目」といった情報を取得する関数です。単体ではあまり使うケースが少ない為、この記事ではMATCH関数の基本と、よく使うVLOOKUP関数とINDEX関数との組み合わせをまとめて解説します。
MATCH(マッチ)関数の基本
喫茶店のメニュー表をサンプルデータにして、MATCH関数の基本を解説します。
例えば、たまごサンドのカロリーを調べたいとします。
たまごサンドは、表の上から数えて6番目の行(見出しも含めた場合)。そして、カロリーのデータは表の左から4番目の列にあります。この行と列が交差するセルに、たまごサンドのカロリーがあります。この「6」と「4」という位置情報を、MATCH関数を使って自動的に取得してみましょう!
=MATCH(H3,B2:B13,0)
=MATCH(検索値,検索範囲,完全一致(0)か近似値(1))
「たまごサンド」の「6」行目の場合H3
のセルに入力されている「たまごサンド」を、B2:B13
の範囲から完全一致(0)で探します。この場合、上から数えて6番目に「たまごサンド」が見つかるので、MATCH関数は「6」を返します。
ここで注意が必要なのは、MATCH関数が返すのは、指定した範囲内での位置であり、Excelの行番号とは異なるという点です。例えば、たまごサンドはExcelの行番号では「7」行目にありますが、指定した範囲(B2:B13
)内では上から6番目なので、MATCH関数は「6」を返します。
「カロリー」の「4」列目の場合H4
のセルに入力されている「カロリー」を、A2:F2
の範囲(2行目のデータ)から完全一致で探します。この場合、左から数えて4番目に「カロリー」が見つかるので、MATCH関数は「4」を返します。
=MATCH(H4,A2:F2,0)
【応用編】組み合わせて使う
では、MATCH関数で取得した行や列の番号が、どのような場面で活用できるのかを見てみましょう。
【VLOOKUP関数+MATCH関数】で列番号を自動入力
まずは、通常のVLOOKUP関数
=VLOOKUP(H3,$B$2:$F$13,3,0)
=VLOOKUP(H3,検索値を含む範囲を指定,範囲内の列番号,完全一致(0)か近似値(1))
H3
のセルに入力された「たまごサンド」を、指定した範囲内から探し、同じ行にある3列目の値を取得します。ここで、先ほど学んだMATCH関数を活用する場面が出てきます!この式で手動で入力している列番号の「3」、これをMATCH関数を使って自動化してみましょう。
=VLOOKUP(H3,$B$2:$F$13,3,0) ←通常のVLOKUP関数
=VLOOKUP(H3,$B$2:$F$13,MATCH($I$2,$B$2:$F$2,0),0) ←MATCH関数との組み合わせ
先ほどのVLOOKUP関数で、手動で入力した列番号「3」の部分をMATCH
関数にします。I2
セルに入力されている「カロリー」を、範囲 $B$2:$F$2
(2行目のデータ)内から探します。この場合、「カロリー」は指定した範囲の中で左から数えて3番目に見つかるため、MATCH関数が「3」を返します。
今回のような小さなデータでは、列番号「3」を手入力した方が簡単です。しかし、列数が多い大規模なデータや、取り出したい列が何列もある場合、列番号を手入力するより自動化した方が、より正確かつ効率的にデータを取得できます。
INDEX関数+MATCH関数
続いて、INDEX関数との組み合わせを解説します。
=INDEX($A$2:$F$13,6,3)
=INDEX(配列,行番号,列番号)
INDEX関数は、指定した範囲(配列)から、行番号と列番号が交差したセルの値を取得する関数です。※行番号と列番号の順に入力する点がポイントです。
この例では、たまごサンドの「6」と、カロリーの「4」にMATCH関数が使えそうですね!
=INDEX(A2:F13,MATCH(H3,B2:B13,0),MATCH(I2,A2:F2,0))
=INDEX(配列,行番号,列番号)
INDEX関数は、指定した範囲の、行番号と列番号の指定したセルの値を返します。
ここで、『それならVLOOKUP関数の方が簡単では?』と思った方もいるかもしれませんが、次の様なケースではVLOOKUP関数が使えないため、INDEX関数が活躍します。
VLOOKUP関数より、INDEX関数+MATCH関数が適しているケース
=INDEX($A$2:$F$13,MATCH($H$3,$B$2:$B$13,0),MATCH(J$2,$A$2:$F$2,0))
=INDEX(配列,行番号,列番号)
「たまごサンド」と同じ行にあるA列のIDを取得したい場合、VLOOKUP関数は、検索値の「たまごサンド」より左方向の値を取得できません。右方向という制約がありましたね。この様な場合は、どの列も指定できるINDEX関数が活躍します。
まとめ
- MATCH関数は、指定した範囲内で、検索値が上から何行目または左から何列目に位置するかを返します。(※Excelの行番号とは異なるので注意)
- よく使う関数と組み合わせることで、より柔軟かつ効率的にデータを操作できます。
VLOOKUP関数:列番号を自動入力。
INDEX関数:行番号と列番号を自動入力、VLOOKUP関数では対応できない検索値から左方向の列の値も取得可能。
まずは、使用頻度の高いこの2パターンの関数を使ってみてください!
コメント