• 締切済み

エクセル index関数で

エクセルindex関数で疑問を持ったのですが a1:a4が 1,2,3,4の値が入っていたとき =index(a1:a4,3,1)とやるとa3の値3が入ります しかし =sum(a1:index(a1:a4,3,1))とやると =sum(a1:a3)と計算されますがなぜでしょうか? =sum(a1:3)となりエラーになるとおもいますが・・ なぜ下の場合だとセル番号が返されるのですか?

みんなの回答

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

#4の補足です。 引数に配列を取るというのは、それが使えるように設計されているからですが、その時によって、Range型と入れ替わったりはしません。また、配列の確定によって、数式の引数が変化するわけではありません。 ワークシート上で、配列というのは、ひとつのセルの中に、複数の値を持っているものを指します。たとえば、{1,2,3,4}とすることで、配列の値を持つことになります。こういう配列を1次元といいます。 ちなみに、 http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyu9_9_7.htm の◆使用例4は、 =INDEX(C3:E6,MATCH(B10,B3:B6,0),) このようにすれば、配列の確定は必要あれません。また、私の知る範囲ではこれは配列数式にする必要はありません。そのまま、右にフィルでコピーすればよいです。確かに、ひとつの数式に複数の値を持っているので、配列にはなっていますが、引数自体が配列にはなっていません。これでは、数式の正しい説明にはなっていないと思います。 注:[配列の確定]--Ctrl キーと Shift キーを押しながら Enter キーを押す どんな数式も、配列数式に換えることは可能ですが、意味がないものもあります。 INDEX関数の配列型というのは、上記のような、{1,2,3,4}の1次元配列を、セル上で取り扱えるようにさせることです。通常は、配列は、1次元なら、(1),2次元なら(1,1)しか、セルで表示させることができません。 例: その月の日曜日は何個あるか、というような数式ですと、このようになります。 A1:2008/12/1 A2:2008/12/31 =SUM((INDEX((WEEKDAY(A1-1+ROW(INDIRECT("A1:A"&A2-A1)))=1)*1,,))) WEEKDAY の次の A1-1 というのは、そのままですと、1日が含まれないので、1日引いて、1からその月の日数を足しています。INDEX関数は、1次元の配列を活性化し、SUM関数で取り扱えるようにしています。

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 プログラミングをする人ならすぐに分かりますが、INDEX 関数の戻り値は、Range型だからです。一見、値を返しているように見えるのですが、そうではありません。 なぜ、そういう設計にしたのかは理由は分かりませんが、マトリックス型の範囲の表(Rangeオブジェクト)を切り取って、それを縦横のインデックスで指定して返しているようです。おそらくは、数式の利用のために、Range型という含みを残しておいたと思います。 =SUM(INDEX(A1:A4,1,1):INDEX(A1:A4,3,1)) とすれば、 =SUM(A1:A3) と同じ結果になります。 なお、ここでは、Excelで言う、配列(Array)は関係がありません。配列は、メモリに値しか格納していませんので、Range型を返すことはできません。Excel 2000では、SUM関数の配列要素数は、5461 までしかありませんでしが、その後のバージョンで、要素数は解除されても、実際には限界数を超えると、スワップメモリを使ったりしています。 端的には、配列には、A:A という範囲指定ができなかったりします。 配列数式型の場合 =INDEX(ROW(A1:A10),5) この場合は、値しか格納していません。 したがって、 × =SUM(A1:INDEX(ROW(A1:A10),5)) #VALUE!のエラーが返されます。 また、配列数式では、 =SUM(A1:INDEX(A:A,4,1)) このような数式を作ることはできません。配列を格納した数式から値をとりだす時に、INDEXの配列型(多くは、一次元配列)を使いますが、それ以外には、普段は使われません。 =SUM(INDEX(A:A,,1)) こうすると、A列を全体を表すことになります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

index関数には2つの書式があります。値「3」が返ってくるはずだと 言うexelnさんの疑問は配列を扱う書式1で、セル参照A3が返るんだ と答えたgyouda1114さんの回答は範囲を検索する書式2ですね。 今回の式の場合には書式1と考えると質問どおり破綻するので、書式 2と解釈してセル参照を返していると扱います。そこらの解釈が適当 に臨機応変にやられちゃうのが、index関数の扱いを面倒くさくして いる元凶じゃないかと思ってます。私は配列でしか使いません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

ヘルプより抜粋 指定したセルまたはセルの配列の値が返されます。 具体的にはgyouda1114さんの回答のリンク先をどうぞ 配列が1列なので、列番号を省略しても同じ結果になります index(a1:a4,3)) 配列が1行の場合でも行番号を省略可能です index(a1:d1,3)) さらに配列の1列目を合計 =SUM(INDEX(A1:D3,,1))

全文を見る
すると、全ての回答が全文表示されます。
  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.1

お早うございます。 INDEX関数は、表やセル範囲から行と列で位置を指定して、セル参照を求めたり、該当位置のデータを求める関数です。 INDEX(範囲,行番号,列番号)としてつかいます。 したがって =INDEX(A1:A4,3,1)は、A1からA4の範囲の1列目(A列)の3行目すなわちA3セルを指定しているのです。 故に =sum(a1:index(a1:a4,3,1))は=sum(a1:a3)と同じです。 検索/行列関数(INDEX関数) http://www.kenzo30.com/ex_kisotyu/ex_ks_tyukyu9_9_7.htm

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル CONCATENATE関数

    エクセル2003のCONCATENATE関数で作ったテキストを関数化(数式化)できないでしょうか。 たとえば、C3のセルに下のCONCATENATE関数を入れ =CONCATENATE(D3,E3,F3) 文字列"=sum(A1:A10)" を表示させ、 その後CONCATENATE関数をのぞき、=sum(A1:A10)を計算させたいのです。 CONCATENATE関数で合成されたセルをコピーし、形式を選択して貼り付けから値だけを貼り付けても、なぜかうまくいきません。 =sum(A1:A10)とC3に表示され、計算は実行されません。

  • EXCEL 関数について

    非常に困っています。 EXCEL関数で『対象セルの一つ下のセルの値を返す』という方法を探しています。 例えばA2が対象セルの場合、一つ下のA3の値を返したいのですが、そのまま直接A3の値を返すのではなく、敢えて『A2の一つ下のセルの値を返す』という方法で行いたいのです。 質問に不十分があれば申し訳ございません。宜しくお願いします。

  • エクセルの関数について

    エクセルで、合計は、SUM関数を使いますが、数値がゼロのときに、 ゼロを表示しないようにするため、IF関数で、IF(A1=0,"",A1) と表示すると、今度は、その数値を使い足し算をしたとき、 エラーになってしまいます。(ゼロのときの値が""のため) 1.足し算、引き算の結果がゼロのとき、何も表示したくない 2.そのセルをさらに足し算、引き算したときにエラーにならない 方法を教えてください。

  • エクセル関数について

    エクセル関数について質問です。 セルA1、セルA3、セルA5のいずれかに入力された値をセルB1に返すことは関数で可能でしょうか? 可能であれば、IFERROR関数と組み合わせ、エラー値が返らないようしたいです。 エクセルバージョンは2007です。 ご教示ください。よろしくお願いします。

  • Excelの関数を簡素化する方法(質問1・2)

    Excelの関数で質問があります。できるだけ一つのセルに計算をまとめたいのですが、 ■質問1:データの最も優勢な値をカウントする計算 例えば、下のようなデータがあったとします。(a~cはデータ項目。1~5はデータ番号。)   a  b   c 1 50 100  84 2 37 11   56 3 64 39   61 4 87 47   70 5 73 71   44 同じデータ番号の系列で、a~cの中で最も高い数値をカウント「1」とします。それ以外は「0」とします。 例えば、aの1・bの1・cの1、の中の最高値という具合です。 そして、最終的に「同じデータ項目の最高値のカウント数/データ番号のトータルカウント数」の値を計算します。 例えばaの場合、「同じデータ項目の最高値のカウント数」は、データ番号の3、4、5が最高値なので「3」となり、「データ番号のトータルカウント数」はデータ番号が5個あるので「5」となり、「3/5」となります。 このような計算を一つのセルにする関数はあるでしょうか? 今は、最高値のカウント数を計算するセル、 「=IF(MAX(a1:c1)=a1,1,0)」 「同じデータ項目の最高値のカウント数/データ番号のトータルカウント数」を計算するセル、 「=SUM(a1:a5)/COUNT(a1:a5)」 に分かれています。(ここでいう「a1」「c1」「a5」とは例にあるデータ項目とデータ番号のことです。) ■質問2:あるデータ区間に当てはまるデータをカウントする計算 例えば、例のa1を30~70に当てはまった場合、「1」とし、それ以外を「0」とする計算なんですが、今は 「=IF(30<=a1,IF(a1<=70,1,0),0)」 という関数を使っていますが、これ以上簡単にできませんか? 回答よろしくお願いします。

  • エクセルのINDEX関数で

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

  • Excel VBAの SUM関数について質問です。

    Excel VBAの SUM関数について質問です。 SUM関数で合計の値を出す場合、 SUM(A1:A5)という関数で合計を出しますが SUM(sheet2.cells(1,1),sheet2.cells(5,1)) と言ったようにCellsで指定はできないのでしょうか? 複数の列にVBAのプログラムで合計の値を出したいのです。 WorksheetFunction.SumではSUM(A1:A5)のように 自動計算にならないと思うので・・・

  • エクセルで

    エクセルについてお伺いします。例えばセルA1に10%、A2に20%のパーセンテージで入力された値は合計は出せないのでしょうか。SUM関数で出すとエラーが出てしまいます。それと、数式を入力したセルの数値の値の合計も出ないのでしょうか。例えばあるセルに=A1+B1,もう一方のセルにA2+B2と入力されていてそれぞれ数値が5と4とします。合計9を出したいのですが、数式のためSUM関数では合計できません。何か方法はありますか。

  • Excelの関数式を印刷する方法

    Excelのセル内に入力した関数式、たとえば、「=AVERAGE(A1:A5)」やS「=SUM(A1:A5)」など・・をすべて印刷する方法はあるのでしょうか? 計算された値ではなくて、式を印刷したいのです。

  • エクセル IF関数が入った条件付き書式について

    エクセルにおいて、セルA1、B1、C1があるとします。A1、B1には数値が何も入力されていない状態で、C1に計算式「=SUM(A1)/B1」が入っているとします。このままでは、C1は、「#DIV/0!」と表示されます。 この表示を消すために、C1にIF、ISERROR関数を使い、「=IF(ISERROR(SUM(A1)/B1),"",SUM(A1)/B1)」の計算式を入力します。 このままでもいいのですが、C1の値が「10以上」になった時に、C1のセルに色を付けたいのです。 書式→条件付き書式→セルの値が→次の値以上→10 にすると、セルに何も値が入っていない(空白)状態で色だけが付いてしまいます。 色々調べると、IF関数の""の空白が文字列のため、数値より大きいとみなされている事が原因っていうことは、分かりましたが、色々試してみても出来ません。何かいい方法はございますでしょうか? ご教授お願いします。

専門家に質問してみよう