ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Googleスプレッドシート】INDEXとMATCHを使って値を取得する

 時々Googleスプレッドシートやエクセルを使ってちょっとした便利な表を作りたくなる時があります。その度に毎回書き方を忘れてググっているので備忘録として「INDEX関数とMATCH関数」についての記事を書いている次第です。

 よく「VLOOKUPではなくINDEXとMATCHを使え」と言われますが、個人的にVLOOKUPをほぼ使ったことがないのでそっちの方法は各自で調べてください

 では、始めます。


1:表データの準備
 まずは取得したい表データを準備します。なんでもいいですが、自分は以下のようにしました。

項番 商品名 値段(円/個) 個数 金額(円)
1 りんご 100 2 200
2 みかん 100 4 400
3 なす 100 5 500
4 みりん 250 2 500
5 しょうゆ 300 7 2100
6 味噌 500 9 4500
7 ピザ 700 4 2800
8 食パン 250 2 500
9 カレー粉 300 5 1500
10 油揚げ 100 6 600

 実際のGoogleスプレッドシートでの表だと以下のように作っています。
f:id:rikoubou:20210126160213p:plain

 以降はこの表をもとにしてINDEXとMATCHの関数で値を取得していきます。


2:INDEXとMATCHを使った値取得の書き方
 結論から言うと以下の書き方でできます。

=INDEX([表のデータ範囲],MATCH([検索値],[検索範囲],[完全一致かどうか]),[値を取得する列])

 少し解説すると、MATCH関数で検索値の位置がわかります(ここでは検索範囲内の行の位置)。INDEX関数でデータ範囲の中からMATCHの結果の行の位置を取得し、そこから[値を取得する列]番号の位置の値を返すということをしています。

 では具体的に1の表を使ってデータを取得していきます。

 G2のセルを検索値としてその検索値の金額(円)の値を取得する関数は以下のようになります。

=INDEX($A$2:$E$22,MATCH(G2,$B$2:$B$22,0),5)

 実際に動かしてみると以下のようにG2のセルの値を変更すると、取得する金額(円)の値もそれに合わせて変更されます。
f:id:rikoubou:20210126162936g:plain

 ただし検索値であるG2セルが空白になってしまうとエラーになってしまうので、それを回避する場合はIFERROR関数をさらに組み合わせます。

 IFERROR関数は以下のように書きます。

=IFERROR([値],[エラー時の値])

 INDEX、MATCH、IFERRORを組み合わせると以下のようになります(エラー時は空文字を表示させています)。

=IFERROR(INDEX($A$2:$E$22,MATCH(G2,$B$2:$B$22,0),5),"")

 実際にやってみると以下のように検索値が存在しない場合はエラーではなく空文字が表示されるようになります。
f:id:rikoubou:20210126163730g:plain

 他の回避方法としては、検索値のセルであるG2をそもそも入力規則でリストに存在するものしか入れられないようにする方法もあります。


 以上がGoogleスプレッドシートでINDEXとMATCHを使って値を取得する方法です。

 自分はエクセルを持ってないので確認はできていませんが、おそらく同じ関数が実装されているはずなので同じ書き方でいけるかと思います。


・参考資料