Excelで#N/Aエラーの対策

このQ&Aのポイント
  • Excelで#N/Aエラーが発生した場合の対策方法を説明します。
  • エラー対策としてIFERROR関数やIFNA関数を使用することが一般的ですが、この場合では効果がありません。
  • 条件付き書式でエラーをごまかすこともできますが、根本的なエラー対策を行いたいと考えています。
回答を見る
  • ベストアンサー

Excelで#N/Aエラーの対策

Sheet1の表の一部をSheet2に抜粋して表示したくて =IFERROR(INDIRECT(A1),"") と抜粋を表示するSheet2のセル範囲に配列数式として入力しました。 式内の参照先A1には、「Sheet1!A1:E5」「Sheet1!G1:D7」等を示す範囲の名前を記入しています。 画像では「範囲1」となっています。その名前を変更することで、抽出する範囲も変更されます。 「A1:E5」なら5行5列、「G1:D7」なら6行7列のように抽出する範囲の大きさが異なるので 上記の配列数式はその最大の範囲6行7列の大きさに合わせて入力しています。 ここで5行5列分を抽出すると、画像の様に最大範囲に満たない部分に#N/Aエラーが出るため、 その対策として IFERROR関数を使用したわけですが、エラー対策前後で変化がありません。 IFNA関数や、IF関数とISERROR関数のネストでも同様です。IS関数ではエラーかどうかは判別できているようです。 このケースではエラー対策の関数は無効なのでしょうか。 尚、条件付き書式で「エラーなら文字色を背景色に同じ」としてごまかすことはできますが、 その値を別の引数として使用するため、可能なら根本的にエラー対策したいところです。

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

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

IFERROR関数のヘルプに,ヒントが書かれています。 -------- 解説 ・値が配列数式の場合には、値で指定した範囲の各セルの結果の配列が返されます。 -------- これが意味しているのは,例えばA1に「Sheet1!A1:E5」と記入していたなら,IFERROR関数自体は「5×5の配列を返す」という事です。 で,5×5の配列を6×7個のセル範囲に配列入力しているのですから,余った(外側の)セルにはIFERRORの結果の配列の外,つまりIFERRORとは完全に無関係に#N/Aになります。 本質的な解決策はありませんので,代替として例えば =IFERROR(INDEX(INDIRECT(A1),ROW($A$1:$G$7),COLUMN($A$1:$G$7)),"") を7×7の範囲に配列入力してみます。

BlackYoshi
質問者

お礼

大変詳しく、ありがとうございます。 よくヘルプの読み方として、意味のわからない箇所は飛ばしていいからまずは読もう、 等と言われたりしますが、ちょうど自分が意味をとれなかった箇所を解説していただきました。 しかしなぜIFERROR関数はそのような仕様になっているのでしょうか・・・。 まあきっと、何らかの場合には何らかの意味があるのでしょうね。 助かりました。ありがとうございました。

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! お望みの方法とは異なると思いますが、 配列で処理せずに、単純にA3セルの数式を =IFERROR(INDEX(INDIRECT($A$1),ROW(A1),COLUMN(A1)),"") として、列・行方向にオートフィルでコピーではダメでしょうか?m(_ _)m

BlackYoshi
質問者

お礼

大変お早いご返答ありがとうございます。 確かに配列での処理が必要なわけではないので、おっしゃる通りの通常の方法で処理しました。 ただちょっと、IFERROR関数自体はエラーを返さないと思っていたので、疑問に感じた次第でした。 ありがとうございました。

関連するQ&A

  • excelでのvlookupでN/A#のエラー

    excel2000を使っています。Aシートにある表の中で一部だけをvlookupでBシートに抜粋したいのですが、一部N/A#の結果が返ります。その部分はAシートでは小計のように数式が入れてある部分でした。 計算結果をBシートに抜粋することはできないのでしょうか?

  • 配列数式で行を増やすためには

    シート1の一覧表からシート2の配列数式の入った表へある条件のものを抽出する作業を行っています。 シート2で行を増やそうと思い、配列数式の入ったセルを選択→解除→行を増やす→再度配列数式へ、という作業を行いました。 しかし、#N/Aというエラー表示がでます。シート1の表と指定範囲は変わっていないのにエラー表示はなぜ出るのでしょうか。

  • Excel 検索値参照範囲の書式を揃えても#N/A

    ExcelでINDEX+MATCH関数、VLOOKUP関数を使用したときに 検索値と参照範囲の書式を合わせてもエラー#N/Aになり、抽出できなくなりました。 書式はタイトル行は全て標準、IDと製品名の値は文字列にしています 今まで問題なく、抽出できていたのに今日突然値のエラー#N/Aになり抽出自体できなくなりました。 検索値と検索範囲の書式は合わせているのになぜでしょうか? ご教授頂けると幸いです。

  • エクセルの空白を詰めて別シートに表示

    sheet1のデータを参照して、空白を詰めてsheet2へ表示させたいんです! sheet1(元データになるもの)  A列 |B列|C列・・・ 1行目A|100|100 2行目B|  |200 3行目C|100| 4行目D|  |200 5行目E|100| 6行目F|  |100 ・ ・ sheet2(sheet1でB列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目C|100 3行目E|100 sheet3(sheet1でC列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目B|200 3行目D|200 4行目F|100 sheet2のA1に下記の式を入力してA列とB列に数式をコピー =IF(COUNT(Sheet1!$B$1:$B$6)<ROW(A1),"",INDEX(Sheet1!A$1:A$6,SMALL(IF(Sheet1!$B$1:$B$6<>"",ROW($A$1:$A$6)),ROW(A1)))) すると下記のように表示されます。 A1=A     B1=100 A2=#NUM! B2=#NUM! A3=#NUM! B3=#NUM! 4行目から空白 sheet2のA2のところにエラーが出ていますが、「関数の引数」のところで「数式の結果」には「100」と 正解が表示されています。(B2、A3、B3も同様に)数式の結果のところには正解が表示されています。 答えの「#NUM!」のところに正解を表示させるには、どうしたらいいですか? 見よう見まねでつくったのもで。。。関数にあまり詳しくありません。 よろしくお願い致します。

  • 条件付で最大値を取得(エクセル2000)

    エクセル2000です。ワークシート関数についての質問です。 セル範囲B1:B5の最大値は、=MAX(B1:B5) で求められますが、これに条件を付加してセル範囲A1:A5が1より大きいもののなかからセル範囲B1:B5の最大値を求めるならどのような数式になるでしょうか? 作業列を設けて、範囲A1:A5が1でないもののみ抽出し、そこからMAXで求めるという方法ならばすぐ思いつくのですが、作業列を使わない方法があればご教示ください。

  • vlookup関数で#N/Aエラーが出ます

    エクセル2000を使用しています。 "Sheet5"のM列にある「商品コード」を元に別シート"商品金額マスタ"から 商品金額を"Sheet5"のO列に表示させたいのですが、#N/Aエラーが出てしまいます。 O列には以下の数式を入れています。 =IF($M2="","",VLOOKUP($M2,商品金額マスタ!$A$2:$C$5,3,FALSE)) M列の各セルをクリックするとなぜか数式が反映され、O列に正しい値(商品金額)が表示されるのですが、 これはどういったことなのでしょうか? "Sheet5"のM列は元々"Sheet5"のA列にある商品コードの左6文字をLEFT関数で選んでいます。 この6文字は頭にゼロがつく商品コード1桁から4桁のものです。 #N/Aエラーが出るのは、このゼロが原因だったりしますでしょうか? どうぞよろしくお願いします。 "商品金額マスタ"     A列     B列      C列 1  商品コード  商品名    商品金額(税抜) 2  000001    Tシャツ     2,660 3  000002    パンツ      3,000 4  000003    タンクトップ   3,000 5  000004    長袖Tシャツ    3,000

  • エクセルの条件による数式の入力

    こんにちは!既存でも見つからなかったので質問させていただきます。どなたかご教授ください。 ●ひとつのブック内に2枚のシートがあります。sheet1とsheet2とします。sheeet1にしかるべき数式を入力したいです。 Sheet2には例えば名簿があるとします。明石から始まり渡辺まで500人ほどの名簿です。これはA列に1から順に名前、B列の1からは年齢が入っています。 Sheet1のA列1行に数式を入れます。A-1には文字列で【わたしは明石です。】と順にA-1~A-500まで順番に入れます。ただしこのとき年齢が18歳未満の時これは入力したくありません。さらにそこには空白のセルを必要とします。IF関数を使うとは思うのですが、このsheet2の列Bの年齢を条件でみっあった時のみを抽出して数式を入力する数式がわかりません。どのようにしたらよろしいでしょうか?

  • エクセル関数

    二つの条件から抽出する関数INDEXとMATCHをつかって作ってみたのですが行と列からの抽出ではなく二つの列からの抽出を行いたいと思います。 シート1 (データが既に入っております。)    A   B   C 1 \100 a123 tana 2 \200 h456 taka 3 \120 k789 yogi 4 \250 b456 ume シート2    A   B   C 1  k789 yogi シート2のC列に¥120と抽出する関数をご教授ください。 宜しくお願いいたします。

  • エラー非表示について

    2007です。 列60行3000の表でエラー値が散乱しています。このようになった経緯は複数列のセル内容を分割表示させ、さらに文字列となっている数字部分を数値に変換する作業をやりました。元の列が不要となったため削除したことにより参照先がなくなったことによるエラーだと思うのですが「コピー、値のみ貼り付け」したためセル自体に数式は残っていません(数式がないのにエラー値が出ることが疑問なのですが・・・) エラーの出ている列・行が点在しており、一気に選択できないため部分的に選択しクリア、これを繰り返しひとつのブックを3日がかりで処理しました。(同様のブックが40ほどあります) サイトを参考に、ISERRORと書式設定によりエラー表示を隠す方法を試みようとしたのですが、2003での事例しかなく、2007ではコンボボックスの項目が決まったものしかなく「数式が」を入力する窓がわからず断念しました。 ある本によると、エラー対策に新たな関数IFERROR登場とありますが、どう使うのか具体例がありません。 もう1年以上になるのですが、いまだに初心者の域を出ない者ですが、こんな方法でやってみればのヘルプをいただければと思います。

  • スクリプトの#N/A対策

    前回は大変丁寧な回答ありがとうございました。 申し訳ありません、今一度スプレットシートで 1つ教えて頂けないでしょうか。 前回同様の内容に入力列を1つ追加したいのです。 入力シートと単価シートがあります。 入力シートはA列から品番,単価1,単価2,単価3,部品,単価1,単価2,単価3となります。 単価シートはA列から品番,単価1,単価2,単価3で3行、1行空けて6行からは 部品,単価1,単価2,単価3で3行になります。 品番  単価1 単価2 単価3 あ   50 60 70 い   80 90 100  う   110 120 130 QQ   10 20 30 WW   40 50 60 EE   70 80 90 この様になります。 入力シートのA列で品番,E列で部品を入力すると単価シートを参照し B列からD列に品番単価,F列からH列に部品単価が表示されるようにしました。 そこで現状のコードだとE列に値が無くても部品単価1,2,3に#N/Aが セットされてしまいます。 下記のコードをA列,E列がセットされていない時は何もしないようにしたいのです。 function WriteVlookup() { var sheet = SpreadsheetApp.getActive().getSheetByName('入力シート'); var myCell = sheet.getActiveCell(); var myRow=myCell.getRow(); var myColumn=myCell.getColumn(); if(myColumn==1 && myRow>=2 ){ for(var i = 2; i <= 4; i++) { strformula ='=VLOOKUP($A' + myRow + ',\'単価シート\'!$A$2:$D$4,' + i + ',False)'; sheet.getRange(myRow, i).setFormula(strformula); strformula2 ='=VLOOKUP($E' + myRow + ',\'単価シート\'!$A$6:$D$8,' + i + ',False)'; sheet.getRange(myRow, i + 4).setFormula(strformula2); } } }; 例えば入力シートであと A列に入力すると E列まだ空白なのでF列からは#N/Aと表示されてしまいます。 A   B C D E F G H あ  50 60 70 #N/A #N/A #N/A い 80 90 100 QQ 40 50 60 上記のコードをどのように修正すれば#N/Aが 表示されなくなりますか? 宜しくお願いします。

専門家に質問してみよう