【エクセル中級者向け】VLOOKUP関数以上の検索性能!INDEX関数の使い方
AさんAさん

VLOOKUP関数にだいぶ慣れてきました!
ただ、検索を行なう表の右端をキーに検索をかけることができないなど弱点もあるので、もっと良い関数はないですかね??

森田森田

確かにVLOOKUP関数も万能ではありませんね。
VLOOKUP関数に慣れてきたなら、もっと便利なINDEX関数がおすすめです!
INDEX関数は指定した行と列の交点となるセルの値を取得してくれる関数ですよ。
では、具体的に解説していきましょう。

おすすめな人

本題に入る前に、この記事がおすすめな人を挙げてみます。

  • VLOOKUP関数を使う頻度が高い人
  • エクセルを使う頻度が高い人
  • 事務職の人、目指している人

ちなみに、最低限「VLOOKUP関数の基礎」を把握している想定での記事となります。
※自信がない方はこちらの記事で学んでください。
【初心者向け】データ転記の作業時間を9割カット!VLOOKUP関数の使い方

INDEX関数とは?

読み方はインデックス関数と読みます。

関数名の”INDEX”は「索引」を意味する英単語から来ていると推測されます。(Microsoftの公式見解なし)

数式ライブラリ上のカテゴリは「検索/行列」です。

INDEX関数は、「索引」の意味どおり、任意の表に対し、指定した行と列の交点に該当するセルを検索し、そのセルの値を取得します。

一言でいえば、「縦と横の両方でデータ検索&転記作業をしてくれる関数」といえます。

INDEX関数は「中級」レベル!

INDEX関数は、便利さの割には「知る人ぞ知る」という関数なので、知っている時点で中級以上のレベルだと言えますね。

ちなみに、エクセルのもっとも有名な資格であるMOS(マイクロソフトオフィススペシャリスト)は一般レベルの「スタンダード」と上級レベルの「エキスパート」の2つの難易度がありますが、INDEX関数はどちらにも出題されておりません。

しかし、INDEX関数は、VLOOKUP関数であれば、表の方を加工する必要がある場合でも、表は変えずにそのまま検索できてしまうほど柔軟性が高く、検索系の関数ではNo.1のポテンシャルを秘めた関数ですね。

私も実務では使いまくっている関数のひとつです。

INDEX関数の活躍シーンは基本的にVLOOKUP関数と同じ!

では、実際にこのINDEX関数が活躍するシーンですが、基本的にはVLOOKUP関数と同じだと認識しておけばOKです。

つまり、データの転記作業ですね。

VLOOKUP関数と同じように、何かしらの表から該当する条件に応じたデータを検索&取得する、といったイメージなので問題ないですね。

ちなみに、INDEX関数がVLOOKUP関数よりも便利だと断言するのは、以下のようなケースです。

上記はシンプルな2列の表ですが、行いたいことは以下のとおりです。

  • 左側の列(1列目)は関数の戻り値(返り値)にしたいデータ群
  • 右側の列(2列目)は検索するためのキーワードがあるデータ群

このような場合、VLOOKUP関数は表を加工しない限りは使用できませんが、INDEX関数ならば、この並びの表のままでも問題ありません!

このように、表の構成に左右されずに検索をかけることが可能なところがINDEX関数の強みです。

中級者以上は絶対に覚えた方が良いので、この記事をとおして、ぜひ身につけることをおすすめしますよ!

INDEX関数の構文を理解しよう!

INDEX関数を記述する際の構文はややこしいことに2種類あります。

それは「セル範囲形式」「配列形式」です。

違いを覚えて使い分ける必要性はあまりないので、よく使う「セル範囲形式」について解説していきますね。(配列形式は機会があれば別記事で解説します)

=INDEX(参照,行番号,[列番号] ,[領域番号])

※引数名を[]で囲っているものは省略可能

それぞれ、カッコ内の各引数は次のとおりです。

引数(セル範囲形式)

引数名 必須 データ型 説明
参照 セル範囲 参照したいセル範囲を指定します。

複数のセル範囲を選択したい場合は、「(A1:B4,D1:E4,G1:H4)」のように範囲を"()"で囲み、複数選択を構成するそれぞれの領域を半角の”,”[カンマ]で区切ります。

行番号 数値 引数「参照」で指定したセル範囲の上から何番目の行を参照するかを指定します。
※引数「参照」が1列の場合は省略可能です。

※引数「参照」で指定したセル範囲の行数を超えた値を指定すると”#REF!”のエラーが発生します。

列番号   数値 引数「参照」で指定したセル範囲の左から何番目の列を参照するかを指定します。
※引数「参照」が1行の場合は省略可能です。

※引数「参照」で指定したセル範囲の列数を超えた値を指定すると”#REF!”のエラーが発生します。

領域番号   数値 引数「参照」で複数のセル範囲を選択した場合に活用する引数です。

その場合、引数「参照」に指定したセル範囲が左から順番に領域番号が”1”、2 番目の領域は”2”というように続きます。

たとえば、引数「参照」が「 (A1:B4,D1:E4,G1:H4)」の場合の領域番号”1”は” A1:B4”となります。

※この引数を省略すると、”1”として扱われます。

※引数「参照」で複数のセル範囲を選択する場合はすべて同じシート上にないと、”#VALUE!”のエラーが発生します。

なお、「データ型」とは、その引数に指定できるデータの形式を指します。

指定外のデータ形式を指定すると、関数の戻り値(返り値)はエラーとなりますのでご注意ください。

この「データ型」を把握していると、不要なエラーを回避したり、他の関数と組み合わせる際に役立ちますよ。

ちなみに、INDEX関数自体の戻り値(返り値)は引数「参照」内にあるデータの形式に準じますので、文字列や数値、日付/時刻など、どのデータ型になるかはケースバイケースとなります。

引数「行番号」・「列番号」に”0”を指定した場合

こちらは少々ややこしいため、「INDEX関数のよく使うところだけ知りたい!」という人は飛ばしてください(笑)

Microsoftの公式HPを確認すると、引数「行番号」・「列番号」に”0”を指定した場合にどうなるかについて、以下のような解説となっています。

行番号または列番号に 0 (ゼロ) を指定すると、列または行全体の参照がそれぞれ返されます。

正直、「列または行全体の参照がそれぞれ返される」の意味がかなり分かりにくいため、補足しますね。

たとえば、引数「行番号」に”0”を指定する場合、INDEX関数を挿入するセルと同じ行の値を検索できるということです。

ただし、INDEX関数の引数「参照」で指定したセル範囲と同じ行範囲でないとINDEX関数の戻り値は”#VALUE!”のエラーとなりますので、ご注意ください。

つまり、今回の例でいうと、引数「参照」で指定したセル範囲が「$A$3:$B$7」なので、3~7行のいずれかのセルにINDEX関数を挿入しなくてはならないということですね。

なお、引数「列番号」の場合は行と列を入れ替えるだけですよ。

引数「領域番号」を指定する場合

こちらは、VLOOKUP関数であればINDIRECT関数と「名前の定義」機能がないと実現できなかった、条件に応じて検索する対象の表を切り替えることができます。

INDEX関数1つで実現できるのでお手軽ですね。

たとえば、次のサンプルでは、H1セルの値に応じて検索対象の範囲が切り替わっていますね。

切り替えるためには、引数「参照」は「($A$3:$B$7,$D$3:$E$7)」のように2つの表(領域)を指定していますね。

引数「領域番号」は先述のとおりH1セルを参照し、上記の表(領域)を切り替えることができるようにしています。

  • 領域”1”:「$A$3:$B$7」の表
  • 領域”2”:「$D$3:$E$7」の表

なお、この複数領域はすべて同じシート内に設置しないとエラー(”#VALUE!”)になりますのでご注意を!

ちなみに、領域”1”だけの検索で良ければ、INDEX関数の数式「=INDEX($A$3:$B$7,$I$2,2)」とだいぶシンプルになります。

引数「参照」の"()"や”,”[カンマ] が不要となり、引数「領域番号」も不要になりますね。

サンプルファイルで練習しよう!

では、実際にINDEX関数を使ってみましょう!

サンプルの条件

今回の題材は次のとおりです。

「宿泊料金」というシートに12/10~12/14の宿泊料金がサイト1・サイト2の2つのサイト分がまとまっています。

このシートのH1セルで”サイト1”、H2セルで”12/10”を指定している場合の宿泊料金がいくらになるかをINDEX関数で検索するとします。

ちなみに、I2セルには、H2セルの日付に該当する行数をMATCH関数で表示するようにしています。

上記を踏まえてH3セルにINDEX関数を設定してみましょう!

実際に操作しよう!

可能であれば、以下のサンプルファイルをダウンロードして実際に操作してみてください。

サンプルファイル_INDEX関数
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)

ファイルを開いたら次の手順を実施してください。

  1. 「宿泊料金」シートを選択
  2. H3セルへ「=INDEX(($A$3:$B$7,$D$3:$E$7),$I$2,2,$H$1)」を入力
    ※赤字の部分をコピーして貼り付けてください。

上記手順を行った結果は「宿泊料金 (関数あり)」シートにありますので、このシートの内容と実際に操作した結果が同じなっていればOKです。

H1セルの対象サイトや、H2セルの日付を変更してみて、INDEX関数の戻り値がどう変わるかも確認してみましょう!

INDEX関数の仕組みを理解しよう!

なんとなくINDEX関数の操作感はイメージできましたか?

ここで、INDEX関数が裏側でどういう動作をしているか、きちんと理解しておきましょう。

この動作のイメージをしっかりと把握していると、自分の想定と異なる戻り値(返り値)が出た場合などに、原因がどこかあたりをつけることができますよ。

では、全5ステップになりますので順番に見ていきましょう。

【STEP1】引数「参照」で指定されたセル範囲を把握する

エクセル側で数式中の引数「参照」に指定したセル範囲を把握します。

今回の例では「($A$3:$B$7,$D$3:$E$7)」ですね。

【STEP2】STEP1が複数のセル範囲の場合、引数「領域番号」で検索する範囲を特定する

今回の例のように、引数「参照」に指定したセル範囲が複数の場合、引数「領域番号」によって検索対象のセル範囲を特定します。

今回の引数「領域番号」は”1”の値のH1セルを参照しているため、左から1つ目のセル範囲「$A$3:$B$7」が検索対象となりますね。

【STEP3】STEP2のセル範囲から引数「行番号」で指定した数に該当する行を特定する

エクセル側で、STEP2で特定したセル範囲から、引数「行番号」の指定した数に該当する行を特定します。

ちなみに、行は上から下方向にカウントします。

今回の引数「行番号」は”1”の値のI2セルを参照しているため、セル範囲「$A$3:$B$7」の1番上の行である3行目が該当しますね。

【STEP4】STEP2のセル範囲から引数「列番号」で指定した数に該当する列を特定する

エクセル側で、STEP2で特定したセル範囲から、引数「列番号」の指定した数に該当する列を特定します。

ちなみに、列は左から右方向にカウントします。

今回の引数「列番号」は”2”のため、セル範囲「$A$3:$B$7」の左から2番目の列となるB列が該当しますね。

【STEP5】STEP3とSTEP4の交点となるセルの値をINDEX関数の戻り値(返り値)として返す

最終的にエクセル側でSTEP3とSTEP4の交点となるセルの値をINDEX関数の戻り値(返り値)として返します。

今回はSTEP3で特定した「3行目」とSTEP4で特定した「B列」の交点となる「B3セル」の値”10,000”が、INDEX関数が挿入されたH3セルへ返りましたね。

ちなみに、STEP1~4のいずれかでINDEX関数のルールから外れている場合は、戻り値がエラーとなります。

こんな複雑な動きを一瞬で関数の数だけ行っているエクセルはすごいですね。

INDEX関数をもっと便利に使うならMATCH関数と組み合わせよう!

単独でも十分便利なINDEX関数ですが、さらに便利にするならMATCH関数を組み合わせると良いですね。

具体的には、INDEX関数の引数「行番号」「列番号」のいずれか、もしくは両方にMATCH関数を活用すると、特定のキーワードに合致した行・列番号を検索してくれますよ!

上記のサンプルファイルの数式をMATCH関数と組み合わせてみたものが、以下の内容です。

I2セルに挿入していたMATCH関数がINDEX関数に組み込まれたため、1つの数式でH2セルの日付に応じて該当する宿泊料金を検索できるようになりました。

ぜひ、INDEX関数と併せてMATCH関数も習得しましょうね!

なお、MATCH関数の詳細はこちらをご参照ください。

さいごに

INDEX関数はまさにエクセル関数の中上級者が愛用する関数のひとつです。

対象外となる表の制限は少ないですし、関数自体も多機能なため、応用範囲が本当に広いです。

そこが逆に敷居を高くしているかもですが(笑)

ただし、VLOOKUP関数が利用できないシーンでのみピンポイントで代用するなど、標準的な使い方だけであれば習得難易度はそこまで高くないと思います。

ぜひ、この機会に習得してみてはいかがでしょうか?

ご参考になれば幸いですm(_ _)m

森田森田

本当にこれは便利な関数です!
使えるようになって感動したエクセル関数では、VLOOKUP関数についで2番目くらいですね(笑)
VLOOKUP関数ユーザーこそ次に覚えてほしい関数です。