はじめに
Googleスプレッドシートでデータを検索して取得する際、VLOOKUP関数では範囲の左端からしか検索ができず、限られた条件しか指定できません。そこで活躍するのがINDEX関数とMATCH関数の組み合わせです。この2つの関数を使うことで、柔軟で効率的なデータ検索が可能になります。
この記事では、INDEX関数とMATCH関数の基本的な使い方から、複数条件での検索や列を越えた検索の実例まで、段階的に詳しく解説していきます。
INDEX関数とMATCH関数の概要
まず、INDEX関数とMATCH関数がそれぞれどのような役割を果たすのかを理解しましょう。
INDEX関数: 指定した範囲から、指定した行と列に位置するセルの値を返す関数。
MATCH関数: 指定した値が範囲内の何番目にあるかを返す関数。
この2つを組み合わせることで、特定の値の場所を探し、その位置にある別のデータを取得することが可能です。
INDEX関数とMATCH関数の基本的な使い方
INDEX関数の基本構文
=INDEX(範囲, 行番号, [列番号])
● 範囲: データの範囲。
● 行番号: 範囲内のデータから取得したい行の番号。
● 列番号: 省略可能で、範囲内の列番号を指定。
MATCH関数の基本構文
=MATCH(検索値, 検索範囲, [一致の種類])
● 検索値: 検索したい値。
● 検索範囲: データ内で検索する範囲。
● 一致の種類: 0(完全一致)、1(以下の最大値)、-1(以上の最小値)。
基本例:INDEXとMATCHを使ってデータを検索
INDEXとMATCHを組み合わせることで、範囲内の行や列を指定してデータを抽出できます。
実例1:IDから名前を検索
データ例
ID | 名前 | 部署 |
---|---|---|
001 | 田中 | 営業 |
002 | 鈴木 | 開発 |
003 | 佐藤 | サポート |
004 | 中村 | 総務 |
ID「002」に対応する「名前」を検索して取得する場合、次のようにINDEXとMATCHを組み合わせます。
=INDEX(B2:B5, MATCH("002", A2:A5, 0))
解説
MATCH("002", A2:A5, 0)
が「002」が何行目にあるかを返し、その行をINDEX関数が指定した範囲から取得します。- 結果: 「鈴木」と表示されます。
● MATCH("002", A2:A5, 0)
が「002」が何行目にあるかを返し、その行をINDEX関数が指定した範囲から取得します。
● 結果: 「鈴木」と表示されます
応用例:左右や複数列にまたがる検索
INDEXとMATCHを組み合わせることで、VLOOKUPではカバーできない柔軟な検索が可能です。特に、左右にまたがるデータや複数条件を含む検索に便利です。
実例2:部署名からIDを検索
通常のVLOOKUPでは範囲の左端からしか検索できませんが、INDEXとMATCHを使えば、右側にある列からも検索が可能です。
データ例
ID | 名前 | 部署 |
---|---|---|
001 | 田中 | 営業 |
002 | 鈴木 | 開発 |
003 | 佐藤 | サポート |
004 | 中村 | 総務 |
「サポート」部署のIDを検索する場合、以下のように書きます。
=INDEX(A2:A5, MATCH("サポート", C2:C5, 0))
解説
● MATCH("サポート", C2:C5, 0)
で「サポート」が何行目にあるかを取得し、その行のIDをINDEX関数で取得します。
● 結果: 「003」と表示されます。
複数条件での検索
INDEXとMATCHを組み合わせれば、複数の条件を基にしたデータの検索も可能です。たとえば、「名前」と「部署」の両方を条件にして検索を行う場合、配列数式を使います。
実例3:名前と部署を基にした検索
データ例
名前 | 部署 | 年齢 |
---|---|---|
田中 | 営業 | 30 |
田中 | 開発 | 28 |
鈴木 | 営業 | 35 |
佐藤 | サポート | 26 |
「名前が田中」で「部署が開発」の年齢を取得する場合、次のようにINDEXとMATCHを使います。
=INDEX(C2:C5, MATCH(1, (A2:A5="田中")*(B2:B5="開発"), 0))
● (A2:A5="田中")*(B2:B5="開発")
が「田中」でかつ「開発」である行を指定します。
● 結果: 「28」と表示されます。
MATCHとINDEXの応用:データ範囲の動的参照
MATCH関数とINDEX関数を使って、範囲を動的に指定することで、データが増減しても自動で範囲が調整される柔軟な設定が可能です。
実例4:最終行のデータを自動取得
データ例
月 | 売上 |
---|---|
1月 | 500,000 |
2月 | 600,000 |
3月 | 700,000 |
この例で、売上の最終行のデータを自動で取得するには、以下のように設定します。
=INDEX(B2:B100, MATCH(9.99E+307, B2:B100))
解説
● MATCH(9.99E+307, B2:B100)
は範囲内の最終行を探し出し、INDEXがそのデータを取得します。
● 結果: 最新の売上額「700,000」が返されます。
INDEXとMATCHのメリットとデメリット
メリット
デメリット
INDEXとMATCHの応用例
ここからはINDEXとMATCHを活用したさらに実践的な応用例を紹介します。
実例5:別シートからのデータ参照
INDEXとMATCHを使えば、別シートのデータも簡単に参照できます。
データ例(シート名:売上データ)
商品ID | 商品名 | 売上 |
---|---|---|
A001 | ノートPC | 150,000 |
A002 | タブレット | 100,000 |
A003 | スマホ | 200,000 |
「売上データ」シートから「A002」の売上を検索して取得する場合、以下のように記述します。
=INDEX(売上データ!C2:C4, MATCH("A002", 売上データ!A2:A4, 0))
解説
● MATCHで商品ID「A002」の位置を特定し、INDEXがその売上を取得します。
● 結果: 「100,000」と表示されます。
まとめ
INDEXとMATCHを組み合わせることで、VLOOKUPでは対応できない左右の検索や複数条件の検索が可能になります。さらに、データの動的な参照や別シートの参照にも活用でき、柔軟で効率的なデータ管理が実現します。スプレッドシートでのデータ操作がさらに便利になるこの方法をぜひ活用してみてください。
コメント