Designer+Excel:「INDIRECT」関数の活用

見た目は複雑でも強い味方

生成の雛形シート上に Excel の関数をいれておくと、値の操作が楽になる場合があります。しかし時として「雛形シート」や「行/列ひな形」「エリアひな形」のような処理後に消えて仕舞う領域上を参照しなければ成らない式も、設定する機会があることでしょう。

f:id:xoblos:20190704134919p:plain

上図は列「A」と列「B」それぞれに、共通でセル「E3」を見る関数が置かれています。列「A」の方はセル番地をシステム値として見ていますが、列「B」の方はセル名で見ています。

INDIRECT 関数はセル番地を文字列で表現出来、その場所が物理的に存在すれば、周囲から行列の増減がどう起きようが、自身の行列が削除されようが、参照を保持します。

f:id:xoblos:20190704134926p:plain

‥‥しかしシステム値が文字列に成って仕舞いますと、オートフィルが使えませんね。少々手を加えます。

f:id:xoblos:20190704134933p:plain

上図の赤字の意味は、「自分自身のセルの行番号と、自分自身のセル位置から 3つ右の列番号の交点であるセル番地を物理的に参照する」という内容になります。‥‥複雑化しましたが、オートフィルの為だけとすると効果が薄いですね。

f:id:xoblos:20190704134940p:plain

xoBlos の雛形の如く、列「E」を削除してみましょう。‥‥列「A」のような、使い慣れているに等しい式の方は壊れて仕舞いました。しかし列「B」の方は参照を保持し、新たに列「E」に入った情報の表現を成立させています。

例えばシートとシート間で跨いで参照している関数を持つ既存資料や、常に出力するデータの直前データを比較参照するような生成要件等に、xoBlos の生成が関わる場合には、このような物理的参照を成す関数が必要になってくる場合があります。相対参照に強い関数(今回例の「ADDRESS」や「OFFSET」等)と組み合わせて、関数の破損(REFエラー)を回避しましょう!

通常関数から INDIRECT 関数の書き換えは、難しいものではありません。結局のところセル番地が REF エラーとなるので、その部分を文字列でカバーして仕舞えば良いのです。

例)
・「=A10」     → 「=INDIRECT("A10")」
・「=SUM(A1:A10)」 → 「=SUM(INDIRECT("A1:A10"))」
・「=IF(雛形シート!A1=出力結果シート!A1,"OK","NG")
         → 「=IF(INDIRECT("雛形シート!A1")=INDIRECT("出力結果シート!A1"),"OK","NG")」