本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
はじめに:データ分析の第一歩、「累計」を極める!
日々の売上、プロジェクトの進捗、在庫の推移…。
ビジネスの現場では、時系列で記録されたデータを「積み上げて」全体の流れを把握したい場面が頻繁にあります。
この「積み上げ計算」、すなわち「累計」は、データ分析における最も基本的かつ重要なテクニックの一つです。
「累計の計算って、いつも上のセルと今の行を足してるけど、もっと良い方法はないのかな?
一行数式を入れるだけで、全部の累計が自動で計算されたら最高なのに…」
その願い、現代のExcelなら叶えられます!
今回の記事は、この実務必須スキルである「累計の出し方」をテーマに、5つの異なるアプローチを徹底解説します。
昔ながらの堅実な方法から、最新関数を駆使したスマートな方法、そして驚愕の数式パズルまで、あなたのレベルや目的に合った最適な「累計」が必ず見つかります。
さあ、日々の集計作業を劇的に効率化する旅に出ましょう!
今回のミッション
現在の状態: A列に日付、B列にその日の売上が記録された、シンプルな売上レポートがあります。

目指すゴール: C列に、B列の売上が日々積み上がっていく「累計」を計算します。
今回は、まず「1行ずつ数式をコピーしていく伝統的な方法」を2つ、
次に「1つの数式で全期間の累計を一気に表示させる最新の方法」を3つ紹介します。

Part 1:伝統的なアプローチ(フィルコピー)
まずは、多くの人が慣れ親しんでいるであろう、数式を下の行にコピーしていく方法です。
アプローチ1:上のセル + 今日の売上
考えかた
最も直感的で、Excelを学び始めた人が最初に思いつくであろう方法です。
そのロジックは、「昨日の累計 + 今日の売上 = 今日の累計」という、まさに見たままの計算です。
数式と解説
この方法は、2つのステップで数式を入力します。
Step 1: 開始日の累計
まず、累計の開始点であるC2セルには、初日の売上をそのまま表示させます。
=B2

Step 2: 2日目以降の累計
次に、C3セルに「昨日の累計(C2セル) + 今日の売上(B3セル)」という数式を入力します。
=C2+B3

最後に、C3セルのフィルハンドル(セルの右下の小さい■)をダブルクリックするか、下にドラッグして、最終行まで数式をコピーします。

この方法の長所と短所
長所は、何と言ってもその分かりやすさです。
数式が計算の意図を直接的に表現しているため、誰が見ても理解できます。
一方で、短所は「脆さ」です。この方法は、前の行の計算結果に依存する「数珠つなぎ」の状態です。
もし、途中の行をうっかり削除したり、並べ替えを行ったりすると、その行以降の計算がすべて「#REF!」エラーになってしまいます。
データの変動が少ない、固定されたレポートには使えますが、注意が必要な方法です。
下記は途中の行を削除した場合の例。

アプローチ2:SUM + 複合参照(実務の定番!)
考えかた
次に紹介するのは、実務で最も広く使われているであろう、非常に堅牢で信頼性の高い方法です。
「累計とは、初日から今日までの売上の合計である」という定義に立ち返り、SUM関数を使います。
ここでの最大のポイントは、SUM関数の範囲指定に「複合参照(絶対参照と相対参照の組み合わせ)」というテクニックを使い、数式をコピーするにつれて合計範囲が自動的に拡大していくように仕組むことです。
数式と解説
C2セルに、以下の数式を入力し、最終行までフィルコピーします。
=SUM($B$2:B2)

この数式の心臓部は $B$2:B2
という範囲指定にあります。
これは、初心者が最初に覚えるべき、最も重要なテクニックの一つです。
$B$2
(絶対参照): ドルマーク $
が付いた部分は、数式をどこにコピーしても「絶対に動かない」ように固定されます。
累計の開始地点は常にB2セルなので、ここを固定します。
B2
(相対参照): $
が付いていない部分は、数式をコピーすると、その移動に合わせて参照先が変化します。
この数式が、下にコピーされるとどうなるか見てみましょう。
- C2セル: =SUM($B$2:B2) → B2からB2までを合計
- C3セル: =SUM($B$2:B3) → B2からB3までを合計
- C4セル: =SUM($B$2:B4) → B2からB4までを合計

見事に、行が下がるにつれて合計範囲が自動的に広がっていきますね。
この方法は、途中の行を削除しても並べ替えても計算が壊れることがなく、非常に安定しています。
実務で累計を出す際の基本形として、ぜひマスターしておきましょう。
Part 2:最新のアプローチ(単一数式で一括計算)
ここからは、最新のExcel(Web版やMicrosoft 365)の力を解放します。
C2セルに数式を一つ入力するだけで、全期間の累計を一気にスピルさせて表示する方法です。
アプローチ3:SCAN + LAMBDA(新時代の累計計算)
考えかた
最初に紹介するのは、まさに「累計計算」のために生まれてきたような最新関数、SCANとLAMBDAの組み合わせです。
この数式を理解するには、まずLAMBDA関数を知る必要があります。
これは、自分でオリジナルの関数を、数式内だけで作れてしまうという画期的な機能です。
そしてSCAN関数は、その自作したLAMBDA関数を使い、配列の各要素を順番に処理しながら、計算の途中結果をすべて表示してくれる、という高度な処理を行います。
LAMBDA関数とは?(初めての方へ)
LAMBDA関数は、これまでVBA(マクロ)を使わなければできなかった「自作関数の作成」を、ワークシート上で実現するものです。
例えば、「税抜価格から税込価格(10%)を計算する」という処理を考えてみましょう。
これをLAMBDAで書くと、次のようになります。
=LAMBDA(税抜価格, 税抜価格 * 1.1)
LAMBDA(引数, 計算式)
というシンプルな構造です。
「税抜価格」という名前の引数(変数)を自分で定義し、それを使って計算式を組み立てます。
このLAMBDA関数は、作ったその場ですぐにテストできます。
=LAMBDA(税抜価格, 税抜価格 * 1.1)(1000)
のように、後ろにカッコで引数を与えると、「1100」という結果が返ってきます。

しかし、LAMBDA関数の真価は、単体で使うことよりも、今回紹介するSCANやBYROWといった、他の関数と組み合わせることで発揮されます。
これらの関数は、配列の各要素に対して「何か決まった処理」をしたいときに使いますが、その「何か決まった処理」のレシピとして、LAMBDA関数を渡してあげるのです。
数式と解説
C2セルに、以下の数式を一つだけ入力します。
=SCAN(0,B2:B11,LAMBDA(a,b,a+b))

この数式を、LAMBDAの知識を元に詳しく見ていきましょう。
まず、SCAN関数は、SCAN(初期値, 配列, LAMBDA関数)
という形で使います。
- 初期値:
0
計算を始める前の累計の初期値です。 - 配列:
B2:B11
計算対象となる売上の配列です。 - LAMBDA関数:
LAMBDA(a,b,a+b)
SCANが各行で実行する計算の「レシピ」です。
次に、レシピであるLAMBDA関数の中身です。
- 引数1 (a): 「アキュムレータ(Accumulator)」と呼ばれ、前のステップまでの計算結果(累計)が自動的に格納されます。最初の値はSCANで指定した「0」です。
- 引数2 (b): 配列(B2:B11)の「現在の値」が順番に格納されます。
- 計算式 (a+b): 「前の累計(a) + 今の値(b)」という、まさに累計計算そのものです。
では、SCAN関数がこのレシピを使ってどのように動くのか、ステップを追ってみましょう。
1. 1行目: a=0, b=2400(B2)。レシピに従い 0+2400=2400。結果「2400」がC2に表示されます。
2. 2行目: a=2400(前の結果), b=1100(B3)。レシピに従い 2400+1100=3500。結果「3500」がC3に表示されます。
3. 3行目: a=3500(前の結果), b=2100(B4)。レシピに従い 3500+2100=5600。結果「5600」がC4に表示されます。(最後の行まで繰り返し)
以上の処理が最終行まで繰り返され、すべての途中結果が配列として一気に返されるのです。
アプローチ4:BYROW + LAMBDA(行ごとに処理を自動化)
考えかた
次に紹介するのも、最新のLAMBDAヘルパー関数の一つ、BYROWを使った方法です。
BYROW関数は、指定した範囲を「行ごと」に処理し、各行での計算結果を配列として返す関数です。
この関数を使って、アプローチ2で紹介した「=SUM($B$2:B2)
」という処理を、データ範囲のすべての行に対して自動的に実行させます。
数式と解説
C2セルに、以下の数式を一つだけ入力します。
=BYROW(B2:B11,LAMBDA(row,SUM(B$2:row)))

この数式も、BYROWとLAMBDAの役割を理解することが鍵です。
BYROW関数は BYROW(配列, LAMBDA関数)
という形で使います。
配列: B2:B11
。処理対象の範囲です。
LAMBDA関数: LAMBDA(row,SUM(B$2:row))
。各行に対して実行する計算の「レシピ」です。
LAMBDA関数のレシピの中身を見てみましょう。
引数 (row): BYROWによって処理されている「現在の行」のセル参照が、この引数に格納されます。
計算式 (SUM(B$2:row)): アプローチ2の数式と似ていますね。開始地点のB2だけを行で固定(B$2
)し、終了地点を引数row
にしています。
では、BYROWがこのレシピを使ってどのように動くか見てみましょう。
1. 1行目: BYROWはB2セルを処理します。引数row
にはB2セルが渡されます。レシピSUM(B$2:row)
が実行され、実質的に SUM(B$2:B2)
となり、結果は「2400」です。
2. 2行目: BYROWはB3セルを処理します。引数row
にはB3セルが渡されます。レシピが実行され、SUM(B$2:B3)
となり、結果は「3500」です。
3. 3行目: BYROWはB4セルを処理します。引数row
にはB4セルが渡されます。レシピが実行され、SUM(B$2:B4)
となり、結果は「5600」です。
このように、BYROW関数が、フィルコピーの操作を内部的に自動で行ってくれている、とイメージすると分かりやすいかもしれません。
アプローチ5:MMULT関数を利用
考えかた
最後に、最新関数を使わずに、どうにかしてスピルさせられないか?という探求心から生まれた、行列計算MMULT関数を使ったアプローチです。
※以下の記事でもMMLUT関数について取り上げています。
これは実用性よりも、Excelの計算能力の限界に挑む「関数パズル」としての側面が強いですが、そのロジックは非常に興味深いものです。
行列計算の力を使って、「下三角行列」と呼ばれる特殊な行列を作り出し、それと売上の配列を掛け合わせることで、一気に累計を計算します。
数式と解説
C2セルに、以下の数式を一つだけ入力します。
=MMULT(TRANSPOSE((ROW(B2:B11)<=COLUMN(B2:K2))*B2:B11),ROW(B2:B11)^0)

この数式は、3つのパートに分解できます。
パート1: (ROW(B2:B11)<=COLUMN(B2:K2))
– 下三角行列の作成
ROW(B2:B11)
は縦に並ぶ{2;3;…}、COLUMN(B2:K2)
は横に並ぶ{2,3,…}という配列を返します。
この2つを比較演算子<=
で比較すると、行番号が列番号以下の場合にTRUE(1)となる、10×10の行列が生成されます。これが「下三角行列」です。

パート2: ... * B2:B11
– 売上との掛け合わせ
この行列に、売上配列を掛け合わせます。すると、各行において、その行までの売上が残り、未来の売上が0になるような行列ができます。

パート3: MMULT(TRANSPOSE(...),ROW(B2:B11)^0)
– 行列計算で合計
最後に、この行列の各行を合計するためにMMULT関数を使います。
ROW(B2:B11)^0
は、すべての要素が1になる縦長の配列{1;1;...;1}
を生成するテクニックです。(売上に0があってもエラーにならないように、ROW関数を使っています)

行列計算のルールにより、パート2の行列と、この「1だらけの配列」を掛け合わせることで、各行の合計、つまり「累計」が一気に計算されるのです。
まとめ
今回は、「累計」を計算するための5つのアプローチを紹介しました。
実務で最もおすすめなのは、アプローチ2の=SUM($B$2:B2)
です。
数式の意味が分かりやすく、Excelのバージョンを問わず、誰でも使える堅牢な方法です。まずはこの形をマスターしましょう。
もし、あなたが最新のExcelを使っているなら、アプローチ3のSCAN
関数は非常に強力です。
一度覚えてしまえば、累計計算をこれ以上なくシンプルに記述できます。
アプローチ1や5は、それぞれ特定の状況下での注意点や複雑さがありますが、それらのロジックを理解することは、あなたのExcel関数への理解をより一層深めてくれるはずです。