エラーの原因
今回使用されているOFFSET関数の構文は、
OFFSET(セル参照, オフセット行, オフセット列)
です。
=offset(D4, 0, -2)
はこの構文どおりですが、
=offset(row()column(), 0, -2)
で使用しているROW関数、COLUMN関数ともに行番号・列番号を返す関数です。
まず数値を返す関数というところに認識のずれがあると思われます。
そして2つの関数の間に演算子がないこともエラーの原因です。
※=ROW()COLUMN()
の式だけでエラーが発生します。
関数を2つただ並べるだけでは、この戻り値同士をどう扱うかが分からないためです。
仮に戻り値として数値ではなく文字列"D"と文字列"4"を受け取れたとしても、関数をただ並べるだけでは連結されません。
"D" & "4"というように戻り値同士を繋げるための演算子を挟む必要があります。
しかし"D" & "4"で"D4"を作ることができたとしても、それはセル参照ではなくただの文字列ですので、やはりOFFSET関数では利用できません(^-^;
次の式、
=offset(indirect("row()column()",0,-2))
は、おしかったです。
INDIRECT関数の第一引数は「セル参照を表す文字列」です。
惜しい点は、先ほども述べたとおり=ROW()COLUMN()
で"D4"という文字列は得られないというところ。
そして"row()column()"
という表記では、ROW()やCOLUMN()という関数は実行されず、ただ"row()column()"という文字列になってしまうことです。
対応方法
対応方法は先にmit0223さんから回答いただいている通りです。
=ROW()COLUMN()
では"D4"という文字列はtくれませんでしたが、これを作成してくれるのがADDRESS関数です。
例えばD4セルに=ADDRESS(ROW(),COLUMN())
という式を記載すると"$D$4"という文字列を返してくれます。
この文字列をINDIRECTの第一引数に使えば目的達成です。
=offset(indirect(address(row(), column())),0 ,-2)
ちなみにINDIRECT関数でセル参照した位置からさらにOFFSET関数で参照セルをずらしていますが、ROW関数、COLUMN関数ともに数値ですので、
=indirect(address(row(), column() - 2))
という風にINDIRECT関数の参照セル自体をずらしてしまうこともできます。
参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/01/20 10:11