クイックナビゲーション
SCAN 関数
概要
SCAN 関数は LAMBDA 関数を使用して配列の各要素を順次処理し、各中間計算結果を含む配列を返します。累積計算や逐次処理に最適で、従来の補助列を使用せずに複雑な配列操作を実行できます。
構文
=SCAN([initial_value], array, lambda(accumulator, value, body))
パラメータ
| パラメータ | タイプ | 必須 | 説明 |
|---|---|---|---|
| initial_value | Any |
はい | 処理開始時のアキュムレーター初期値。計算種別に応じて適切な値を設定。 |
| array | Array |
はい | スキャン対象となる配列データ。複数列・行に対応。 |
| lambda | LAMBDA |
はい | 累積計算ロジックを定義する LAMBDA 関数。3つの引数(accumulator, value, body)が必要。 |
SCAN関数の使用
SCAN は配列の各要素に対して累積計算を実行し、すべての途中経過結果を配列として返します。階乗計算、累積合計、文字列連結などの逐次処理に使用します。従来の方法では補助列が必要でしたが、SCAN により1つの数式で完結します。
SCANの一般的な例
階乗のリスト作成
=SCAN(1, A1:A5, LAMBDA(a,b,a*b))
1から5までの階乗(1, 1, 2, 6, 24, 120)を1式で計算。a は累積値、b は現在の値。
累積合計
=SCAN(0, B1:B10, LAMBDA(acc,val,acc+val))
指定範囲の累積合計を計算。initial_value を 0 に設定。
文字列連結
=SCAN("", C1:C5, LAMBDA(acc,val,acc&val))
配列内の文字列を順次連結。initial_value は空文字列 "" 。
よくある質問
SCAN は全中間結果を配列で返すのに対し、REDUCE は最終結果のみを返します。累積過程が必要な場合に SCAN を使用。
SCAN では必ず 3 個(accumulator, value, body)が必要です。不足すると #VALUE! エラーが発生。
はい。列ごと・行ごとに独立してスキャンを実行します。
一般的なエラーと解決策
#VALUE! エラー
Cause: LAMBDA に不正なパラメーター数または無効な LAMBDA 関数
Solution: LAMBDA(acc,val,計算式)の形式で 3 つのパラメーターを正確に記述。
#N/A エラー
Cause: 配列内にエラー値が存在
Solution: 配列データを事前に確認し、エラー値を除去または IFERROR で処理。
予期しない結果
Cause: initial_value の型が不適切
Solution: 数値計算は 0 または 1、文字列は "" を設定。
注記
- Excel 365 および Excel 2021 でのみ使用可能
- MAP/REDUCE/BYCOL/BYROW と組み合わせると強力
- 動的配列関数群の一部として設計
- パフォーマンスが優れた大規模配列処理に最適
互換性
利用可能: Excel 365, Excel 2021
利用不可: Excel 2019 以前, Excel 2016 以前
コンテンツ最終レビュー: December 9, 2025
更新頻度: 必要に応じて
テスト済みExcelバージョン: Excel 365, Excel 2021