エクセル配列数式で#DIV/0!が反映されない問題

このQ&Aのポイント
  • エクセルの配列数式を使用して、特定の条件に基づいてデータを抽出する際に、エラー値である#DIV/0!が含まれていると正しく反映されない問題が発生します。
  • この問題の解決方法として、数式内でエラー値を無視する処理を行う必要があります。具体的には、IF関数やISERROR関数などを使用して、#DIV/0!が含まれる場合には空白を表示するように設定します。
  • この現象が発生する理由として、エクセルの配列数式は複数のセルを一括して処理するため、エラー値が含まれると計算が中断されてしまい、すべてのセルにエラー値が表示されるためです。
回答を見る
  • ベストアンサー

エクセル 配列数式 #DIV/0!があると反映されない

話がややこしいかと思うのですが、宜しくお願いします。 以前に、「楽天みんなで解決」のビジネス&キャリアで質問させていただいたことに大して再び質問させていただきたいのです・・。 どうかお力を・・・!! 以前はこんな質問を致しました。 ーーーーーーーーーーーー エクセルについての質問です。   A B  C 1 ○ 佐藤 ■ 2 × 鈴木 3 ○ 後藤 4 △ 近藤 5 △ 小林 6 × 大山 7 △ 大林 8 × 小山 9 ○ 松田 のようなデータがあります。 この中で、■(つまり、C1セル)に、「○」の行にある、B列の文字を返したいのですが、■(つまり、C1セル)に =VLOOKUP("○",$A$1:$B$9,2) と入力し、C10セルまでコピーしても、うまく反映されません。 私がほしい結果としては、 ○  △  × 佐藤 近藤 鈴木 後藤 小林 大山 松田 大林 小山 という具合に抽出したいのです。 ーーーーーーーーーーー この質問にたいする回答といたしまして、 ========== 一例です。 データをSheet1、Sheet2の1行目に記号があるとします。 Sheet2のA2に次の数式を入力して、縦横にコピーして下さい。 尚、配列数式の為、入力完了時にshift+ctrl+enterキーを同時押下して下さい。 =IF(COUNTIF(Sheet1!$A:$A,A$1)>ROW(A1)-1,INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A$1:$A$100=A$1,ROW(Sheet1!$A$1:$A$100),99999),ROW(A1))),"") ========== という回答を頂きました。 一度はこれで解決したのですが、今回また問題が発生してしまったのです。 「○」や「△」の記号や「定価」といった文字ではうまくいくのですが、【#DIV/0!】というエラー値が一個でも入ると、とたんにうまく反映されなくなるのです。 例:前述のデータ表に沿うとします。以下のようにA5セルにエラーが入ると、とたんに全部#DIV/0!となってしまいます。   A   B    1 ○   佐藤  2 ×   鈴木 3 ○   後藤 4 △   近藤 5 #DIV/0! 小林 6 ×   大山 7 △   大林 8 ×   小山 9 ○   松田 <抽出後> ○    △    × #DIV/0! #DIV/0! #DIV/0! #DIV/0! #DIV/0! #DIV/0! #DIV/0! #DIV/0! #DIV/0! 大変困っております・・・。 自分で解決しようものにも、数式の意味が解読できませんでした。。配列数式とはなんぞや、括弧がたくさんあって意味がよくわからず・・。 解決方法をどなたかご教授を!! ついでに、なぜこのような現象がおきてしまうのか、できたら教えていただきたいです・・。

noname#63142
noname#63142

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

前回に数式を提供した者です。 >自分で解決しようものにも、数式の意味が解読できませんでした。 ⇒関数エラー)が発生している状態では正常に処理ができないのはこの数式に限りません。  一般的にエラーの元を断つ対応が肝要かと思いますが如何でしょうか。 一例です。 =IF(ISERROR(数式),"",数式)

noname#63142
質問者

お礼

すみません。補足に投稿してしまいました。 回答くださいまして、ありがとうございました!

noname#63142
質問者

補足

再び、ありがとうございます!! エラー値に対する関数の存在を知りませんでした! なるほど。そのようにすればいいのですね!助かりました。。!!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

配列数式では、内部処理ロジックとして、各行につき1行ずつ指定した処理を、行数分処理して(x)、行数分を足し算するものが多いが、Xの段階で1つでもエラーが起こるデータの有様だと、配列数式全体が使い物にならない(エラーが返る) こういうことに出くわしているのではないのですか。 このケースではエラー値が対象になっているようだが、これも配列数式に限らず、普通の関数でも個別にチェックすべき問題と思う。 関数の結果でエラー値が出るなら、出ないように式を組み変える( 0で割り算なら、除数が0かどうか聞いて、0の場合は一律空白にするとか)必要があるでしょう。

noname#63142
質問者

お礼

配列数式について、というかそもそもこの式についての理解が浅すぎて、原因が特定できず、 >配列数式では、内部処理ロジックとして、各行につき1行ずつ指定した処理を、行数分処理して(x)、行数分を足し算するものが多いが、Xの段階で1つでもエラーが起こるデータの有様だと、配列数式全体が使い物にならない(エラーが返る) ということが分からないでいました。 なるほど。そういうことなんですね。 私の感覚では、「なぜデータに一個のエラー値があるだけで、全部だめになってしまうのだろう」と激しく疑問に思ったのです。 エラー値が出ないようにする、という方法をきちんととることにします。 ありがとうございました!

noname#176215
noname#176215
回答No.2

> ついでに、なぜこのような現象がおきてしまうのか、できたら教えて > いただきたいです・・。 既に理解できていない状態では 何を説明しても半端な理解しかできな いでしょう。せっかく教えてもらった数式すら理解しないまま「解読で きませんでした」で済ませてしまう人が それでエラーが起きる理由だ け 別の人から教えてもらおうとうのは無理な相談です。 理解できなくてもいい人用の数式なら提示できます。 =INDEX(B:B,100-LARGE(INDEX(ISNUMBER(1/(A$1:A$100="○"))*100 -ROW($1:$100),0),ROW(A1)))&"" Enter確定で 下方向にオートフィルコピー ただこんな式を利用するのは止めた方がいいです。 このような数式を作ってしまったら誰かにも引継ぎできなくなりますよ? 作業列を使って計算すれば こんな複雑怪奇な計算は必要ありません。 ■C1セル =IF(ISERROR(A1),"",IF(A1="","",A1&COUNTIF(A$1:A1,A1))) 下方向にオートフィルコピー この列を使えば VLOOKUP関数だけで全部求りますね?

noname#63142
質問者

お礼

無理な相談、だったのでしょうか。 もし仮に、私の知識で他の人が助かるなら、私は他人を助けますけど…。 言葉が過ぎましたね。申し訳ございません。 ただ私は、「知りたい」と思ったことを質問したに過ぎなかったのですけれども。 とにもかくにも、数式の理解に難しいと感じる私のために、簡易な数式を教えてくださってありがとうございます。 今後ますます、自分の知識・理解を深めていこうと思います。

回答No.1

それが複雑怪奇な関数を駆使した数式だろうと、単純明快な四則演 算だろうと、エラー値を喰わせちゃえばエラーしか返りません。 エラー足す5なんて誰にも計算できないんだから。 というわけで、前回教えてもらったという難しい数式は全然関係な くて、A列にエラー値が出てくることが一番問題です。割り算の分母 がゼロになってるから#DIV/0!って言われちゃうんで、分母がゼロに なりそうなら割り算しないで×にするとか空白にするとか対策を考 えて下さい。

noname#63142
質問者

お礼

ご丁寧にありがとうございます。 「エラー値」の意味するところを考えていなかったと思います。反省ですね。(エラー値=0、という感覚だったのかもしれません) 対策を考えます。ありがとうございました。

関連するQ&A

  • excel2000 vlookupその他のデータ検索、抽出の関数について

    エクセルについての質問です。   A B  C 1 ○ 佐藤 ■ 2 × 鈴木 3 ○ 後藤 4 △ 近藤 5 △ 小林 6 × 大山 7 △ 大林 8 × 小山 9 ○ 松田 のようなデータがあります。 この中で、■(つまり、C1セル)に、「○」の行にある、B列の文字を返したいのですが、■(つまり、C1セル)に =VLOOKUP("○",$A$1:$B$9,2) と入力し、C10セルまでコピーしても、うまく反映されません。 私がほしい結果としては、 ○  △  × 佐藤 近藤 鈴木 後藤 小林 大山 松田 大林 小山 という具合に抽出したいのです。 とても拙い説明で申し訳ございません。 私がほしい結果と致しましては、上述のとおりでございます。 vlookupとは別の、他の関数を使うべきなのでしょうか? とても困っております・・・。。 どうぞ救いの手を差し伸べてください・・・!!

  • googleドキュメントで配列数式を使う場合に

    http://support.google.com/docs/bin/answer.py?hl=ja&answer=71291 こちらのページで説明がされているのですが、CTRL+SHIFT+ENTERで行う配列数式はgoogleドキュメントではARRAYFORMULAを使い、計算するようなのですが IF(COUNTIF(Sheet2!$A$2:$A$444,$E$59)<ROW(Sheet2!B1),"",INDEX(Sheet2!B$2:B$444,SMALL(IF(Sheet2!$A$2:$A$444=$E$59,ROW(Sheet2!$A$1:$A$443)),ROW(Sheet2!B1)))) というちょっと長い数式になると、どこに入れたらいいか分からなくなりました Sheet1に↑の数式が入れてあり、検索したい値はE59セルに Sheet2には取り出したいデータ A列にデータ(検索用)、B列にデータ1、C列にデータ2とあり、 この数式はA列にあてはまるB列のデータ1全てを取り出すものとなっています。

  • EXCELで#DIV/!

    エクセルで、セルC4に=(A4-B4)/A4というふうに数式を入れると#DIV/!と出るのですがこれを0又は空白にする方法はありますでしょうか。 宜しくお願い致します。

  • エクセル 数式おしえてください!

    数式がわからないので教えてください。 店舗のシフト作成に使いたいと思っています。 エクセルシート A  B   C   D  E 1  小林 田中 鈴木 森 2 1 A   B     A   B 3 2 B  A    A   A 4 3 A  B   A   A (ちょっとずれてますが・・) A列には日付、 1行目には社員名称が入っている、と考えてください。 別のシートでも同シートの別箇所でもいいのですが、 【○日の△シフトの社員は誰か】 ・・というのを表示できる数式はあるでしょうか??? 例:1日のAシフトは 小林 鈴木・・ と表示できるようになるでしょうか・・・  よろしくお願いいたします。。

  • エクセルの数式のコピーについて教えてください。

    A1のセルに、「+sheet1!A1」 という数式があるとします。この数式をB1、C1、D1のセルに貼り付けると、「+sheet1!B1」、「+sheet1!C1」、「+sheet1!D1」というようになるんですけど、これを、「+sheet1!A2」、「+sheet1!A3」、「+sheet1!A4」、というように、B1、C1、D1のセルに貼り付けることって出来ますか?

  • エクセル内の数式を反映させながらシートをコピーする方法

    エクセルのシートのコピーについて教えて下さい。 1日1シートで表計算できる表を作るよう指示されました。 シート内には、累計を出すように(前日までの合計)+(本日の数字) の数式が入っています。 具体的に書きますと、セルA1に本日の数字を入力。 セルB1に(前日までの合計)+(本日の数字)と数式を入れました。 数式でいうと、例えばシート3のセルB1には(シート2:B1)+A1 シート4のセルB1には(シート3:B1)+A1 という具合にセルB1には前日までの合計を反映させるように、常に 前シートの累計をリンクさせています。 シートをコピーしては、セルB1の数式「前シート」部分を修正して こつこつシート7まで作ったのですが、30日分作って欲しいと 言われて困っています。 時間がたくさんあればこつこつ続けて完成させるのですが、就業上の 問題があってこれにずっと時間を割くことができません。 説明が長くなりましたが、ここで教えて頂きたいのです! 数式を反映させながら、シートをどんどんコピーする方法は ありませんでしょうか? 今、シート7まで作ったので、まんまコピーして7枚ずつ増やす 事は簡単ですが、累計部分の(前シート:B1)シートのリンクが 勝手には直ってくれません。 コピーすると同時に、前シートのリンクも直ってくれる方法が あればぜひ教えて下さい。 よろしくお願いします。

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

    エクセルの関数。 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行あります。) 教えて頂けないでしょうか?

  • マクロで数式を書き換えたい。

    【処理概要】 担当者一覧ファイルがあり、そのファイルには各担当者の目標と売上がデータが入っています。 各担当者に目標を入力してもらうため、担当者別にファイルを作成し、かつ目標列は各担当者ファイルの対応する列を参照する数式に変更します。  例)担当者一覧.xlsxの「C2」はA.xlsxの「C2」を参照する。(数式:=[佐藤.xlsx]Sheet1!C2) 【悩み】 担当者別にファイルを作成するマクロは出来たのですが、目標列に元から入っている数式をうまく変更することが出来ません。 例えば、添付画像の場合、担当者一覧ファイルの目標列の数式は上から (1) =[佐藤.xlsx]Sheet1!C2 =[佐藤.xlsx]Sheet1!C3 =[佐藤.xlsx]Sheet1!C4 =[鈴木.xlsx]Sheet1!C2 =[鈴木.xlsx]Sheet1!C3 =[山田.xlsx]Sheet1!C2 =[山田.xlsx]Sheet1!C3 となることが正しいのですが、forメソッドを使用して実行したところ、以下のようになりました。 (2) =[佐藤.xlsx]Sheet1!C2 =[佐藤.xlsx]Sheet1!C3 =[佐藤.xlsx]Sheet1!C4 =[鈴木.xlsx]Sheet1!C5 =[鈴木.xlsx]Sheet1!C6 =[山田.xlsx]Sheet1!C7 =[山田.xlsx]Sheet1!C8 数式の書き換えは、Replaceメソッドを使用していますが、一括で置換されてしまうため、 以下のような記述をしています。 Dim a, b, Row, RowEnd As Long Dim Emp As String Row = 2 For Row To RowEnd  Emp = Range("A" & Row ).Value  a = "=SUM(E:" & Row & "G:" & Row & ")" ←例です。  b = "=[" & Emp & ".xlsx]Sheet1!C" & Row  Range("C" & Row ).Select  Selection.Replace what:= a, Replacement:= b Next Row この記述では(2)になるように作ってしまっているのですが、ここから(1)のようにするにはどうすればよいかわかりません。。。 不躾で、大変申し訳ございませんが、どなたかヒントをくださいますでしょうか。 ご不明な点がございましたら回答致しますので、よろしくお願いします。

  • エクセル 数式について教えてください。

    エクセルの数式について教えてください。 教えてください。たとえばA1のセルが1000、B1のセルが500でC1のセルに=B1-A1と入力します。そうすると 500と表示されます。これはこれでいいのですがたとえばA1に1000入力しB1が空欄だとC1にはA1セルの1000が入力されます。 A1だけのセルに1000と入力した場合にC1には空欄か#DIV/0見たいなエラーメッセージをさせたいのですがどうすれば よろしいでしょうか?

  • エクセルで

    以下のようなシートがあります。 A   B   C 01   小林  (1) 02   佐藤  (2) 03   田中  (1) 04   本多  (1) 05   近藤  (2) A列⇒個人別番号(上から下に大きな番号になる) B列⇒名前 C列⇒グループ 以上のシートをもとに、別のシートに、『グループ(1)』と『グループ(2)』の名簿を作成したいのです。名簿のイメージは以下の通りです。 A列      B列 グループ(1)   グループ(2) 小林      佐藤 田中      近藤 本多 名前は、個人番号の小さい順番で並べていきたいのです。理想は関数で作成したいと考えています。宜しくお願い致します。

専門家に質問してみよう