エクセルで再計算のエラーが出る

このQ&Aのポイント
  • エクセルでINDEX関数と循環参照を使った表を作成していますが、一部のセルで再計算エラーが発生しています。具体的には、INDEX関数が参照するデータが入力されていない場合にエラーが発生します。また、循環参照がうまく再計算されず、#NUM!というエラーが表示されることもあります。
  • エラーの回避方法としては、まずINDEX関数が参照するデータが入力されていることを確認することです。また、循環参照の再計算がうまくいかない場合は、エクセルのオプションを設定し直すことで解決できることがあります。具体的には、数式のブックの計算を自動に設定し、反復計算を行うオプションにチェックを入れて、反復回数を適切に設定することです。
  • 最終的には、グラフやマクロを使用して一括で印刷することが目標です。そのためには、エラーが発生しないようにデータを入力し、循環参照の再計算が正常に行われるように設定する必要があります。
回答を見る
  • ベストアンサー

エクセルで再計算のエラーが出る

エクセルで、INDEX関数と循環参照を使って表を作っています。 <INDEX> Sheet1には、A列に名前(2000ケースくらい)、B列以降に毎日のある数字(100日分)が入力されています。 ただし、A列に名前はあるが、B列以降に数字が入力されていない場合も混じってあります。 Sheet2にはINDEX関数を使って、あるセルC1に「1」と入力すればSheet1のA1の毎日の数字がSheet2のA1からA100に参照されるように作ってあります。 C1に「2」と入力すればSheet1のA2の毎日の数字が参照されます。 <循環参照> 上記のSheet2にでは、明らかに少なすぎるデータを欠損データとするように循環参照をしています。 具体的には、とある1日のデータが、100日分の平均値の10分の1未満の場合には欠損とするようにしてあります。 Sheet2のセルA1からA100に100日分の数値がINDEXで参照されており、 セルB1に「=if(A1="","",if(A1=0,"",if(A1<A102,"",A1)))」 セルB2~B100までB1と同様の計算式 セルB102に「=B102/10」 セルB101に「=average(B1:B100)」 と、循環参照させてあります。 エクセルのオプションの「数式」の「ブックの計算」は自動、「反復計算を行う」にチェックし反復回数は100(100日分あるため)、変化の最大値は1(小数点以下の数値は必要ないので)にしてあります。 <計算エラー> 上記のINDEXと循環参照を利用して通常は問題はありませんが、 Sheet1に数値が入力されていないケースが出た後にエラーが出て来ます。 Sheet1のA列で、例えばA4のケースに100日分のデータが入力されていなかったとします。 Sheet2のC1に1~3の数値を入力した時は問題ありませんが、4を入力したらB列は全て「#NUM」と表示されます。 これは、循環参照をするにもできないからなので、理解できます。 その後は、C1に何を入力しても(さっきは問題なかった1~3を入力しても)、「#NUM!」が表示されたままになり、循環参照の再計算がうまくいきません。 主動でF9を押して再計算も「#NUM!」のままになります。 どのようにすれば、これを回避できるでしょうか? 最終的には、グラフ等を作成して、マクロを組んで一括で数百ケース程を印刷しようと思っています。 アドバイスよろしくお願いいたします。 ※ Office Home and Business 2010 Windows7 professional 32bit を使用しています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

自信たっぷりに間違ってませんと言い切りましたね。 ご自分の文章と実際のエクセルを照合したり、あるいは指摘を受けてどこか間違えてないかを探したり、あるいは回答の数式はそこをキチンと説明している事などに気が付かなかったようです。 循環参照の使い方も、循環参照を使って何を計算したいのかも、完全に把握しています。一応そのうえで間違いを指摘しておくと 1)平均の10分の1以下もデータ無しとするので(if(A1<A102,""の部分) →A102はご説明のどこにも出てきません。回答では修正済みです。 2)平均の10分の1は29.4です。 →B102の数式は確かに循環参照していますが、循環参照させたいのはそうじゃありません。回答では必要な1/10だけ説明しています。 3)B1からB10に#NUM!#NUM!#NUM!… →B1からB10に10個のエラーが発生する、というご説明をされています。 でもエラーが直接の原因は、B1からB10の他に「もう一個」、平均値を求めているセル(B101)でもエラーを発生しているからです。(余談ですがもう一個、平均値の1/10も当然エラーになります) そしてAVERAGE関数は、対象セル範囲に「一つも数字が無い場合に」#NUMではなく#DIV/0エラーを発生します。結果してB1からB10の全てのセルが、AVERAGE関数のエラーに引っ張られて#DIV/0になります。 ついでに 4)IFERROR関数を使うと、「#NUM!」の時には任意の何かを表示させるだけで、循環参照が動いているわけではなくなる →この認識も間違いです。 「AVERAGE関数がエラーになる」場合、循環させるべき値がそもそも存在しないため、IFERRORで循環を切って暫定的な値を表示します(今回は""を表示します)。 その後A列に数字が現れるとエラーは解消され、回答の数式により意図した通りの計算結果が現れます。 さて。以上から推測されるのは、あなたのご相談と補足は「実際にご自分のエクセルを確認したり、回答を試してみる」といった事実確認をしていない、ただの「説明のための説明」だということです。ヒトの話を聞いて、まずはその通り実際にご自分の手を動かしてやってみる所から始めてみてはいかがですか。

duoshaoqia
質問者

お礼

A102のところが間違っていました。 ご指摘ありがとうございました。 そもそもの、INDEX関数で作っているところにエラーがあったのがわかりました。 そこにIFERROR関数を入れたら、循環も全て解決しました。 どうもありがとうございました。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>エクセルで、INDEX関数と循環参照を使って表を作っています。 循環参照を使うと正しい結果が得られません。 従って、最大反復回数と変化の最大値を指定します。 反復回数が少ないと目的の値とかけ離れた結果になります。 >Sheet2のC1に1~3の数値を入力した時は問題ありませんが、4を入力したらB列は全て「#NUM」と表示されます。 A列とB列の値はどのようになっているかによって対処方法が異なります。 >セルB1に「=if(A1="","",if(A1=0,"",if(A1<A102,"",A1)))」 >セルB2~B100までB1と同様の計算式 >セルB102に「=B102/10」 >セルB101に「=average(B1:B100)」 論理が合いません。 >どのようにすれば、これを回避できるでしょうか? エラーの表示を回避するだけであればIFEROOR関数でエラーのとき""にすれば良いでしょう。 信憑性のある値に近づけたいのであれば反復回数を順次増やしてみることになるでしょう。

duoshaoqia
質問者

お礼

どうもありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

B1,B102としてご相談に提示された数式は,恐らくあなたの実際のエクセルの内容とは違う間違った数式です。あるいはもしかすると言葉のご説明に誤りがあります。 また「#NUM!が出る」というご説明も誤りですね。 簡易にはB102に10分の1を入れておき B1: =IF(A1="","",IF(A1=0,"",IF(A1<IFERROR($B$102,0),"",A1))) 以下コピー とでもしてみます。 IFERRORの時ゼロでいいのかは,あなたのエクセルの実際のデータに応じて適切に調整して下さい。

duoshaoqia
質問者

補足

ご回答ありがとうございます。 説明不足だったかもしれませんが、私が記入した式に間違いはありません(絶対参照を抜かしていることを除いて)。 私の数式は循環参照をすることを前提にして作っています。 100日分のデータは多すぎるので、ここでは10日分のサンプルでご説明します。 18 0 576 515 _ 37 422 415 367 299 という10日間のデータがあったとします。 ここでは「_」はデータが無いことを意味することとします。 この場合は9日分のデータしかなく、平均は294になり、平均の10分の1は29.4です。 「=if(A1="","",if(A1=0,"",if(A1<A102,"",A1)))」 私が質問時に記入したこの式では、0もデータ無しと同じ扱いをするので、 18 _ 576 515 _ 37 422 415 367 299 と変化し、平均は331になります。 平均の10分の1以下もデータ無しとするので(if(A1<A102,""の部分)、 _ _ 576 515 _ 37 422 415 367 299 と変化し、平均は375で、平均の10分の1以下は37.5です。 37.5以下がもう一か所あるのでさらに処理され、 _ _ 576 515 _ _ 422 415 367 299 というデータになったところで処理を終える という循環参照を入れています。 つまりA1からA10に 18 0 576 515 _ 37 422 415 367 299 と入っていれば、B1からB10に _ _ 576 515 _ _ 422 415 367 299 と表示されるようになります。 これらを、INDEX関数を使って順番に表示することになるのですが、 データが全くないケースを一度表示させると、その後INDEX関数で元のケースに戻っても、 A1からA10に 18 0 576 515 _ 37 422 415 367 299 が表示されても、B1からB10に #NUM! #NUM! #NUM! #NUM! #NUM! #NUM! #NUM! #NUM! #NUM! #NUM! と表示されてしまいます。 回答してくださったkeithinさんのIFERROR関数を使うと、「#NUM!」の時には任意の何かを表示させるだけで、循環参照が動いているわけではなくなるので、結局処理が止まったままとなります。 手を付けていただきまして恐縮でしたが、私のしたい方向と少し違っていたかと思います。

関連するQ&A

  • エクセル 数式について

    皆さんこんにちわ。 現在エクセルで計算式を作らせようとしているのですが、 わからない事があったので質問させて下さい。 メインシート(シート1) A1セルに入力欄(数値記入)  B1セルにA1セルから出した結果  C1セルには別シートの対応した列の数値÷B1セルに入力した数値 別シート内容(シート2) A1 1 B1 20000 A2 2 B2 40000 A3 3 B3 60000 例で書くと シート1のA1セルに2 シート1のB1セルに2000  と書いてるとして シート1のC1セルには   「A1には2と入っているのでシート2の2って表示されている列のB2セルの40000÷B1セルの2000」の答えを表示させたいです。 ここでわからないのが別シートからの参照方法とその列の入力した数字の列のBセルの参照 方法です。(その行で2と言う数値がある列の別セルを参照させる) 少しわかりずらいのですが、上記に書いた事のやり方 どんな風にしたらいいのか、詳しい方ご助言下さいm(__)m

  • Excelの計算式または関数について

    Excel2007を使用しています。  次のようなことをやりたいのですが、計算式または関数、または関数と計算式の組み合わせを教えていただきたくお願いいたします。 問題  例えばA列にA1からA10まで何らかの数値は入っていて、次にA11に何らかの数値を入力した場合、A11に入力した数値がA1からA10までのいずれかのセル入力されている数値と同じ場合にはB11のセルに「重複」と表示する。以下A12セルへの入力された数値はA1からA11までのいずれかのセルに入力されている数値と同じ場合にはB12のセルに「重複」と表示する。以下セルA13以下へ入力する数値についてもすでに入力済みのセルの数値と同様な比較を行って対応のB列のセルに「重複」と表示をする処理を行う。  以上のような処理を行いたいのです。よろしくお願いいたします。

  • EXCELの計算式

    SHEET1 A列  B列  C列 1   50   a 51  60   b 61  70   c 71  80   d という表を作っておいて、 SHEET2のA列に1から80までの任意の数字を入れたときに、B列に a,b,c,dのいずれかを表示させたいのですが(以下参照)、 A列  B列 8   a 55   b どのような計算式を使えばいいでしょうか。 よろしくお願いします。

  • エクセル 違うシートに計算式がある場合

    エクセル2000を使っています。 下記の計算をしたいのですが、方法を教えてください。 1.Sheet1 A1とB1に計算したい元の数値が記入されています。 例えば、A1=1 B1=2 2. Sheet2 のA1とB1に数値が入る事としてC1に計算結果が出るものとします。 3. Sheet1のC1にSheet2のC1の内容を表示したい。 4. Sheet1 A2、A3・・・・・、B2、B3・・・・・に入力した後で、C2、C3・・・・・・に Sheet2のC1で計算させた結果を自動的に入力したい。 別の言い方をすれば、Sheet2 のA1・B1が関数の入力するところにあたり Sheet2のC1が関数の出力(というか、計算結果)にあたります。 Sheet1からSheet2を関数のように使いたいのです。 Sheet1 ____ A_____B_______C 1___1_____2______3 2___2_____3______5 3___5_____8______13 4___9_____1______10 5___4_____5______ 9 Sheet2 ____A_____B_____C 1________________ =A1+B1 2_____________________ こんなイメージです。 Sheet2で計算の入力に対応するセルがA1・B1 計算結果が書いてあるのがC1 実際は、大きな表を参照しながら計算するので、色々計算した結果(途中計算は他のセルも使います)がC1に表されます。 以上、よろしくお願いします。

  • エクセルのマクロについて質問です。

    エクセルのマクロについて質問です。 マクロを発動した時に、あるセルに入力してある数値を参照し、その行のX列目に数値を張り付けるものを作成しようとしています。 例えば シート「1」の A1に日付を入力 B1にある数字を入力 シート「2」の A列にA1→1~A31→31の日付が入力されている時 マクロ発動時にシート「1」A1の日付と一致する シート「2」のB列にシート「1」のB1の値を貼り付け ↑たとえばシート「1」のA1が1日でB1が500だった場合 シート「2」の1日(A1)と同じ行でB列(B1に500を 貼り付けるものです。 かなり下手な説明だと自覚しておりますが、解読できる方 どうかご教授ねがいます。

  • エクセル2003 計算されないようにしたい

    例 A列     B列  1     =A1+A2  2     =A2+A3  3     =A3+A4 (A4は空白です) となっている場合に B1=3 B2=5 B3=3 になると思うんですが この時に空白のセルと計算結果を出すときは0もしくは 計算されないようにしたいです。 最終的にB列にSUM関数を使って合計を出したいのですが A列に求めたい数字が片方しか入ってない場合 (数字が入っているセル+空白セル)はSUM関数の合計に入れたくないです。 なので上記の例では B列にSUM関数をした場合11ではなく8にしたいです。 それには文字列を入力して#VALUE!にするしかないですか? でもその状態にしてSUM関数で合計を出したときも#VALUE!になってしまいます。 よろしくお願いします。

  • エクセルの計算式を教えて下さい

    下記のようなシートを作成するように会社から言われました何方か教えて下さい。 例) 元の数値   A1列               22 これを12倍した数値が各セルに各1個はいる          B1    C1    D1   2    6     4 この数字(264)に消費税を入れた数字を小数点切捨てで次の行の各セルに入れます。   B2    C2     D2   2    7     7   どのように作成するのか解りません教えて下さい。        

  • Excelのカウント

    セルA列に入力されている数値を参照し、セルB列のように出力したいです。 セルA2に0と入力されていれば、BセルB2、B3、B4、B5に0になるようコピーしたいのですが、数が膨大なためどなたかよい対処法をどなたか教えて頂けないでしょうか。 ちなみに、A列に入力されている数値は0と1のみになり、A列の数値はランダムに入力されています。

  • エクセルの計算式のコピーについて

    「A」ファイルにおいて、 「シート1」の一つのセルの中に「シート2」の一つのセルを参照する という計算式があります。 この計算式を、 「A」ファイルと全く同じシート構成である「B」ファイルの 「シート1」の同じセルにコピーすると、 「B」ファイルの「シート2」を参照して欲しいのに、 「A」ファイルの「シート2」を参照するようになってしまいます。 どうしたら上手くいくでしょうか? 分かりにくい質問かもしれませんが、 なにとぞよろしくお願い致します。

  • エクセルで参照する別シート名をセルに入力したい

    エクセルで参照する別シート名をセルに入力したいです。 (1) sheet2とsheet3にそれぞれA1:B10の表があります。    A列には氏名がB列には数値が入力してあります。    (同じ表で月度が違います。) (2) vlookup関数を使ってsheet1のA列に氏名を入力して対応する数値を    B列に求めたいです。 (3) この時、sheet1のC1に「sheet2」「sheet3」と入力することで    参照するシートを変えたいのですが、方法が解りません。 そもそも可能かどうかも解らず、悩んでいます。 ご教授お願いいたします。   

専門家に質問してみよう