いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)1つの式で累計を求める

 [※2022年3月更新]
 Excelで数値の累計を求める場合には「=SUM(B$3:B3)」といった式を置いてあとは下にコピー、というやり方が一般的ですが、1つのセルに式を入力するだけで各行(列)に累計を表示することも可能です。

  • SCAN関数とLAMBDA関数を使うことにより、1つの式だけで数値の累計を求めることができます。
  • MMULT関数(行列積)等を使う方法もあります。

手順

SCAN/LAMBDA関数を使う方法

 画像ではB3:B10の範囲に数値が並んでいます。
 そこで、C3セルに1つの式を入力してC3:C10の各セルに数値の累計を表示させるものとします。
 1つの方法として次のような式を入力してみます。


 C3セル

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

 2022年2月ごろから使えるようになったSCAN関数とLAMBDA関数を使用します。
 機能がちょっと複雑ですが、SCAN関数の第1引数(計算の初期値)である0をaとし、第2引数であるB3:B10をbとしたうえで、LAMBDA関数内で定義されている演算a+bを(bのそれぞれについて)実行し、その都度結果を表示します。
 その計算だとB列の値がそのまま表示されるだけのように思えますが、SCAN関数によりa+bの計算結果が次の計算におけるaとして渡される仕組みになっているため累計が得られるというわけです。

 念のため計算の過程を書き下すと次のようになります。
1番目の計算:0(SCAN関数の第1引数)+3(B3:B10の最初の値)=3
2番目の計算:3(1番目の計算結果)+8(B3:B10の2番目の値)=11

8番目の計算:48(7番目の計算結果)+5(B3:B10の最後の値)=53


 実行結果はこうなります。
 いずれの関数も従前の関数と大きく異なる性質を持っているので慣れないと難しいですが、記述はなかなかシンプルに収まるので試してみる価値はありそうです。

MMULT関数を使う方法

 上記の例と同様に、集計対象となる数値がB3:B10に記録されています。
 こちらではC3セルに次のように入力して各行に累計を表示させています。


 C3セル

=MMULT(IF(ROW(B3:B10)>=TRANSPOSE(ROW(B3:B10)),1,0),B3:B10)

 集計範囲の各セルの行番号とそれを転置した値を比較することによって1と0の値からなる下三角行列を生成します。
 そしてMMULT関数により集計範囲そのものとの行列積を求めることにより、累計の列を得ています。
 数学的に真っ当なやり方ではあるものの、集計関数のようなExcelらしいアプローチとは異質なためちょっと馴染みにくいかもしれません。


 なお、下三角行列の生成については次の記事で触れています。
www.officeisyours.com