らくらくIT活用術

PC活用講座 - Excel

「Excelの便利機能活用術」
INDEX関数とMATCH関数で表からデータを検索して抽出する

ITライター 立山秀利

ExcelでINDEX関数を使うと、表から行と列を指定してデータを抽出できる。さらにMATCH関数を組み合わせると、目的のデータを検索して抽出できるようにできる。今回は両関数の基本的な使い方を解説する。

行と列を指定してデータを抽出するINDEX関数

INDEX関数は指定した表から、指定した行および列が交差する位置するデータを取得する関数である。
----------------------------------------
=INDEX(配列,行番号,列番号)

配列  表のセル範囲
行番号 行の数値
列番号 列の数値
----------------------------------------

例えば、次の画面のようにA3~C5セルに都道府県名の表があるとする。この表の2行目かつ3列目のデータ(C4)をA1セルに抽出するには、A1セルにINDEX関数を次のように入力すればよい。
----------------------------------------
=INDEX(A3:C5,2,3)
----------------------------------------
行番号と列番号は数値として指定。行番号は3行目を1行目とするので、4行目は2となる。列番号はA列を1で指定するので、C列は3となる。すると、表の2行目、3列目に位置する「京都」が抽出される。

図

(画像をクリックすると拡大表示します)

指定した値を検索するMATCH関数

MATCH関数は指定したセル範囲から、指定した値が先頭から何番目にあるかを検索し、数値を返す関数である。
----------------------------------------
=MATCH(検査値,検査範囲,照合の種類)

検査値   検索する値
検査範囲  検索対象となるセル範囲
照合の種類 検索する方法
----------------------------------------

引数「照合の種類」は、完全一致で検索するなら0を指定する。最大値を検索するなら1、最小値を検索するなら-1を指定する。省略すると1を指定したとみなされる。
例えば、次の画面のように、A3~A5セルに都道府県名が入力されているとする。このセル範囲で「千葉」が何番目に位置するかをA1セルに求めるには、A1セルにMATCH関数を次のように入力すればよい。完全一致で検索するので、引数「照合の種類」には0を指定する。
----------------------------------------
=MATCH("千葉",A3:A5,0)
----------------------------------------

その結果、A3~A5セルの中で「千葉」は3番目に位置するので、3が求められる。

図

(画像をクリックすると拡大表示します)

INDEX関数とMATCH関数の組み合わせでデータを検索・抽出

INDEX関数とMATCH関数を組み合わせると、データを検索して抽出できる。まずはMATCH関数を用いて、目的のデータが表の行または列の何番目に位置するのか、検索して数値として取得する。その数値をINDEX関数の行または列に指定すれば、目的のデータを検索して抽出できる。

例えば、次の画面のように、売上のデータ表がA1~E10セルに、商品の元データの表がG1~I6セルにあるとする。売上のデータ表のB列に入力した商品コードから、該当する商品名を元データの表から検索し、C列に抽出したいとする。D列の単価も同様に、B列の商品コードから検索・抽出したいとする。

B~C列のセルにはどのような数式を入力すればよいか、商品名の最初のセルであるC3セルを例に見ていく。まずはMATCH関数を使い、B3セルの商品コードが商品の元データの表のI列で何行目にあるか検索する。引数「検査範囲」には見出し行を除いたI3~I6を指定する。
----------------------------------------
MATCH($B3,$I$3:$I$6,0)
----------------------------------------

MATCH関数で取得した数値は、目的のデータが何行目に位置するかを示すことになる。B3セルの「B001」はI3~I6セルの3番目に位置するので、MATCH関数は3を返す。

その数値をINDEX関数の行に指定し、抽出したいデータが格納されている列を指定することで、目的のデータを抽出できる。INDEX関数の引数「配列」には、商品の元データの表で見出し行を除いたG3~I6セルを指定する。引数「行」には、先ほどのMATCH関数の数式をそのまま指定する。商品名は商品の元データの表の1列目にあるので、引数「列」には1を指定する。
----------------------------------------
=INDEX($G$3:$I$6,MATCH($B3,$I$3:$I$6,0),1)
----------------------------------------

上記の数式をC3セルに指定すれば、B3セルの商品コードに該当する商品名が検索・抽出される。以下、同様の仕組みでC4~C10セルに商品名、D3~D10セルに単価を検索・抽出する数式を入力すればよい。

図

(画像をクリックすると拡大表示します)

表からデータを検索して抽出したい場合、VLOOKUP関数を利用することが多いが、検索対象のデータが表の1列目になければ対応できない。しかし、今回紹介したINDEX関数とMATCH関数を組み合わせた方法なら、検索対象のデータが表の1列目になくても対応できる。

このように、INDEX関数を使えば、行と列を指定して表からデータを抽出でき、MATCH関数を使えば、表内の位置検索が可能になる。そして、これら両関数を組み合わせれば、目的のデータを検索して抽出できるようになるのである。

その他の【Excel】を見る

PC活用講座 一覧へ

立山秀利(たてやま・ひでとし)

カーナビのソフトウェア開発、Webプロデュース業務を経て、現在は、システムやネットワーク、Microsoft Officeを中心に執筆中。 主な著書に『Excel VBAのプログラミングのツボとコツがゼッタイにわかる本』などがある。

(監修:日経BPコンサルティング)