ExcelのSCAN関数の使い方|REDUCEとの違いと累計・残高推移への活用法

スポンサーリンク

REDUCE関数で累計を求めようとして、「最終値しか返らない」と困ったことはありませんか。

そんなときに使えるのがSCAN関数です。各ステップの計算結果を配列でまとめて返してくれます。

この記事では、SCAN関数の構文とREDUCEとの違い、累計売上・残高推移への活用例を解説します。

SCAN関数とは?

SCAN関数(読み方:スキャン)は、配列の各要素を順番に処理して累積値を求める関数です。関数名は「SCAN(走査する)」に由来します。

一言で言うと「REDUCEの中間結果版」です。

REDUCEは処理が終わった後の最終値だけを返します。SCANは各ステップの計算結果をすべて配列で返します。この違いが、2つの関数を使い分けるポイントです。

対応バージョン: Microsoft 365 / Excel 2024以降

Excel 2021ではSCAN関数は使用できません。お使いのバージョンをご確認ください。

SCAN関数の基本構文と引数の意味

=SCAN(初期値, 配列, LAMBDA(アキュムレータ, 値, 計算式))

引数は3つです。順番に確認しましょう。

第1引数:初期値

累積処理の開始値を指定します。

用途初期値
合計・累計0
積(かけ算)1
残高推移初期残高(例: 100000)
文字列連結“”(空文字)

省略した場合は0として扱われます。

第2引数:配列

処理対象の配列や範囲を指定します。縦・横どちらの範囲でも指定できます。

第3引数:LAMBDA(アキュムレータ・値・計算式)

LAMBDAには2つのパラメータを指定します。

  • アキュムレータ(a): 前ステップまでの累積値
  • 値(v): 配列の現在の要素

この2つを使って、次の累積値を返す計算式を書きます。

REDUCEとの違いを比較する

SCAN関数とREDUCE関数は、構文がほぼ同じです。戻り値の形が違います。

詳しくはExcelのREDUCE関数の使い方|配列を1つの値に集約する方法をご覧ください。

戻り値の違い(スカラー vs 配列)

比較項目REDUCESCAN
戻り値最終値のみ(1セル)全ステップの中間値(配列)
結果サイズ単一セル入力配列と同じサイズ
主な用途合計・最大値など累計・残高推移など

たとえば、B2:B6に{10, 20, 30, 40, 50}が入っているとします。

REDUCEを使うと結果は150の1セルです。SCANを使うと結果は{10, 30, 60, 100, 150}の5セルです。

どちらを使うべきか?

欲しいもの使う関数
最終的な合計・集計値REDUCE
各時点の累計・残高推移SCAN

最終結果だけほしい場合はREDUCEを、途中経過も一覧にしたい場合はSCANを使ってください。

基本例:累計売上を求める

B2:B13に月別の売上が入っているとします。C2セルに以下の数式を入力します。

=SCAN(0, B2:B13, LAMBDA(a, v, a+v))
引数意味
初期値0累計の開始値(1月末累計 = 1月売上)
配列B2:B13月別売上の範囲
アキュムレータ a前月までの累計
v現在月の売上
計算式a + v今月末累計 = 前月累計 + 今月売上

結果はC2:C13に自動展開(スピル)されます。

売上累計売上
1月100,000100,000
2月80,000180,000
3月120,000300,000

各月末時点の累計がひと目でわかる表になります。

NOTE

スピルエラーに注意: 展開先(C2:C13)に別のデータが入っていると#SPILL!エラーになります。展開先を空にしておいてください。

応用例:残高推移を一覧で表示する

初期残高を100,000円、入出金データをC2:C10に入力しているとします。D2セルに以下の数式を入力します。

=SCAN(100000, C2:C10, LAMBDA(残高, 取引, 残高+取引))
引数意味
初期値100000初期残高(円)
配列C2:C10入出金範囲
アキュムレータ 残高前時点の残高
取引現在の入出金額
計算式残高 + 取引取引後の残高

日付入出金残高
4/1+50,000150,000
4/3-30,000120,000
4/5+20,000140,000

NOTE

入力規則: 入金はプラス値、出金はマイナス値で入力してください。

LAMBDAのパラメータに残高取引のような日本語名を使うと、数式の意図が読み取りやすくなります。

よくある間違いと注意点

初期値を省略するとどうなる?

初期値を省略すると0が使われます。累計や合計では問題ありません。

積(かけ算)の場合は要注意です。初期値が0だと最初のステップの結果が0になります。そのため以降の計算もすべて0になります。積を計算するときは必ず1を初期値に指定してください。

LAMBDAのパラメータは2つ必要

LAMBDAに指定するパラメータが1つや3つ以上だと#VALUE!エラーになります。「アキュムレータ」と「値」の2つセットで指定してください。

=SCAN(0, A1:A5, LAMBDA(a, v, a+v))  ' 正しい(パラメータ2つ)
=SCAN(0, A1:A5, LAMBDA(v, v+1))     ' エラー(パラメータ1つ)

対応バージョン(Microsoft 365 / Excel 2024以降)

バージョン対応
Microsoft 365
Excel 2024
Excel 2021x
Excel 2019以前x

Excel 2021ではLAMBDA関数自体は使えます。ただしSCANなどのLAMBDAヘルパー関数は対応していません。

エラー一覧

状況エラー
LAMBDAのパラメータ数が2以外#VALUE!
不正なLAMBDAを指定した場合#VALUE!
展開先に既存データがある場合#SPILL!
空の配列を渡した場合#CALC!

まとめ:SCAN関数はこんな場面で使う

SCAN関数は配列を累積処理して各ステップの結果を配列で返す関数です。

場面使う関数
最終的な合計だけほしいREDUCE
各時点の累計・残高推移がほしいSCAN
各要素を変換して同サイズで返したいMAP
行ごとに集約したいBYROW
列ごとに集約したいBYCOL

REDUCE・MAP・BYROW・BYCOLと組み合わせて使うことで、複雑な配列処理も実現できます。

関連記事:

タイトルとURLをコピーしました