SCAN関数の使い方|累計・残高・それまでの最大を1つの式で出す・REDUCEとの違い【実機で解説】

SCAN関数の使い方|累計・残高・それまでの最大を1つの式で出す・REDUCEとの違い【実機で解説】

SCAN 関数は、上から順に計算した途中の結果を全部並べる関数です。=SCAN(0,B2:B7,LAMBDA(a,v,a+v)) と書くと、売上の累計(1 行目まで、2 行目まで…の合計)が 1 つの式で縦に並びます。

累計を出すときに =SUM($B$2:B2) を下へコピーする代わりに使えます。この記事では、SCAN の書き方と、累計・残高・それまでの最大の出し方を、実際の Excel で確かめた結果で説明します。SCAN は Microsoft 365 の関数です。

練習用Excelファイル(無料ダウンロード)
売上と入出金の表と、この記事の SCAN・REDUCE の式をまとめた練習ファイルです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
目次

SCAN 関数の書き方

=SCAN(はじめの値, 範囲, LAMBDA(a, v, 計算))
引数意味
はじめの値計算のスタートの値(累計なら 0、残高なら最初の残高)
範囲上から順に使う値
aそれまでの結果(1 つ前の行の結果)
vいま使っている行の値
計算a と v で次の結果をどう作るか(累計なら a+v)

LAMBDA の a と v は自分で付ける名前です。1 つ目が「それまでの結果」、2 つ目が「いまの値」になります。

1. 売上の累計を出す

はじめの値を 0 にして、それまでの合計(a)にいまの売上(v)を足していきます。

=SCAN(0,B2:B7,LAMBDA(a,v,a+v))
エクセルのSCAN関数で売上の累計を1つの式で縦に並べた画面
エクセルのSCAN関数で売上の累計を1つの式で縦に並べた画面

結果は 120・200・350・410・610・700 で、最後の 700 は売上の合計と同じです。ほかの累計の出し方は 累計(累積合計)を出す方法で説明しています。

2. 入出金から残高を出す

はじめの値を最初の残高(10,000)にすると、入金(+)と出金(-)を足していった残高になります。

=SCAN(10000,C2:C7,LAMBDA(a,v,a+v))
エクセルのSCAN関数のはじめの値を10000にして入出金から残高を出した画面
エクセルのSCAN関数のはじめの値を10000にして入出金から残高を出した画面

残高は 15,000 から始まり、最後は 12,100 になりました。家計簿や小口現金の出納帳に使えます。

3. それまでの最大を出す

計算を MAX(a,v) にすると、「それまでの最大」と「いまの値」の大きいほうが残っていきます。

=SCAN(0,B2:B7,LAMBDA(a,v,MAX(a,v)))
エクセルのSCAN関数でそれまでの売上の最大を1行ずつ並べた画面
エクセルのSCAN関数でそれまでの売上の最大を1行ずつ並べた画面

結果は 120・120・150・150・200・200 で、最高記録が更新された日だけ値が変わります。

4. 最後の結果だけでよいなら REDUCE

REDUCE は書き方が SCAN と同じで、途中を並べずに最後の結果だけを返します。

=REDUCE(0,B2:B7,LAMBDA(a,v,a+v))
エクセルのREDUCE関数でSCANと同じ書き方で最後の結果だけを出した画面
エクセルのREDUCE関数でSCANと同じ書き方で最後の結果だけを出した画面

結果は 700 の 1 つだけで、SCAN の最後の値と同じです。

【実機で検証】SCAN でつまずくところ

エクセルのSCAN関数の最後の値とSUMの一致や空白や文字がまざったときの結果を確かめた画面
エクセルのSCAN関数の最後の値とSUMの一致や空白や文字がまざったときの結果を確かめた画面
ためしたこと式結果
SCAN の最後の値=TAKE(SCAN(0,SCAN!B2:B7,LAMBDA(a,v,a+v)),-1)700
SUM で合計=SUM(SCAN!B2:B7)700
空白がある A12:A14 の累計の最後=TAKE(SCAN(0,A12:A14,LAMBDA(a,v,a+v)),-1)40
文字の「あ」がある B12:B14 の累計の最後=TAKE(SCAN(0,B12:B14,LAMBDA(a,v,a+v)),-1)#VALUE!
LAMBDA の名前が 1 つだけ=SCAN(0,SCAN!B2:B7,LAMBDA(a,a+1))#VALUE!

SCAN の最後の値(700)は、SUM の合計(700)と同じでした。

途中に空白があると 0 として足され、10・(空白)・30 の累計の最後は 40 でした。文字の「あ」がまざると #VALUE! になりました。累計する列に文字が入っていないか確かめます。

LAMBDA の名前を 1 つしか書かないと #VALUE! になりました。SCAN の LAMBDA は、名前を必ず 2 つ(それまでの結果・いまの値)にします。

よくある質問

SCAN が使えない(#NAME?)ときは?

SCAN・REDUCE は Microsoft 365 の関数です。Excel 2021 以前では、=SUM($B$2:B2) を下へコピーして累計を出します。

LAMBDA の書き方がよく分からないときは?

LAMBDA は「名前を付けて、計算のしかたを書く」ものです。くわしくは LAMBDA関数の使い方で説明しています。

1 行ずつの合計を出したいときは?

縦の累計ではなく、横の 1 行ごとに合計したいときは BYROW 関数を使います。

練習用Excelファイル(無料ダウンロード)
この記事の例をまとめた練習ファイルです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

あわせて読みたい:関連記事

ローン返済の利息と元金を分けるなら、IPMT・PPMT関数の使い方もあわせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次