(Excel)累計を求める方法

 Excelで累計を求める方法、つまりいくつも並んでいる数を次々足していき、その都度そこまでの合計を表示する方法について紹介します。

足し算記号「+」を使う方法

 B列に並んでいる数値を上から順に次々足していき、そのたびにC列のセルに表示させるものとします(以下の例でも同様)。
 まずはC3セルに「=B3」と入力します。もちろんB3セルの値「5」がそのまま表示されます。

 


 続いて1つ下のC4セルに「=C3+B4」と記します。

 C4セル

=C3+B4

 「=B3+B4」ではなくて、1つ上のセルであるC3セルを指定しているところがポイントです。



 確定すると2つのセルの合計値「16」が表示されました。

 


 そしてC4セルからC8セルまでフィルコピー(C4セルの右下の緑の四角をダブルクリック、またはC8セルまでドラッグ)すると完成です。

 


 ここでC8セルを選択すると、数式が「=C7+B8」となっています。
 フィルコピーの効果によりそれぞれのセルで参照先のセルが適宜書き換えられ、「1つ上のセルの値(1つ前の累計)に、となりの数値を足す」という数式となっています。これで各行で累計が求められるというわけです。

SUM関数を使う方法

 SUM関数と絶対参照($)を利用する方法です。
 ちょっと難しくなりますが、数式の入力が一度で済むのがメリットです。


 まずC3セルに「=SUM(B$3:B3)」と入力します。

 C3セル

=SUM(B$3:B3)

 これだけだとB3セルからB3セルまで合計する、というあまり意味のない式に見えますが、「$」で参照先セルのうち片方の行番号を固定しているのがポイントです。



 そのままC8セルまでフィルコピー(C3セルの右下の緑の四角をダブルクリック、またはC8セルまでドラッグ)すると完成です。

 


 ここでC8セルを選択すると「=SUM(B$3:B8)」となっています。絶対参照($)の効果により「B$3」は書き変えられないため、どのセルにおいても「B3セルからB列のその行のまでの数値を合計する」という計算がされます。結果的に各行でその行までの累計が求められるというわけです。

SCAN関数を使う方法

 Microsoft 365で利用できるSCAN関数を使う方法です。
 1つの数式ですべての累計値を表示させることができます。


 C3セルに次のように入力するとC8セルまでの各行に累計が表示されます。

 C3セル

=SCAN(0,B3:B8,SUM)

 初期値を0(第1引数)、足し算の対象をB3:B8の範囲(第2引数)として足し算(第3引数=SUM)を実行し、足し算の過程を1つ1つを表示する、という式です。



 以前は次のように入力しなければならず難しい関数でしたが、現在は上記のように簡略化された記法が導入されています。

 C3セル

=SCAN(0,B3:B8,LAMBDA(a,b,a+b))

 初期値を0をa、B3:B8の範囲をbと名付け、足し算の過程を1つ1つを表示する、という内容です。



 初期値を第1引数として指定できるので、次のように初期値が別の箇所(B3セル)に掲げられている場合でも1つの関数で計算が完結します。

 D6セル

=SCAN(B3,C6:C11,SUM)

 なお日付(B列)の大小は考慮しておらず、C列の値を上から順に加算しているだけなので注意してください。

条件付きの累計を求める方法

 累計計算(足し算)の対象となる数値に条件を付ける方法です。足し算記号とIF関数を使う方法も考えられますが、ここではSUMIF関数を使う方法とIF/SCAN関数を使う2つの例を紹介します。


 まずSUMIF関数を使う例です。
 C3セルに次の数式を入力してC8セルまでフィルコピーすることにより、B列の値が「いちご」ならばC列の値を加算し、そうでなければ加算しないという条件でD列に累計を表示しています。

 C3セル(C8までフィルコピー)

=SUMIF(B$3:B3,"いちご",C$3:C3)

 B3セルからその行(数式が入っているセルと同じ行)のセルまでをチェックし、値が「いちご」だったらそのC列の数値を合計の対象とする、という式です。
 2か所の絶対参照($)に注意してください。



 B列が「いちご」でない場合は空白(空文字列)にする、という場合は次のようにします。

 C3セル(C8までフィルコピー)

=IF(B3="いちご",SUMIF(B$3:B3,"いちご",C$3:C3),"")

 B列の値が「いちご」だったら1つ上の例と同じ数式を適用し、そうでなければ空文字列を表示するという内容です。



 次はSCAN関数を使った例です。
 C3セルに次のように入力すると、C8セルまでの各行に条件付きの累計が表示されます。

 D3セル

=SCAN(0,IF(B3:B8="いちご",C3:C8,0),SUM)

 足し算の対象となる範囲(第2引数)を「IF(B3:B8="いちご",C3:C8,0)」とすることで、「いちご」に対応しない数値を0に変換しています。
 これでB列が「いちご」である数値だけの累計が求められます。



 B列が「いちご」でない場合は空白(空文字列)にする、という場合は次のようにします。

 D3セル

=IF(B3:B8="いちご",SCAN(0,IF(B3:B8="いちご",C3:C8,0),SUM),"")

 B列の値が「いちご」だったら1つ上の例と同じ数式を適用し、そうでなければ空文字列を表示しています。