- ベストアンサー
Excel Index関数の不具合?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
昔のエクセルから共通の,正常な動作です。 INDEX関数のヘルプ(の内の配列形式)を見てみると -----引用------------ 行番号または列番号を 0 に設定すると、それぞれ列全体または行全体の値の配列が返されます。 -----引用ここまで---- と解説が書いてあります。ゼロを指定すると,「ゼロ番目」じゃなく「E9:E12」という配列(配列値では無い)が計算されます。 ちなみに。 配列値じゃない配列って何かってお話ですが,試しにH3セルにINDEX関数じゃ無く =E$9:E$12 とこの通りに記入して,ただEnterして入力します。(Ctrl+Shift+Enterで配列入力するのではありません) H3を下向けにドラッグコピーすると,ご質問のINDEX関数(ゼロ指定)と同じ計算結果が現れます。 つまり =INDEX(E$9:E$12,0) は =E$9:E$12 という配列を計算しています。 配列(ふつーにEnterで入力された配列数式)は,「参照元と同じ行で,その行の値を1つ返す」という特殊な動作をします。 行範囲じゃない行にこの配列が入力されると,該当(同じ行)が無いので#VALUEエラーになります。 また横方向の配列は,同じ列でその列の値を1つ返します。 たとえば A10セルに =$C5:$G5*2 とか =$C5:$G5+$C7:$G7 と記入してただEnterで入力,右向けにコピーすると,C列でC列の値を,D列でD列の値をそれぞれ使って計算してくれます。
その他の回答 (2)
- bunjii
- ベストアンサー率43% (3589/8249)
>バグのようにも思うのですが、理由分かる方いらっしゃらないでしょうか。 Excelを作成したプログラマーでないと理由が分からないでしょう。 しかし、INDEX関数の行番号または列番号を0または無指定の場合は配列値が返される仕掛けになっていますので他の関数の前処理に使うには便利な手法です。 例えば最小値より大きく最大値より小さい値のセルを対象に大きい値から順に抽出する場合は次のような数式で処理できます。 =IF(COUNTIFS(A$9:A$28,">100",A$9:A$28,"<1000")>=ROWS($1:1),LARGE(INDEX((A$9:A$28>100)*(A9:A28<1000)*A$9:A$28,0),ROWS($1:1)),"")
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 0を指定すると配列を返す数式となるのでは? G3:G20を選択して、数式バーの=INDEX($E$9:$E$12,0)の後ろをクリックして Ctrl+Shift+Enter すると配列が返り、G3:G6にE9:E12の値がセットされ、その下は #N/Aになると思います。