プロが教える店舗&オフィスのセキュリティ対策術

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関数ではエラーかどうかは判別できているようです。

このケースではエラー対策の関数は無効なのでしょうか。

尚、条件付き書式で「エラーなら文字色を背景色に同じ」としてごまかすことはできますが、
その値を別の引数として使用するため、可能なら根本的にエラー対策したいところです。

「Excelで#N/Aエラーの対策」の質問画像

A 回答 (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の範囲に配列入力してみます。
    • good
    • 0
この回答へのお礼

大変詳しく、ありがとうございます。
よくヘルプの読み方として、意味のわからない箇所は飛ばしていいからまずは読もう、
等と言われたりしますが、ちょうど自分が意味をとれなかった箇所を解説していただきました。

しかしなぜIFERROR関数はそのような仕様になっているのでしょうか・・・。
まあきっと、何らかの場合には何らかの意味があるのでしょうね。

助かりました。ありがとうございました。

お礼日時:2014/03/27 00:30

こんばんは!



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

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

お礼日時:2014/03/27 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!