この記事では、SpreadSheetの関数、MATCHとINDEXについて紹介します。
VLOOKUP関数では実現できない、右側の列から、左側の列を参照するといった事ができるようにもなるので、参考になれば幸いです。
まずは、各関数の挙動を確認してから、組み合わせてつかう例を記載していきます。
MATCH関数
MATCH(検索キー, 範囲, 検索の種類)
指定の値を検索して、見つかったセル番号を返してくれます。
検索の種類に関しては、範囲がソート済みかどうかになります。
1: 昇順
0: ソートされてない
-1: 降順
例えば、A3に"hoge"というセルがある場合、
=MATCH("hoge", A:A, 0)
この結果は、3となります。(上から3つ目)
範囲の指定は、単一の行か列である必要があります。
A:A
や、A1:A10
などの範囲を指定した場合、MATCH関数は、縦方向に検索します。
次の例では、D1に"hoge"というセルがある場合、
=MATCH("hoge", 1:1, 0)
この結果は、4となります。(左から4つ目)
1:1
や、A1:Z1
などの範囲を指定した場合、MATCH関数は、横方向に検索します。
INDEX関数
INDEX(範囲, 行, 列)
INDEX関数は、指定の範囲に行と列を指定して参照する事ができるものです。
例
=INDEX(A1:C5, 4, 2)
「A1:C5」範囲の、(4行目, 2列目)のセルを参照する。
結果は、B4のセル値が参照される事になります。
LOOKUP/VLOOKUP関数の代替
LOOKUP/VLOOKUP関数では、指定範囲の1列目または1行目のセルからしか検索ができませんが、
MATCH関数と、INDEX関数を組み合わせる事で、どの行と列からでも検索する事ができます。
商品コードから、商品名を参照するのは、VLOOKUP関数でできますが、
商品名から商品コードを検索することができません。
VLOOKUP関数を使った例
商品名が2列目、商品コードが1列目にあるため、
VLOOKUP関数では対応できないのです。
そういった場合に、
MATCH/INDEX関数を組み合わせて、下記のように記載することができます。
=INDEX(A2:A4, MATCH("おしるこ", B2:B4, 0), 1)
MATCH関数で、検索したい値を渡し、行数を取得します。
("おしるこ"は、B2:B4
範囲の3行目)
取得した行数を使って、INDEX関数で1列目の値を取得します。
(A2:A4
範囲の3行目,1列目)
まとめ
- MATCH関数は指定の値を検索して行数、または列数を返す。
- INDEX関数は指定範囲の行数と列数で参照する。
- LOOKUP/VLOOKUP関数では、先頭行または先頭列の検索しかできない。
- MATCH関数とINDEX関数を組み合わせる事で、代替えできるのと、先頭以外からでも検索ができる。