集計範囲をもらさない、もうひとつの方法:ADDRESS関数を使う

集計範囲を指定するためにINDEX関数とROW関数を使って範囲を指定する方法のほかに、ADDRESS関数を使う方法もあります。

送信者 OpenOffice

関数名:ADDRESS関数
書式:=ADDRESS(行番号;列番号;種類;A1;シート名)
何ができる:範囲の中で行番号と列番号が交差するセルのアドレスを文字列として返す
平たく書くと:=ADDRESS(3;1)で$A$3セルが返されます。
●ADDRESS関数で指定する種類と返される値:
種類を省略すると絶対参照・・・$A$3
種類を1に設定すると絶対参照・・・$A$3
種類を2に設定すると相対参照・・・A$3(行を固定)
種類を3に設定すると相対参照・・・$A3(列を固定)
種類を4に設定すると参照なし・・・A3
上の例では、省略して問題ありません。
●ADDRESS関数で指定するA1と返される値:
0を指定するとRC方式でのADDRESSが返されます。通常のA1方式でADDRESSを得たいときは省略して問題無しです。
●シート名:ADDRESS関数を入力しているsheetのほかのsheetを参照したい場合は、sheet名を入力します。上の例の場合は不要です。

関数名:INDIRECT関数
関数名:=INDIRECT(参照範囲)
何ができる:文字列として入力されたセル番号や範囲を計算式で利用できるようにする
平たく書くと:=INDIRECT(A3)でA3セルを参照範囲として計算式の中で利用できるようにします。
INDIRECT関数では、空白のセルを参照したとき0を返してしまいます。これを回避したいときの方法をこちらに書きました。ご覧ください。

関数名:COLUMN関数
書式:=COLUMN()
何ができる:セルの列番号を返す
平たく書くと:=COLUMN()がG3セルに入っていると。7が返される

ここまでの関数を組み合わせて集計範囲の起点を設定する
まず、ADDRESS関数を用いて起点の文字列を生成します。
行はいずれも2行目から始まるので2
列は各列なのでCOLUMN()
これらをADDESS関数に当てはめると
=ADDRESS(2;COLUMN())
これで起点の文字列が生成されます。
この文字列を参照範囲としてアクティブにするには=INDIRECT(ADDRESS(2;COLUMN()))

集計範囲の終点を設定する
行は合計を入力するセルの一行上です。だから、=ROW()-1
列は起点と同じく=COLUMN()
これらをADDRESS関数に当てはめると=ADDRESS(ROW()-1;COLUMN())
この文字列を参照範囲としてアクティブにするには=INDIRECT(ADDRESS(ROW()-1;COLUMN()))

アクティブになった起点と終点をSUM関数に当てはめる
=SUM(INDIRECT(ADDRESS(2;COLUMN())):INDIRECT(ADDRESS(ROW()-1;COLUMN())))

これで完了です。
ADDRESS関数を使った集計範囲の設定のサンプルファイルはcalc083.odsをダウンロードしてください。