• ベストアンサー

エクセルのINDEX関数で

ワークシート関数でINDEXがありますが、使用方法について教えてください。 C7からE7にリストがある場合、 =INDEX($C$7:$E$7,0) のように、引数に対象外の位置を置いた場合、関数を入れるセルにより答えが変わります。 C列なら1番目、D列なら2番目、E列なら3番目が返ります。それ以外の列に置けばエラー値です。 そもそも0という範囲外の値をいれてもエラー値以外が返ること自体が不思議です。 ご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

それは、ちょっと難しい話になるのですが、 INDEX 関数は、範囲をとる場合と、以下のように配列を取る場合とがあります。 =INDEX(配列,行番号,列番号) =INDEX(範囲,行番号,列番号,領域番号) おっしゃった現象というのは、 EXCELが、その範囲の領域を、「配列」だと解釈したわけです。 =INDEX($C$7:$E$7,0) の代わりに、  =$C$7:$E$7 と置いて、やってみてください。 同じ現象が起こるはずです。 ここに格納されているのは、「C7,D7,E7」 という3つの値です。 つまり、その数式の中では、ワークシート上と同じ構造上で働いてしまっているのです。 私の知っている中では、INDEX関数のみが、その関数の戻り値が、参照値や配列は、そのまま返してしまうということです。ところが、それは =$C$7:$E$7 のように、値だけを返すのではなく、そのセル番地を返しているのです。それは、例えば、 「C7,D7,E7」に、それぞれ、1,2,3 と入っていれば、 =SUM(INDEX($C$7:$E$7,,1):INDEX($C$7:$E$7,,3)) 4 ではなく、6 と解が出ます。 これを利用することで、範囲を検索して合計を取ることが出来ます。 もちろん、上記の式では、行数が1つしかありませんから、省略が出来ます。 私は、とっても不思議な関数だと思います。

merlionXX
質問者

お礼

あら?! =$C$7:$E$7でも同じですねえ。 とっても不思議な関数だというのはわかりました。 ありがとうございます。

その他の回答 (2)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんにちは。 たぶん、列を指定してない場合はIndex関数を入れてある列が範囲の何列目になるか自動的にみてるのではないでしょうか。 C列 =INDEX($C$7:$E$7,0,1) E列 =INDEX($C$7:$E$7,0,2) F列 =INDEX($C$7:$E$7,0,3) ← 範囲外でエラー 但し、これも範囲が一行の場合で2行以上あれば全てエラーになります。 これからが本題です。(^^;;; ●重要●引数0は行列全体の参照を返す● 質問者のデストデータがC7:E7の1行ですので違いが明確に分らなかったのかも知れません。 以下のデータでお試しください。 --------------------------------------------     C    D    E 7   10   20   30 8  100  200  300 任意のセルに =SUM(INDEX(C7:E8,1,0))  =60 =SUM(INDEX(C7:E8,2,0))  =600 =SUM(INDEX(C7:E8,0,1))  =110 =SUM(INDEX(C7:E8,0,2))  =220 =SUM(INDEX(C7:E8,0,3))  =330 =SUM(INDEX(C7:E8,0,0))  =660 ---------------------------------------------- 引数0を使うと行列全体の参照が返されますので、行を計算したい時は列を0、列を計算したい時は行を0、また全体の計の場合は、行列とも0にしてやればいいわけです。 例えば、ある条件により範囲の任意の行の計を求めたり、また同じように任意の列の計を求める必要があるとき等に使うと重宝するのではないでしょうか。   それから、引数の省略と引数0は別物ですのでそのあたりも確かめてみたらどうでしょう。 ------------------------------------------------- 以上です。

merlionXX
質問者

お礼

ためしてみました。 引数0を使うと行列全体の参照が返されるということが良くわかりました。 ありがとうございました。

  • big_fool
  • ベストアンサー率22% (43/193)
回答No.2

>=INDEX($C$7:$E$7,0) では引数が不足しているのではないでしょうか この場合引数を0にすると行全体、列全体は選択されますしたがって =INDEX($C$7:$E$7,0,列番号)が必要になると思いますが・・・ 問題を外していたらすみません

merlionXX
質問者

補足

一列または一行だけを対象とする場合は不要な引数は省略できたはずです。 でも一応、 =INDEX($C$7:$E$7,0,0) としてみましたが同じ現象です。

関連するQ&A

専門家に質問してみよう