はじめに
前回は、検索/行列関数の中で比較的使用頻度の高いVLOOKUPのほか、HLOOKUPとLOOKUPの3つの関数について取り上げ、参照範囲の指定方法について紹介しました。VLOOKUPなどの関数は、コードから商品名などを検索する関数としてよく使われています。しかし、逆パターン、例えば「新幹線の時刻表をもとに、午後1時までに新大阪に到着するには東京何時発の新幹線に乗るべきか?」といった場合や、「最大売上金額の支店名を調べる」という場合はどうすればいいでしょうか?
そこで今回は、このような場合に使われる検索/行列関数、INDEXとMATCH関数について紹介します。
INDEX関数とMATCH関数はどんなときに使う?
VLOOKUP関数と同様に、INDEX関数も「表の中からデータを取り出す」関数に変わりはないのですが、VLOOKUPとは少々使い方が異なります。
「売上データの中で、一番売れたものは何か」または「今から出発すると何時発の電車に乗れて何時に目的地に到着するか」といったものを探すのには、INDEX関数とMATCH関数を組み合わせて検索します。
INDEX | 表やセル範囲から行や列を指定して、セル参照を求めたり、該当位置のデータを求める。セル範囲形式と配列形式の2種類がある。ただし、行番号と列番号から検索するため、VLOOKUPのように、表の見出し名から検索(数式でラベルを使用)することはできない。 |
---|---|
MATCH | 検査範囲にある検索値(データ)から、その範囲で該当する行番号や列番号を求める。表の見出し名から検索できないINDEX関数を補うためにセットとして使われることが多い。なお、検索の方法として「検索値に完全一致」「検索値に完全一致する値がなければ検索値未満の最大値」「検索値に完全一致する値がなければ検索値より大きい最小値」から選択できる。 |
まず、簡単に具体例を一つ挙げてみます。以下の支店別売上表でもっとも売上金額が大きい支店はどこでしょうか? このようにデータが少ない表であれば、支店名は一目でわかりますよね。
支店名 | 売上金額 |
---|---|
A支店 | 500,000 |
B支店 | 450,000 |
C支店 | 350,000 |
D支店 | 550,000 |
E支店 | 400,000 |
この例での行番号は4番目で、支店名は1列目、といった形で求めるのがINDEX関数です。しかし、膨大なデータテーブル、または、別のシートにある表データから検索するといった場合は、そう簡単に調べることはできません。
そこで、MATCH関数で該当するデータが何行目にあるのかを探し、INDEX関数で行番号に一致した指定した列を求めることができます。もし、最大値を探す場合は、MATCH関数にMAX関数をネストするとOKです。
INDEX関数について
INDEX関数は、インデックスを使って、範囲、または配列から抽出した値を返します。セル範囲形式と配列形式があります。
セル範囲形式 | INDEX(範囲,行番号,列番号,領域番号) |
---|---|
配列形式 | INDEX(配列,行番号,列番号) |
セル範囲形式は、複数のセル範囲があって、何番目の領域(セル範囲)の値を返すか、といった場合に利用します。セル範囲形式で複数の範囲を指定する場合は、括弧でくくり、それぞれ半角カンマで区切ります。たとえば、「A2:C7」と「E2:G7」の二つのセル範囲があり、1行目2列目のデータを2番目の表(E2:G7)から抜き出す場合は、
=INDEX((A2:C7,E2:G7),1,2,2)
となります。もし領域番号の引数を省略すると1番目のセル範囲(A2:C7)から値を返します。