2013-01-18

行を削除したら表が壊れた...

よくこんなことがある:
  • コストの累計値を集計するようなスプレッドシート(図1)。
  • 高(t)のセルは、ひとつ上の行にある残高(t-1)セル+ひとつ左の列にある増減(t)で定義されている
  • ちょっとした誤記載などにより、ひとつ上の行を削除した
  • すると、数式における残高(t-1)部分が壊れて、エラー表示(#REF!)になってしまう(図2)
図1

図2

いちいち行を削除するたびに、#REF!となったところ以下の数式をオートフィルにより修正すればいいのだが、それも面倒くさい。そんなとき、どうすればいいだろうか。



OFFSET関数


そんなときに使うのがOFFSET関数。

上の例で言うと、累計値を
累計値(t) = 累計値(t-1) + 費用(t)
と定義するのではなく、
累計値(t) =OFFSET(累計値(t), -1, 0) + 費用(t)
と定義してやればいい。
(なお、上のOFFSET関数の解釈は、「累計値(t)のセルを起点として、下に(-1)、右にゼロだけ移動したところにあるセルの値を参照せよ」というもの)

こうすると、仮に(t-1)の行を削除しても、参照の対象が、削除後における一つ上の行に自動的に変更されて、エラーになることを回避できる。


Further Reading:

Excel Hacks: エクセルのテクニック系の本で最も実効的な本。手元に一冊持っておいて損なし。