SUMの:の右側にOFFSET関数を入れる書き方は、もう少し評価されてもいいと思うのだけど。あまりにも存在感がない。
A1からA10までのセルの合計をA11に計算する
普通に書くと、A11にこの式を書きます
SUM(A1:A10)
この式の問題点
ある一か所以外に行を挿入した場合は、SUMの参照範囲が自動的にA1:A11
に変更されます。Excel賢い。
ある一か所が問題です。合計のセル(A11)の直前に行を足した場合はSUMの参照範囲がA1:A10
のままになります。合計セルの一つ上に行を足したいことが多いんですよね、意外と。
この結果、式の範囲ずれが発生します。
これを避けるために、
- 行を挿入したあとに式の範囲を手動で直す
- この現象を先読みしてあえてA9に行を差し込み値をずらす
など人間側がExcelに踊らされることになります。
それか、参照がミスっていることに気が付かず、計算機を使っているのに計算ミスをするというもっと悲しいことが起きます。
解決方法
=SUM(A1:OFFSET(A11,-1,0))
と書く
A1セルに始まり、A11の一つ上のセルまでの合計という意味です。
実は、SUM関数などのセル範囲指定をするときの:
前後は、文字列で直接セルの番地を書くことが多いですが、セル参照が返ってくる関数であれば書くことができます。
この書き方の場合、A10
に行を追加しても、OFFSET関数の第一引数も自動的にA12
に繰り下げられえるので、A12の1つ上まで(つまりA11まで)となり合計が正しく計算できます。
副作用
副作用もあります。F2キーを押して編集状態にしたときにSUMの合計範囲に色を付けて教えてくれなくなります。これはちょっと悲しい。
offset関数について
第一引数のセル番地からの位置を相対的に選択する関数。
offset関数の定義
offset(範囲, 行数, 列数, [高さ], [幅])
サンプルで使ったOFFSET(A11,-1,0)の説明
- A11,
- -1(縦位置マイナス1、上方向に1つ動く、つまり10),
- 0(横位置は変更なし、つまりAのまま)
- 省略(1行分)
- 省略(1列分)
これでA10を指します。
第4引数をうまく使うとA11を起点として、上10個を参照する範囲を取得するOFFSET関数を書くこともできますが、やめておきます。
まとめ
SUM関数の引数のコロンの右側(左側も)に、関数を指定できるという事実があまり知られてなさそうだったので記事にしてみました。最初にSUMを使うときにA1:A10
の形式で勉強するから、この形しか使えないと思い込んでしまっているかもしれません。
月の日数によって合計範囲が変わるような表を使っている場合は、毎月SUM式の範囲を確認して調整する雑務から解放されると思います!