目次
このチュートリアルでは、ExcelでINDEXを最も効率的に使用するための数多くの数式例をご紹介します。
Excelの関数の中で、INDEXの威力は過小評価されがちですが、この関数は間違いなくトップ10に入るでしょう。 とにかく賢く、しなやかで、多機能な関数です。
では、ExcelのINDEX関数とは何でしょうか。 基本的には、INDEX式は与えられた配列または範囲内のセル参照を返します。 つまり、ある範囲内の要素の位置がわかっていて(または計算できて)、その要素の実際の値を取得するときにINDEXを使用します。
しかし、INDEX関数の真の可能性を理解すれば、ワークシートのデータの計算、分析、表示方法に決定的な変化をもたらす可能性があります。
Excel INDEX関数 - 構文と基本的な使い方
ExcelのINDEX関数には、配列形式と参照形式の2種類があります。 どちらもMicrosoft Excel 365 - 2003のすべてのバージョンで使用できます。
INDEX配列形式
INDEX 配列形式は、指定した行番号と列番号に基づいて、範囲または配列の特定の要素の値を返します。
INDEX(array, row_num, [column_num])- 勢揃い - は、セルの範囲、名前付き範囲、または表です。
- 行番号 - は値を返す配列の行番号である。 row_num が省略された場合は column_num が必要である。
- 列番号 - column_num が省略された場合、row_num が必要となる。
例えば、式 =index(a1:d6, 4, 3)
は、範囲A1:D6の4行目と3列目の交点にある値で、セルC4にある値を返します。
INDEX式が実際のデータでどのように機能するかを知るには、次の例をご覧ください。
数式に行番号や列番号を入力する代わりに、セル参照を指定することで、より汎用性の高い数式を得ることができます。 =index($b$2:$d$6, g2, g1)
つまり、このINDEX式は、G2(row_num)に指定された商品番号とセルG1(column_num)に入力された週番号の交点にちょうどある商品の個数を返すのです。
ヒント:配列の引数に相対参照(B2:D6)ではなく絶対参照($B$2:$D$6)を使用すると、数式を他のセルにコピーしやすくなります。 また、範囲をテーブルに変換( Ctrl + T )して、テーブル名で参照することも可能です。
INDEX配列形式-注意点
- 配列の引数が 1 つの行または列のみからなる場合、対応する row_num または column_num の引数を指定してもしなくてもよい。
- arrayの引数に複数の行が含まれ、row_numが省略されるか0に設定された場合、INDEX式は列全体の配列を返します。 同様に、arrayが複数の列を含み、column_num引数が省略されるか0に設定された場合、INDEX式は行全体を返します。 この動作を示す式の例を以下に挙げます。
- row_num と column_num 引数は配列内のセルを参照する必要があり、そうでない場合は INDEX 式は #REF!
INDEXリファレンスフォーム
ExcelのINDEX関数の参照形式は、指定した行と列の交点にあるセル参照を返します。
INDEX(reference, row_num, [column_num], [area_num] )- 参照 - は1つまたは複数の範囲である。
複数の範囲を入力する場合は、範囲をカンマで区切り、参照引数を(A1:B5, D1:F5)のように括弧で囲んでください。
reference の各範囲が1つの行または列のみを含む場合、対応する row_num または column_num 引数は省略可能である。
- 行番号 - は、セル参照を返す範囲の行番号で、配列形式と似ています。
- 列番号 - は、セル参照を返すための列番号で、これも配列形式と同様に動作します。
- 地域番号 - オプションのパラメータで、reference 引数からどの範囲を使用するかを指定します。 省略した場合、INDEX 式は reference にリストされた最初の範囲に対する結果を返します。
例えば、式 =index((a2:d3, a5:d7), 3, 4, 2)
は、2番目のエリア(A5:D7)の3行目と4列目の交点にあるセルD7の値を返します。
INDEXリファレンスフォーム - 注意点
- row_num 引数または column_num 引数をゼロ(0)に設定すると、INDEX 式はそれぞれ列全体または行全体の参照を返します。
- row_num と column_num の両方が省略された場合、INDEX 関数は area_num の引数で指定された領域を返す。
- すべての_num引数(row_num、column_num、area_num)は、参照内のセルを参照する必要があります。そうでなければ、INDEX式は#REF!エラーを返します。
これまで説明してきたINDEXの計算式は、どちらも非常にシンプルで、概念を示しているに過ぎません。 実際の計算式は、これよりもはるかに複雑になる可能性が高いので、ExcelでINDEXを最も効率的に使用する方法をいくつか検討してみましょう。
エクセルでINDEX関数を使う方法-計算式例
ExcelのINDEXは、単体ではあまり実用的な使い方はできませんが、MATCHやCOUNTAなどの他の関数と組み合わせることで、非常に強力な数式を作成することができます。
ソースデータ
INDEXの計算式は(最後のものを除いて)すべて、以下のデータを使います。 便宜上、以下のようなテーブルで構成されています。 ソースデータ .
テーブルや名前付き範囲を使用すると、数式が少し長くなりますが、その分、柔軟性や読みやすさが格段に向上します。 ワークシートのINDEX数式を調整するには、1つの名前を変更するだけで、長い数式を完全に補うことができます。
もちろん、通常の範囲を使用することもできます。 この場合、テーブル名 ソースデータ を適切なレンジのリファレンスとする。
1.リストからN番目の項目を取得する
これはINDEX関数の基本的な使い方で、最も簡単な式です。 リストからある項目を取り出すには、次のように書けばよいのです。 =INDEX(range, n)
どこ レンジ はセルの範囲または名前付き範囲であり n は取得したいアイテムの位置です。
Excelの表を扱う場合、マウスを使って列を選択すると、Excelは表の名前と一緒に列の名前を数式で引っ張ってきます。
行と列の交点にあるセルの値を取得する場合も、行番号と列番号の両方を指定する点は同じです。 実は、このような数式は、INDEX配列形式を説明したときにすでに見ていますね。
もう一つ例を挙げると、太陽系で2番目に大きな惑星を見つけるために、表のソートを 直径 列を作成し、以下のINDEX式を使用します。
=INDEX(SourceData、2、3)
アレイ
はテーブル名、または範囲参照です。 ソースデータ この例では行番号(Row_num
が2であるのは、リストの2番目の項目を探しているからで、これは2番目の列番号
が3であるのは 直径 は表中の3列目です。
また、以下のスクリーンショットのように、行番号や列番号の引数にセル参照を使用することで、より汎用性のある数式を作成することができます。
2.行または列のすべての値の取得
INDEX 関数は、単一のセルを取得する以外に、値の配列を 一列 または 列 同様に、行全体を取得する場合は、column_numに空の値か0を渡す。
しかし、INDEXをSUMやAVERAGEなどの他の関数と組み合わせて使えば、素晴らしい結果が得られるでしょう。
例えば、太陽系の惑星の平均気温を計算するには、次のような式を使うことができます。
=AVERAGE(INDEX(SourceData, , 4))
上記の式で、column_num の引数が 4 になっているのは、以下の理由からである。 温度 は、このテーブルの4列目にある。 row_num パラメータは省略されている。
同様に、最低気温と最高気温も調べることができます。
=MAX(INDEX(SourceData、 , 4))
=MIN(INDEX(SourceData,、4))
そして、惑星の総質量を計算します(質量は表の2列目です)。
=SUM(INDEX(SourceData,、2))
実用上、上の式のINDEX関数は不要で、単に =AVERAGE(範囲)
または =SUM(範囲)
で、同じ結果を得ることができます。
実データを扱う場合、この機能はデータ分析に使用する複雑な数式の一部として役立つことがあります。
3.INDEXを他の関数(SUM、AVERAGE、MAX、MIN)と併用する。
これまでの例から、INDEX式は値を返すという印象があるかもしれませんが、実際は 参照 そして、この例はExcelのINDEX関数の本質を表しています。
INDEX式の結果は参照なので、他の関数内で使って ダイナミックレンジ 次の式で、すべてが明らかになります。
という数式があるとします。 =平均値(a1:a10)
のように、セルA1:A10の値の平均を返す。 数式に直接範囲を書く代わりに、A1かA10のどちらか、または両方をINDEX関数に置き換えることができる。
=average(a1 : index(a1:a20,10))
INDEX関数もセルA10への参照を返すので(row_numは10、col_numは省略)、上の数式はどちらも同じ結果になります。 違うのは、AVERAGE / INDEX式の範囲は動的で、INDEXの引数row_numを変更すると、AVERAGE関数が処理する範囲が変わり、数式は異なる結果を返すという点です。
INDEX式のルートは一見複雑に見えるが、次の例のように実用的である。
例1.リストの上位N項目の平均を計算する
例えば、太陽系最大の惑星N個の平均直径を知りたいとします。 そこで、表を 直径 の列を大きいものから順に並べ、以下の平均/指数の計算式を使用します。
=AVERAGE(C5 : INDEX(SourceData[Diameter],B1))である。
例2.指定した2項目の間の項目を合計する
上限の項目と下限の項目を数式で定義したい場合は、INDEX関数を2つ使って、最初と最後の項目を返せばよい。
例えば、次の数式は 直径 の列は、セルB1、B2で指定された2つの項目の間である。
=SUM(INDEX(SourceData[Diameter],B1) : INDEX(SourceData[Diameter],B2))である。
4.動的な範囲とドロップダウンリストを作成するためのINDEX式
よくあることですが、ワークシートにデータを整理し始めると、最終的に何項目になるかわからないことがあります。 今回の惑星の表はそうではないので、完成しているように見えますが、果たして・・・。
とにかく、ある列の項目数が変化している場合、例えばA1からAまで n 例えば、現在10件のデータがある場合、名前付き範囲はA1:A10ですが、新しい項目を追加するとA1:A11に拡大され、気が変わって新しく追加したデータを削除すると、範囲も自動的に調整されるようにしたい場合です。を選択すると、自動的にA1:A10に戻ります。
この方法の主な利点は、ワークブック内のすべての数式を常に更新して、正しい範囲を参照していることを確認する必要がないことです。
ダイナミックレンジを定義する方法の1つに、ExcelのOFFSET関数を使う方法があります。
=OFFSET(Sheet_Name!$A$1, 0, 0, COUNTA(Sheet_Name!$A:$A),1)を使用します。
また、ExcelのINDEXとCOUNTAを併用する方法も考えられます。
=Sheet_Name!$A$1:INDEX(Sheet_Name!$A:$A, COUNTA(Sheet_Name!$A:$A))である。
どちらの式でも、A1 はリストの最初の項目を含むセルで、両方の式で生成されるダイナミックレンジは同じになります。
OFFSET関数が開始点からある行数または列数だけ移動するのに対し、INDEXは特定の行と列の交点にあるセルを見つけます。 COUNTA関数は、どちらの式でも使用され、対象となる列で空でないセルの数を取得します。
この例では、A列に空白でないセルが9個あるので、COUNTAは9を返します。 その結果、INDEXはA列の最後に使われたセルである$A$9を返します(通常INDEXは値を返しますが、この式では参照演算子(:)により参照を返します)。 そして$A$1が開始点なので、式の最終結果は$A$1:$A$9の範囲となります。
次のスクリーンショットは、このようなIndex式を使用して、動的なドロップダウンリストを作成する方法を示しています。
ヒント:動的に更新されるドロップダウンリストを作成する最も簡単な方法は、テーブルに基づいて名前付きリストを作成することです。 この場合、Excelテーブルはそれ自体が動的範囲であるため、複雑な数式は必要ありません。
また、INDEX関数を使用して依存性のあるドロップダウンリストを作成することができますし、次のチュートリアルでは、手順を説明します:Excelでカスケードドロップダウンリストを作る。
5.INDEX/MATCHを用いた強力なVlookups
ExcelのVLOOKUP関数は、左側の列から値を取り出せない、255文字までしか入力できないなど、多くの制約があります。
INDEX / MATCH リエゾンは、多くの点でVLOOKUPより優れています。
- 左のvlookupで問題なし。
- ルックアップ値サイズに制限なし。
- ソートは必要ありません(近似一致のVLOOKUPでは、ルックアップ列を昇順にソートする必要があります)。
- テーブルの列の挿入や削除は、関連するすべての数式を更新することなく、自由に行うことができます。
- また、INDEX/MATCHは、複数のVlookupのようにExcelの処理速度を低下させることはありません。
INDEX / MATCHは次のように使用します。
=INDEX ( から値を返すための列です。 , (MATCH ( ルックアップ値 , 参照する列 , 0))例えば、ソーステーブルを反転して 惑星名 が一番右の列になっても、INDEX / MATCH式は左の列から一致する値を問題なく取得します。
より多くのヒントと計算式の例については、Excel INDEX / MATCHチュートリアルを参照してください。
6.範囲のリストから1つの範囲を取得するためのExcelのINDEX式
ExcelのINDEX関数のもう一つのスマートで強力な使い方は、範囲のリストから一つの範囲を取得する機能です。
例えば、項目数が異なる複数のリストがあるとします。 信じられないかもしれませんが、選択した範囲の値の平均や合計を一つの数式で計算することができます。
まず、各リストに名前を付けた範囲を作成します。 プラネッツD と ムーンサッド この例では
上の画像でレンジの名前の由来が説明できるといいのですが : ) ちなみに ムーン 太陽系には176の衛星があり、木星は現在63個あります。 この例では、最も美しい名前を持つ衛星をランダムに11個選びました。)
余談ですが、INDEXの計算式に戻ります。 仮に プラネッツD はあなたのレンジ1であり ムーンサッド が範囲2、セルB1が範囲番号を入れたところ、以下のIndex式で選択した名前の範囲内の値の平均を計算することができます。
=AVERAGE(INDEX((PlanetsD, MoonsD), , , B1))
ここではINDEX関数のReference形式を使用しており、最後の引数(area_num)の数値が、どの範囲を選択するかを数式に指示していることに注意してください。
下のスクリーンショットでは、area_num(セルB1)に2が設定されているので、計算式では、平均直径が ムーン というのは、範囲 ムーンサッド は参照引数で2番目に来る。
複数のリストを扱っていて、関連する番号を覚えておくのが面倒な場合は、ネストしたIF関数を使用してこれを行うことができます。
=AVERAGE(INDEX((PlanetsD, MoonsD), , , IF(B1="planets", 1, IF(B1="moons", 2))))
IF関数では、ユーザーに数字の代わりにセルB1に入力してもらいたい、シンプルで覚えやすいリスト名を使用します。 数式が正しく動作するためには、B1のテキストはIFのパラメータとまったく同じでなければなりません(大文字小文字は区別しません)。そうしないと、Index数式で#VALUEエラーが発生します。
数式をさらに使いやすくするために、データバリデーションを使って、あらかじめ定義された名前のドロップダウンリストを作成し、スペルミスや誤植を防止することができます。
最後に、INDEX式を完璧にするために、IFERROR関数で囲むと、まだ何も選択されていない場合、ドロップダウンリストの中から項目を選択するようにユーザーに促します。
=IFERROR(AVERAGE(INDEX((PlanetsD, MoonsD), , , IF(B1="planet", 1, IF(B1="moon", 2)))), "Please select the list!)
以上、INDEX関数を使ったExcelの操作についてご紹介しました。