Excel (エクセル) 学習室 / KENZO30


エクセル中級 25

中級・特別編トップへ

Excel(エクセル)学習室 HOME

   中 級 25

Excelの基礎

  検索/行列関数(INDEX関数)   

 

検索/行列関数(INDEX関数)

INDEX関数

INDEX関数は、表やセル範囲から行と列で位置を指定して、セル参照を求めたり、該当位置のデータを求める関数です。

前頁のLOOKUP関数と同じく、2つの形式があります。セル範囲形式配列形式の2種類です。配列とは、簡単に言えばセル範囲ともいえますので、利用上は2つの形式を厳格に区別する必要はないように思います。様々な使い方ができる応用範囲の広い関数と考えた方が理解しやすいです。

INDEX関数は、表やセル範囲から行と列で位置を指定して、セル参照を求めたり、該当位置のデータを求める関数です。
前頁のLOOKUP関数と同じく、2つの形式があります。セル範囲形式配列形式の2種類です。配列とは、簡単に言えばセル範囲ともいえますので、利用上は2つの形式を厳格に区別する必要はないように思います。様々な使い方ができる応用範囲の広い関数と考えた方が理解しやすいです。

書式で表すと、INDEX(範囲,行番号,列番号,領域番号) … セル範囲形式
         INDEX(配列,行番号,列番号) … 配列形式
はじめにセル範囲形式から説明します。引数の範囲は、検索対象の範囲のことで、複数の範囲を指定することができます。複数の範囲を指定する場合は、( )で囲み、範囲毎に半角のカンマ「,」で区切ります。行番号は、シート上の番号ではなく、検索対象範囲の上端行を 1 として、順に数えた番号です。列番号も検索対象範囲の左端列を 1 として、順に数えた番号です。行番号、列番号は、検索範囲が 1行や 1列であった場合、それぞれ省略することができます。
領域番号は、複数の検索範囲を指定した場合、どの範囲から検索するのかを指定する番号です。 1つ目の検索範囲は1、 2つ目の範囲は2、というように順次番号で指定します。検索範囲が1 つの場合は、省略することができます。
セル範囲形式で求められる戻り値は、セル参照です。単純に使うと検索された値が表示されますが、実態はセル参照(たとえば=F5)によって、値が表示されるようになっています。見掛けは、セルの値でもセル参照を通じて、表示されていると理解してください。詳細は、使用例で理解してください。

次に配列形式です。引数の配列は、検索対象をセル範囲で指定します。配列定数で指定することもできます。
行番号列番号の指定は、セル範囲形式と同じです。検索範囲が 1行や 1列であった場合、それぞれ省略することができます。なお、配列形式では、配列として入力すれば、行番号を 0と指定したとき、指定列の全データを求めることができます。また、列番号を 0と指定すると、指定行の全データを求めることができます。(配列については、特別編で解説予定)
なお、配列形式の戻り値は、セル参照ではありません。配列内の検索値を直接求めます。

セル範囲形式でも配列形式でも、引数の指定には、セル参照や名前を定義して定義名を使用することができます。

 

使用例 1

下図は基本を理解するための例です。


左図のD9は、左の関東の表から検索したものです。式は、セル範囲形式、配列形式のどちらでも同じ式になります。

D10は、セル範囲形式で2つの検索範囲を指定して、右側の関西の表から検索したものです。
(画像:Win XP&Excel2003)

D9の例のような場合、意識的に検索形式にこだわる必要はありません。INDEX関数は入力時にどちらの形式を使うのか選択するようになっていますが、このような場合どちらでも結果は同じです。数式バーで入力すれば途中から他の形式に自由に変えることができます。
D10は、2つの範囲を(C3:D7,G3:H7)として指定しています。右の関西の表から検索するため、領域番号を「2」で指定しています。

さて、セル範囲形式の戻り値は、セル参照であると説明しました。このことを、D9の戻り値で見ると、戻り値は D5であり、その値が 18と表示されていることになります。また、D10の戻り値は H5であり、その値が28と表示されていることになります。
少し理解し難い解釈かもしれませんが、次の例を見ると理解できるかと思います。

 

使用例 2

下図は、SUM 関数の引数にINDEX関数を入れたものです。合計範囲を取得するのに使っています。


D3からどこまで合計するのかをINDEX関数の戻り値で取得する式になっています。
INDEX関数のセル範囲形式の戻り値が、値を返すものであればこの式は成立ちません。セル参照を返すために使うことができるわけです。
(画像:Win XP&Excel2003)

すなわち、INDEX(C3:D7,4,2)で「D6」を返しているからこそSUM(D3:D6)となり、合計「70」が求められているわけです。
INDEX関数をこの例のように、他の関数の引数として使えば、様々な応用が可能です。いろいろ試してみてください。

 

使用例 3

INDEX関数は、行番号と列番号から検索するため、VLOOKUPやHLOOKUP関数のように表の見出し名から検索することができません。しかし、MATCH関数をネストさせればその弱点も補うことができます。よく使われる方法でもあります。MATCH関数は、中級26で解説する予定ですが、少し紹介しておきます。
下図は、INDEXとMATCH関数でVLOOKUPとHLOOKUPのように求めた例です。

C10は、INDEX関数の行番号(引数)を求めるのにMATCH関数を使っています。VLOOKUP関数のように求めた例です。MATCH関数は、検索範囲にある検索値(データ)から、その範囲で該当する行番号や列番号を求める関数です。ここでは、B3:B6の範囲から、「佐々木」が何行目にあるのかを検索する式になっています。その結果をINDEX関数の行番号(引数)に使っているわけです。この結果、担当者「佐々木」の2月の営業金額が求められています。担当者名を変えれば、それぞれ2月の営業金額を求めることができます。VLOOKUP関数で求める例は、青枠の式です。参考に見てください。

C13は、INDEX関数の列番号(引数)を求めるのにMATCH関数を使ったものです。式は、赤枠のとおりです。HLOOKUP関数のように求めた例です。意味するところは、上記と同じです(説明省略)。HLOOKUP関数で求める式は、緑枠のとおりです。

 

使用例 4

INDEX関数では、先に説明したように、配列形式で行番号や列番号を 0で指定し、配列で入力すると、一発で指定列や行の全データを抽出することができます。


この例は、配列数式で一気に各月のデータを抽出する例です。
式は、INDEX関数にMATCH関数をネストさせ、配列数式で入力したものです。(配列数式:中級14参照)

 

C10〜E10の式は、INDEX関数の行番号をMATCH関数で求め、列番号は 0 としています。
入力は、C10〜E10範囲を選択しておいて、式を入力し確定する時、Ctrl キー Shift キーを押しながら Enter キーを押します。これで配列数式となり、式全体が { } 括弧で囲まれます。これで、営業担当者「佐々木」の1月〜3月の全営業金額が一気に抽出されます。当然、B10の担当者名を変えれば、それぞれの担当者のデータに切り替わります。
この例は、行データの抽出ですが、列データを抽出する場合は、使用例 3のようにMATCH関数で対象列の番号を求め、行番号を 0 として配列数式で入力します。
なお、配列数式を削除するには、入力範囲全体を選択してから削除します。部分的には削除できません。

 

   先頭へ戻る   

中級・特別編トップへ

Excel(エクセル)学習室 HOME


KENZO30 内容の無断転載は、禁止しています