• ベストアンサー

Excel Index関数の不具合?

Excel 2013なのですが、INDEX関数で変な現象が起こる理由が分かりません。 例えば、E9:E12のセル範囲に何らかのデータを入力した上で、別のセルで =INDEX($E$9:$E$12,0) という数式を作ると、普通は参照先に0行目は無いのでエラー(#VALUE!)が出るのですが(出る様にしたい)、数式を入れるセルがシートの9~12行目にある時だけ、9行目だとE9セルの内容が、10行目だとE10セルの内容が出力されます。数式を違うシートに入力しても同じ現象が起こります。バグのようにも思うのですが、理由分かる方いらっしゃらないでしょうか。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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/8248)
回答No.2

>バグのようにも思うのですが、理由分かる方いらっしゃらないでしょうか。 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)
回答No.1

こんにちは 0を指定すると配列を返す数式となるのでは? G3:G20を選択して、数式バーの=INDEX($E$9:$E$12,0)の後ろをクリックして Ctrl+Shift+Enter すると配列が返り、G3:G6にE9:E12の値がセットされ、その下は #N/Aになると思います。

関連するQ&A

  • INDEX関数を組み合わせた数式で、入力の無いときに「#VALUE!」

    INDEX関数を組み合わせた数式で、入力の無いときに「#VALUE!」を表示させたくない。 度々お世話になっております。 こちらで教えて頂いた数式で、シートの一部に画像のようなものを作ってみました。 Y14とY15に入れる数字によって、組み合わされた文字がAI14に文章になって表示される仕組みです。 AI14に入れている数式は 「=INDEX($Y$3:$AH$3,1,Y14)&"で"&INDEX($Y$11:$AB$11,1,Y15)」となっています。 以下右方向に、AJ15,AK15,AL15・・・と、それに対応した数式をセル6個分に入れる予定です。 質問させて頂きたいのは、 入力がないときに「#VALUE!」を表示させたくないのです。 「=IF(○○○="","",INDEX(○○○・・・・」といった数式で解決できると思ったのですが、 INDEX関数が2つ組み合わされていますので、どのようにしたらよいかわかりません。 ただ、AI14~に表示される結果は、最終的に別シートのセルで参照されて、そちらのシートでプリントアウトさせますので、 そちらで「#VALUE!」が表示されないようにできるなら、それでもかまいません。 よろしくお願いいたします。

  • ExcelのINDEX関数がうまく参照出来なくなってしまいました

    Excel2000を使用しています。 引き継いだファイルの関数がうまく表示できなくて困っています。 元に戻したいのですが、どのようにしたらもとにもどせるでしょうか? sheet1で、sheet2の住所録を参照して、該当番号に合う住所が表示されています。 Sheet1の数式が入る場所は「=INDEX(住所,A1)」となっています。 A1には、1~300の数字が入っており、その数字を参照して該当住所が表示されるようになっています。 しかし、なぜか280番台以降の住所が、#REF!でうまく参照出来なくなってしまいました。 仕方ないので、関数の挿入でINDEX関数を挿入して、 =INDEX('sheet2'!I1:I300,A1) と入力したら、1~300までの住所はうまく表示出来るようになったのですが、 もとの数式の通りに「参照している部分を”住所”」と表示したいのですが、どのようにしたらいいのでしょうか? 他のINDEX関数を使っているセルは、=INDEX(電話番号,A1)のようになっています。 分かりにくい説明ですみません。よろしくお願いします。

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

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセル関数で使われる10^10とは何でしょうか。

    エクセル関数で使われる10^10とは何でしょうか。 他の教えて!gooで書かれていた数式を用いてデータ取得には成功したのですが 関数の内容が知りたいのでわかるかたお願いします。 参考アドレス: http://okwave.jp/qa/q6085476.html (以下参照文) ---------------------------------------------------------- 例えばA1セルからE1000セルの間で数値の入っている下端のデータであれば次のように作業列を設けて求めることができます。 初めに1行目に新たな行を挿入します。 A1セルには次の式を入力してE1セルまでオートフィルドラッグします。 =MATCH(10^10,A2:A1000)+1 ---------------------------------------------------------- 上記に出てくる10^10は何を表わしているのでしょうか。。 どうぞよろしくお願いいたします。

  • エクセル VLOOP関数

    エクセル初心者です。 エクセル2003を練習中なのですが 今、下画像の上段のようなデータのシートを作成しました。 シートは左の日付を3行セル結合しています。 このシートのデータを、画像下段の表のように 関数で表引きしたいのです。 下段の表は、左の日付を2行セル結合しています。 関数(VLOOPUP関数とINDEX関数)の使い方が、今一つ分かりませんでした。 どんな数式を入力していけばいいのでしょうか。 お願いします。

  • ROW関数について

    先日質問をしたのですが、理解が足りないようなので質問させて頂きます。 ROW関数はセルを入力したそのセルの行番号を返すものだと思うのですが、例えば =INDEX(シート1!C2:シート1!HR2,(ROW()-3)*3+1,) このような数式をワークシート2のD3のセルに入れると、ROW()は3と解釈されるので、 ・範囲はData!のワークシートのC2からHR2まで、 ・(3-3)*1+1となるので、その範囲内の1番であるData!D2セルを参照するのだと思うのですが、何か間違っているでしょうか? この際に、ROW()に参照されるセルは、もしかしてシート1のものなのでしょうか? 宜しくお願いしますm(_ _)m

  • アスタリスクを使用しindex関数で抽出したいです

    宜しくお願い致します。 相談内容: シート参照元にAddressが内容ののデータがあります。 シート参照先に参照元のAddressのデータの住所が東京都のデータだけを絶対参照などを応用し、抜き出し・展開したいです。 その他状況: ・index関数で抜き出そうとしましたが、失敗しています。 ・東京都のデータを抜き出したいのでワイルドカードのアスタリスクを使用しました。  どうやら関数にはアスタリスクが使用できる関数とそうでない関数があるらしく、Match関数は使用できるようですが、上手くいきません。 ・参照先シートのB2に”=IFERROR(index(参照元!$A$1:$E$6,match("*"&A1&"*",参照元!A1:E6,0)))”と入力しました。 しかし、”この関数に対して少なすぎる引数が入力されています”とエラーが表示されてしまいます。 宜しくお願い致します。

  • Excelで表現すると、どのような関数になりますか?

    ある数式をExcelで関数化したいのです。 よろしくお願い致します。 シートを2つ使用しており、【Sheet2】は【Sheet1】の値を参照しています。 【Sheet2】参照⇒【Sheet1】 このとき、【sheet2】が参照しているセルは 【Sheet2】1行目:=Sheet1!H4 【Sheet2】2行目:=Sheet1!H35 【Sheet2】3行目:=Sheet1!H66 と、行数が増える毎に「H列」の「行数」が"31"ずつ増加しております。 一般の数式で表現すると、xを【Sheet2】の行数として、  Sheet1!H{4+31*(x-1)} となります。 これをExcelで表現すると、どういった関数になりますか? 識者の方、ご教示よろしくお願い致します。

  • エクセルの関数のコピー

    エクセルの関数を下のセルにコピーをすると、1つずつ関数の式がずれてくるのですが同じ範囲の関数を同じ様に入力したい場合はどうすればいいですか? 例)=VLOOKUP(F3,Sheet2!A1:E5000,2,0) という関数があったとすると 次の行には=VLOOKUP(F4,Sheet2!A1:E5000,2,0) と検索値のみが1つ変わる感じにしたいのですが・・・ コピーでは無理なのでしょうか。やはり1つ1つ数式を入れてやらないとだめでしょうか。

  • エクセルでカウントする関数

    質問させてください やりたいことは 例えば数式 =IF(***>**,E5,"") が1行~10行にコピーしてあり 論理式に適合したものは参照セル値を返します 適合しないものは空白です さて 適合したものを数えてみようと思ったのですfが COUNT関数 COUNTA関数などやりましたが 数式のあるものも数えてしまい よって全部の行がカウントされていまいました 教えてください よろしくお願いいたします

専門家に質問してみよう