• ベストアンサー

エクセルの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

  • エクセルでのインデックス関数について

    エクセルで任意の二列からセルの中身を引っ張ってきて組み合わせるものを作成しているのですが、うまくいきません。 以下のページを参考に作成しました http://okwave.jp/qa/q5883947.html 添付画像ではB、C列の2行目に結果が出るようにしてE,F列にランダムに取りたい値、G,H列に乱数を表示させています また、B2のセルには =INDEX($E$2:$F$100,MATCH(MIN(G$2:G$100),G$2:G$100,0),COLUMN(B1)) C2のセルには =INDEX($E$2:$F$100,MATCH(MIN(H$2:H$100),H$2:H$100,0),COLUMN(C1)) と入れてあります なぜエラーが出るのかが全くわからなく、困っています ご存知の方、どうかよろしくお願いいたします

  • Excel INDEX関数の使い方

    添付図はA列B列にデータが入っており E1:E5のようなリスト(部署一覧)を用意しておき C列に部署名をとりだそうというものです C2に =INDEX(部署一覧,MATCH(1,FIND(部署一覧,B2),0)) という数式を入力してCtrl+Shift+Enterで配列数式にすれば部署名を取り出せるとありました 1.その通りにやってなるほど部署名はとりだせたのですが MATCH関数の引数に”1”とあるのがその意味が分かりません どなたか解説をお願いできないでしょうか 2.また部署名の前に別の文字列 例えば”関東支社”のような文字列がある場合 部署名だけを取り出すことはできないものでしょうか よろしくお願いします

  • エクセル 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)となりエラーになるとおもいますが・・ なぜ下の場合だとセル番号が返されるのですか?

  • Excelの関数について教えてください。

    前にも同じような質問をしたのですが、よく理解できなかったので、もう一度質問させていただきます。 まず、A列に1~10まで入力します。次にB列に11~20まで入力します。同様にC列に21~30まで入力します。そして、セルE3に2、セルE5に12に入力します。 それから、セルE3の値をA列から検索し、セルE5の値をB列から検索し、その重なったB行のC列の値を求めたいのです。ここでは22になります。 自分なりに考えてみましたが、 =IF(MATCH(F3,A:A)=MATCH(F5,B:B),INDEX(A2:C10,MATCH(F3,A:A)=MATCH(F5,B:B),C:C,"")) ではエラーがでてしまいます。 いくら考えてもわかりません。 どなたか教えてください。よろしくお願いします。

  • ExcelでのINDIRECT関数の使い方について

    Excelの関数についてお伺いしたいと思います。現在、図のような表があり、A2, C2, E2を合計したいと思っております。条件として; 1) 列を頻繁に挿入するものの、常にA2, C2, E2を合計したい(セルがずれてしまっては困る) 2) B列やD列には他の数値が入るため(列が連続しない)、A2:E2ということができない これを解決するためにA8に"A2,C2,E2"と入力し、A9に=SUM(INDIRECT(A8)と記入したのですが、#REF!というエラーになってしまいます。この場合、どのようにIndirect関数を使えばよいのでしょうか。またそもそもIndirect以外の有効な関数を使うべきなのでしょうか。教えていただきたく、よろしくお願い致します。

  • エクセルのIF関数とVLOOKUP関数について教えてください。

      A B C 1 A1 B1 C1 2 A2 B2 C2 ・ ・ ・ 上記のような表があり、セルX、Yに入力した値が2つの条件に合致した場合、セルZにC列の値を返すような数式を作っています。 たとえば、セルXの値がA1より小さく、かつ、セルYの値がB1より小さい場合にはセルZにC1の値を表示する、という数式を作りたいのです。 (ちなみにAn、Bn、Cnにはそれぞれ数字が入ります) =IF(AND(X<=A1,Y<=B1),C1,IF(AND(X<=A2,Y<=B2),C2,・・・ AND関数を利用してこのように数式を入れると、途中まではうまくいくのですが、引数が多いため途中からエラーが出てしまいます。 (引数の数は10個以上あります) IF関数とVLOOKUPを組み合わせればいいというところまではわかるのですが、どのように条件設定をすればいいのかがわかりません。 エクセル初心者で恐縮ですが、どなたか詳しい方いらっしゃいましたらご回答よろしくお願いいたします。

  • Excelの関数を教えてください。

    Excelの関数で例えば シートAのB行の中の値とシートBのセルA1の値、シートAのC行の中の値とシートBのセルB1の値が一致した行のF列の値を返す関数を考えているのですが、いろいろ試してもエラーになってしまいます。(B列とC列の一致する行は1つしかありません) これができないと家に帰れません;; どなたか、教えてください! よろしくお願いします。

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • excel index関数?changeイベント??

    作者不明のため、教えていただきたいのですがお願いします。 シートが4つほどあり、index関数でデータを5つめのシートで集計しています。 集計シート例:  A  B C D E F G H ・・・ 1   【ここにドロップダウンのボックス?があります▼】 2   あ い う え ・・・ 3●● 1 1 2 2 ・・・ 4△△ 2 2 3 2 ・・・ 5□□ 1 1 1 1 ・・・ ・ ・ ●●シート例:  A  B C D E F G H ・・・ 1   あ い う え ・・・ 2AA 1 1 1 1 ・・・ 3BB 0 1 1 1 ・・・ 4CC 1 2 2 2 ・・・ あいうえ項目が各シートにあり、集計シートでドロップダウンリスト(リストの下のセルB1には数字の割り当てがあります)からAAを選ぶと各シートからデータを引っ張ってきて(index関数がB1の数字を読み取ります)、各シートのデータが集計されます。 BBやCCと選んでも簡単に集計してくれるので重宝していたのですが、 これを応用しようと新規ブックで似たものを作り、 index関数(例:=IF((INDEX(●●!$B$2:$H$10,$B$1,1))="","*",INDEX(●●!$B$2:$H$10,$B$1,1))) ※列番号も右セル(あ→い→う・・・)にいくごとに増えていきます。 もコピーしましたが「#REF!」となって集計してくれません。 元のブックを開いてドロップリストを右クリック→マクロの登録をみるとマクロ「ドロップ1_change」という登録が見えますが、マクロを調べても表示は Sub ドロップ1_Change() End Sub しかでてきません。 なにも入っていないのになぜ動くのでしょうか? また他のブックではなぜ「#REF!」となるのでしょうか。 質問もどうしていいかわからないためわかりにくいかと思いますが、教えてください。この説明で不足している場合はご連絡下さい<(_ _;)>

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

    エクセルのMATCH関数についての質問ですが、どうしてもエラーが表示され悩んでいます。どうか教えていただければと思います。 たとえば下記のような場合なぜかエラーが発生してしまいますがどうしてでしょうか?      A列   B列   C列   D列   E列   F列 1行              A     B    A+B  戻り値 2行    2.0        1.0    1.2   2.2   2 3行    2.2        0.9    1.1   2.0   1 4行    2.4        1.1    1.3   2.4   #N/A 5行    2.6        1.0    1.4   2.4   3 使用している関数は、 E列2行 =C2+D2  F列2行 =MATCH(E2,$A2:$A5,0) E列3行 =C3+D3  F列3行 =MATCH(E3,$A2:$A5,0) E列4行 =C4+D4  F列4行 =MATCH(E4,$A2:$A5,0) E列5行 =C5+D5  F列5行 =MATCH(E5,$A2:$A5,0) です。ここでどうしても、F列4行にエラー値(#N/A)が発生してしまいます。どうしてでしょうか? E列4行とE列5行は同じ値にもかかわらず戻り値が違うのはどうしてでしょうか? また、不思議なことにE列4行に手入力で2.4の値を入力した場合は戻り値は3となり、正しい値を表示します。どうしてでしょうか? 以上、よろしくお願いします。

専門家に質問してみよう