スプレッドシートの関数の中でも特に使用頻度の高いものと言えば、vlookup関数かなと思いますが、やはりいくつか欠点があります。
- 検索列における垂直方向への検索のため、水平方向への検索はできない。
- 検索列の結果を元に、検索列より左列の値を取得できない。
このような欠点は取得元データのレイアウトや編集ルール等で、度々悩ましい問題になってくることがあります。
しかしindex関数とmatch関数を組み合わせることによって、これら欠点を克服した上位版vlookup関数を作り出すことができます!
今回はそんな上記2つの関数について、それぞれの使い方と組合せ方についてご説明していきます。
目次
スプレッドシート 関数 index 使い方
基本構文
基本構文
INDEX(参照範囲, 行, 列)
index関数は選択した範囲で、指定した行と列に合致するセルの値を取得します。
注意点としてはこの行と列は参照範囲内における数値になるので、参照範囲の一番左上を(1,1)としてカウントします。
=index(B4:C24,7,2)
スプレッドシート 関数 match 使い方
基本構文
基本構文
MATCH(検索キー, 1列[行]の検索範囲, 検索の種類)
検索の種類
検索方法を "1", "0", "−1"のいずれから選択します。
"1" の場合
範囲が昇順で並べ替えられていると想定し、検索キー以下の最も大きい値を返します。
"0" の場合
完全一致を示し、範囲が並べ替えられていない場合に必須の値です。
"-1" の場合
範囲が降順で並べ替えられていると想定し、検索キー以上の最も小さい値を返します。
省略可です。その場合はデフォルトの"1"が設定されます。
基本的には"0"を設定しておけば問題ないかと思います!
match関数は、1列[行]を検索範囲とし、検索キーと合致したセルの行[列]の相対位置を取得します。検索範囲を列にした場合は行の相対位置を、行にした場合は列の相対位置を返却します。
検索範囲内における行[列]の位置なので、範囲に対する位置という意味で相対位置となるわけですね!
=match(E4,B4:B24,0)
今回は「マスク」を検索キーに列を検索範囲としているため、範囲における相対位置として「6(行目)」が返却されています。スプレッドシートの行番号とは違うということが分かるかと思います!
スプレッドシート関数 indexとmatchの組合せ
さて、ここまで説明した2つをうまく組み合わせることで、vlookupよりさらに便利な関数として活用することができるようになります。少しずつみていきましょう!
vlookupは検索列(選択した範囲の一番左1列)から検索キーに合致する値のセルを見つけ、範囲内からそのセルの行と任意で指定した列で値を取得する関数でした。
pickup!
vlookupについて詳しく知りたい方はこちらから!
例えば今回の表を使って検索キーの「マスク」からその値段を取得すると以下のようになりますね。
=vlookup(E4,B4:C24,2,false)
この「検索列(選択した範囲の一番左1列)から検索キーに合致する値のセルを見つけ、」の部分ですが、match関数に似ていませんか?そして「範囲内からそのセルの行と任意で指定した列で値を取得する」はindex関数で出来そうですよね?
match関数で検索キーと合致するセルの行を取得し、index関数で参照範囲からその行と任意の列を指定して取得すれば、vlookupと同じように抽出してくれるように思えます。
ではまずmatch関数をindexの行に挿入してみましょう。
基本構文に反映すると以下のようになります。
基本構文(改)
INDEX(参照範囲, MATCH(検索キー, 1列の範囲, 検索の種類), 列)
これでvlookupの画像と同様に「マスク」という検索キーで「料金」を取得してみます!
先ほど、match関数で検索キー「マスク」で列を検索し、行位置を取得したので、indexの参照範囲をvlookupと同じにして、取得した行位置と「料金」の2列目を指定します。
=index(B4:C24,match(E4,B4:B24,0),2)
vlookupと同じ値が取得出来てますね!
ちょっと計算式は長くなりますが、このようにindex+matchの組合せでも検索キーから指定の値を取得することができます!
そして、この組合せであれば冒頭でご説明したvlookupの欠点も攻略可能です。
例えば今回は行にmatchを挿入しましたが、これを列に挿入すれば、検索キーに合致する列と任意の行で値を取得することが出来ます。
例では、上記の表を転置したものを使用します。
=index(C2:W3,2,match(B6,C2:W2,0))
列の情報から指定した行のセルの値を取得しています。
さらにさらに、検索列の左側から値を取得することも可能です!
例えば先ほどの商品リストの一番左に商品IDを追加して、商品名から商品IDを取得してみましょう。
=index(B4:D24,match(F4,C4:C24,0),1)
商品名を元に左側の商品IDを取得出来てますね!
vlookupの場合、検索キーを変えたり取得元データの列をずらす必要がありますが、index+matchの組合せであれば計算式を変えるだけで対応出来てしまいます。
実はvlookupだけでやる方法もあるんですが、スプレッドシート独自のやり方なのと配列数式という概念が少しややこしいかもしれないので、Excelも使う人はindex+matchを覚えてしまった方がどちらでも使えておすすめです!
最後に
index関数とmatch関数の組合せはとても万能ですが、簡単な整理・集計だったり、取得元データが編集可能だったりする場合はvlookupで十分です!
vlookupはシンプルかつ便利な関数なので、少し工夫すればほとんどのケースで事足りるかなと思います。
ただちょっと融通がきかないところもあるので、そういった時やデータの拡張等が予測される際はindex+matchで予め記載しておくと修正が楽で良いですよ!