<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SCAN関数 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/scan%e9%96%a2%e6%95%b0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Thu, 04 Jun 2026 07:35:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>SCAN関数 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ExcelのSCAN関数の使い方｜REDUCEとの違いと累計・残高推移への活用法</title>
		<link>https://mashukabu.com/excel-function-howto-use-scan/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-scan/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 15:36:47 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[SCAN関数]]></category>
		<category><![CDATA[累計]]></category>
		<category><![CDATA[配列関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5914</guid>

					<description><![CDATA[ExcelのSCAN関数の使い方を解説。REDUCEとの違い（最終値のみ vs 全ステップを配列で返す）を表で整理し、累計売上・残高推移などの実務活用例をサンプル付きで紹介します。Microsoft 365 / Excel 2024以降対応。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">REDUCE関数で累計を求めようとして、「最終値しか返らない」と困ったことはありませんか。</p>



<p class="wp-block-paragraph">そんなときに使えるのがSCAN関数です。各ステップの計算結果を配列でまとめて返してくれます。</p>



<p class="wp-block-paragraph">この記事では、SCAN関数の構文とREDUCEとの違い、累計売上・残高推移への活用例を解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">SCAN関数とは？</a></li><li><a href="#toc2" tabindex="0">SCAN関数の基本構文と引数の意味</a><ol><li><a href="#toc3" tabindex="0">第1引数：初期値</a></li><li><a href="#toc4" tabindex="0">第2引数：配列</a></li><li><a href="#toc5" tabindex="0">第3引数：LAMBDA（アキュムレータ・値・計算式）</a></li></ol></li><li><a href="#toc6" tabindex="0">REDUCEとの違いを比較する</a><ol><li><a href="#toc7" tabindex="0">戻り値の違い（スカラー vs 配列）</a></li><li><a href="#toc8" tabindex="0">どちらを使うべきか？</a></li></ol></li><li><a href="#toc9" tabindex="0">基本例：累計売上を求める</a></li><li><a href="#toc10" tabindex="0">応用例：残高推移を一覧で表示する</a></li><li><a href="#toc11" tabindex="0">よくある間違いと注意点</a><ol><li><a href="#toc12" tabindex="0">初期値を省略するとどうなる？</a></li><li><a href="#toc13" tabindex="0">LAMBDAのパラメータは2つ必要</a></li><li><a href="#toc14" tabindex="0">対応バージョン（Microsoft 365 / Excel 2024以降）</a></li><li><a href="#toc15" tabindex="0">エラー一覧</a></li></ol></li><li><a href="#toc16" tabindex="0">まとめ：SCAN関数はこんな場面で使う</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">SCAN関数とは？</span></h2>



<p class="wp-block-paragraph">SCAN関数（読み方：スキャン）は、配列の各要素を順番に処理して累積値を求める関数です。関数名は「SCAN（走査する）」に由来します。</p>



<p class="wp-block-paragraph">一言で言うと「REDUCEの中間結果版」です。</p>



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



<p class="wp-block-paragraph"><strong>対応バージョン</strong>: Microsoft 365 / Excel 2024以降</p>



<p class="wp-block-paragraph">Excel 2021ではSCAN関数は使用できません。お使いのバージョンをご確認ください。</p>



<h2 class="wp-block-heading"><span id="toc2">SCAN関数の基本構文と引数の意味</span></h2>



<pre class="wp-block-code"><code>=SCAN(初期値, 配列, LAMBDA(アキュムレータ, 値, 計算式))</code></pre>



<p class="wp-block-paragraph">引数は3つです。順番に確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc3">第1引数：初期値</span></h3>



<p class="wp-block-paragraph">累積処理の開始値を指定します。</p>



<figure class="wp-block-table"><table><thead><tr><th>用途</th><th>初期値</th></tr></thead><tbody><tr><td>合計・累計</td><td>0</td></tr><tr><td>積（かけ算）</td><td>1</td></tr><tr><td>残高推移</td><td>初期残高（例: 100000）</td></tr><tr><td>文字列連結</td><td>&#8220;&#8221;（空文字）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">省略した場合は0として扱われます。</p>



<h3 class="wp-block-heading"><span id="toc4">第2引数：配列</span></h3>



<p class="wp-block-paragraph">処理対象の配列や範囲を指定します。縦・横どちらの範囲でも指定できます。</p>



<h3 class="wp-block-heading"><span id="toc5">第3引数：LAMBDA（アキュムレータ・値・計算式）</span></h3>



<p class="wp-block-paragraph">LAMBDAには2つのパラメータを指定します。</p>



<ul class="wp-block-list"><li><strong>アキュムレータ（a）</strong>: 前ステップまでの累積値</li><li><strong>値（v）</strong>: 配列の現在の要素</li></ul>



<p class="wp-block-paragraph">この2つを使って、次の累積値を返す計算式を書きます。</p>



<h2 class="wp-block-heading"><span id="toc6">REDUCEとの違いを比較する</span></h2>



<p class="wp-block-paragraph">SCAN関数とREDUCE関数は、構文がほぼ同じです。戻り値の形が違います。</p>



<p class="wp-block-paragraph">詳しくは<a href="https://mashukabu.com/excel-function-howto-use-reduce/">ExcelのREDUCE関数の使い方｜配列を1つの値に集約する方法</a>をご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc7">戻り値の違い（スカラー vs 配列）</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>REDUCE</th><th>SCAN</th></tr></thead><tbody><tr><td>戻り値</td><td>最終値のみ（1セル）</td><td>全ステップの中間値（配列）</td></tr><tr><td>結果サイズ</td><td>単一セル</td><td>入力配列と同じサイズ</td></tr><tr><td>主な用途</td><td>合計・最大値など</td><td>累計・残高推移など</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば、B2:B6に<code>{10, 20, 30, 40, 50}</code>が入っているとします。</p>



<p class="wp-block-paragraph">REDUCEを使うと結果は<code>150</code>の1セルです。SCANを使うと結果は<code>{10, 30, 60, 100, 150}</code>の5セルです。</p>



<h3 class="wp-block-heading"><span id="toc8">どちらを使うべきか？</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>欲しいもの</th><th>使う関数</th></tr></thead><tbody><tr><td>最終的な合計・集計値</td><td>REDUCE</td></tr><tr><td>各時点の累計・残高推移</td><td>SCAN</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最終結果だけほしい場合はREDUCEを、途中経過も一覧にしたい場合はSCANを使ってください。</p>



<h2 class="wp-block-heading"><span id="toc9">基本例：累計売上を求める</span></h2>



<p class="wp-block-paragraph">B2:B13に月別の売上が入っているとします。C2セルに以下の数式を入力します。</p>



<pre class="wp-block-code"><code>=SCAN(0, B2:B13, LAMBDA(a, v, a+v))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>値</th><th>意味</th></tr></thead><tbody><tr><td>初期値</td><td><code>0</code></td><td>累計の開始値（1月末累計 = 1月売上）</td></tr><tr><td>配列</td><td><code>B2:B13</code></td><td>月別売上の範囲</td></tr><tr><td>アキュムレータ <code>a</code></td><td>&#8212;</td><td>前月までの累計</td></tr><tr><td>値 <code>v</code></td><td>&#8212;</td><td>現在月の売上</td></tr><tr><td>計算式</td><td><code>a + v</code></td><td>今月末累計 = 前月累計 + 今月売上</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">結果はC2:C13に自動展開（スピル）されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>月</th><th>売上</th><th>累計売上</th></tr></thead><tbody><tr><td>1月</td><td>100,000</td><td>100,000</td></tr><tr><td>2月</td><td>80,000</td><td>180,000</td></tr><tr><td>3月</td><td>120,000</td><td>300,000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">各月末時点の累計がひと目でわかる表になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p><strong>スピルエラーに注意</strong>: 展開先（C2:C13）に別のデータが入っていると<code>#SPILL!</code>エラーになります。展開先を空にしておいてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc10">応用例：残高推移を一覧で表示する</span></h2>



<p class="wp-block-paragraph">初期残高を100,000円、入出金データをC2:C10に入力しているとします。D2セルに以下の数式を入力します。</p>



<pre class="wp-block-code"><code>=SCAN(100000, C2:C10, LAMBDA(残高, 取引, 残高+取引))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>値</th><th>意味</th></tr></thead><tbody><tr><td>初期値</td><td><code>100000</code></td><td>初期残高（円）</td></tr><tr><td>配列</td><td><code>C2:C10</code></td><td>入出金範囲</td></tr><tr><td>アキュムレータ <code>残高</code></td><td>&#8212;</td><td>前時点の残高</td></tr><tr><td>値 <code>取引</code></td><td>&#8212;</td><td>現在の入出金額</td></tr><tr><td>計算式</td><td><code>残高 + 取引</code></td><td>取引後の残高</td></tr></tbody></table></figure>



<figure class="wp-block-table"><table><thead><tr><th>日付</th><th>入出金</th><th>残高</th></tr></thead><tbody><tr><td>4/1</td><td>+50,000</td><td>150,000</td></tr><tr><td>4/3</td><td>-30,000</td><td>120,000</td></tr><tr><td>4/5</td><td>+20,000</td><td>140,000</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p><strong>入力規則</strong>: 入金はプラス値、出金はマイナス値で入力してください。</p></blockquote>



<p class="wp-block-paragraph">LAMBDAのパラメータに<code>残高</code>・<code>取引</code>のような日本語名を使うと、数式の意図が読み取りやすくなります。</p>



<h2 class="wp-block-heading"><span id="toc11">よくある間違いと注意点</span></h2>



<h3 class="wp-block-heading"><span id="toc12">初期値を省略するとどうなる？</span></h3>



<p class="wp-block-paragraph">初期値を省略すると0が使われます。累計や合計では問題ありません。</p>



<p class="wp-block-paragraph">積（かけ算）の場合は要注意です。初期値が0だと最初のステップの結果が0になります。そのため以降の計算もすべて0になります。積を計算するときは必ず<code>1</code>を初期値に指定してください。</p>



<h3 class="wp-block-heading"><span id="toc13">LAMBDAのパラメータは2つ必要</span></h3>



<p class="wp-block-paragraph">LAMBDAに指定するパラメータが1つや3つ以上だと<code>#VALUE!</code>エラーになります。「アキュムレータ」と「値」の2つセットで指定してください。</p>



<pre class="wp-block-code"><code>=SCAN(0, A1:A5, LAMBDA(a, v, a+v))  ' 正しい（パラメータ2つ）
=SCAN(0, A1:A5, LAMBDA(v, v+1))     ' エラー（パラメータ1つ）</code></pre>



<h3 class="wp-block-heading"><span id="toc14">対応バージョン（Microsoft 365 / Excel 2024以降）</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>バージョン</th><th>対応</th></tr></thead><tbody><tr><td>Microsoft 365</td><td>○</td></tr><tr><td>Excel 2024</td><td>○</td></tr><tr><td>Excel 2021</td><td>x</td></tr><tr><td>Excel 2019以前</td><td>x</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Excel 2021ではLAMBDA関数自体は使えます。ただしSCANなどのLAMBDAヘルパー関数は対応していません。</p>



<h3 class="wp-block-heading"><span id="toc15">エラー一覧</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>状況</th><th>エラー</th></tr></thead><tbody><tr><td>LAMBDAのパラメータ数が2以外</td><td><code>#VALUE!</code></td></tr><tr><td>不正なLAMBDAを指定した場合</td><td><code>#VALUE!</code></td></tr><tr><td>展開先に既存データがある場合</td><td><code>#SPILL!</code></td></tr><tr><td>空の配列を渡した場合</td><td><code>#CALC!</code></td></tr></tbody></table></figure>



<h2 class="wp-block-heading"><span id="toc16">まとめ：SCAN関数はこんな場面で使う</span></h2>



<p class="wp-block-paragraph">SCAN関数は配列を累積処理して各ステップの結果を配列で返す関数です。</p>



<figure class="wp-block-table"><table><thead><tr><th>場面</th><th>使う関数</th></tr></thead><tbody><tr><td>最終的な合計だけほしい</td><td>REDUCE</td></tr><tr><td>各時点の累計・残高推移がほしい</td><td>SCAN</td></tr><tr><td>各要素を変換して同サイズで返したい</td><td>MAP</td></tr><tr><td>行ごとに集約したい</td><td>BYROW</td></tr><tr><td>列ごとに集約したい</td><td>BYCOL</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">REDUCE・MAP・BYROW・BYCOLと組み合わせて使うことで、複雑な配列処理も実現できます。</p>



<p class="wp-block-paragraph"><strong>関連記事</strong>:</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-reduce/">REDUCE関数の使い方｜配列を1つの値に集約する方法</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-map/">MAP関数の使い方｜BYROWとの違いと使い分け</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-byrow/">BYROW関数の使い方｜行ごとに関数を適用</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-bycol/">BYCOL関数の使い方｜列ごとに関数適用</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-scan/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのREDUCE関数の使い方｜配列を1つの値に集約する方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-reduce/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-reduce/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 15:36:44 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[LAMBDA]]></category>
		<category><![CDATA[LAMBDAヘルパー関数]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[REDUCE関数]]></category>
		<category><![CDATA[SCAN関数]]></category>
		<category><![CDATA[中級者向け]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5912</guid>

					<description><![CDATA[ExcelのREDUCE関数の使い方を中級者向けに解説。初期値・累積値の概念から条件付き集計・累積割引などの実務パターン、SCAN関数との違い、LAMBDAヘルパー関数の比較表まで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ExcelのLAMBDAヘルパー関数を触っていて、「REDUCE関数って何に使うの？」と感じたことはありませんか。MAPやBYROWは直感的に使えても、REDUCEは「初期値」「累積値」という聞きなれない概念が出てきて、手が止まりがちです。</p>



<p class="wp-block-paragraph">「配列を1つの値にまとめたいけど、SUMやPRODUCTでは条件が足りない」——そんな場面こそ、REDUCE関数の出番です。公式ドキュメントだけでは処理の流れがつかみづらいですよね。でもステップを追って見ればやっていることはシンプルですよ。</p>



<p class="wp-block-paragraph">この記事では、ExcelのREDUCE関数の使い方を構文から実務パターンまで中級者向けに解説します。初期値・累積値の概念をステップバイステップで説明し、条件付き集計や文字列結合などの実務例もカバーします。SCAN関数との使い分けまで押さえれば、REDUCE関数を自信を持って使いこなせるようになりますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">ExcelのREDUCE関数とは？</a><ol><li><a href="#toc2" tabindex="0">LAMBDAヘルパー関数グループとは</a></li></ol></li><li><a href="#toc3" tabindex="0">REDUCE関数の書き方（構文と引数）</a><ol><li><a href="#toc4" tabindex="0">基本構文</a></li><li><a href="#toc5" tabindex="0">引数の詳細</a></li><li><a href="#toc6" tabindex="0">初期値・累積値とは？</a></li></ol></li><li><a href="#toc7" tabindex="0">REDUCE関数の基本的な使い方</a><ol><li><a href="#toc8" tabindex="0">数値の合計を求める（SUM相当）</a></li><li><a href="#toc9" tabindex="0">数値の積を求める（PRODUCT相当）</a></li><li><a href="#toc10" tabindex="0">文字列を連結する</a></li></ol></li><li><a href="#toc11" tabindex="0">REDUCE関数の実務活用パターン</a><ol><li><a href="#toc12" tabindex="0">パターン1: 条件付きで数値を集計する</a></li><li><a href="#toc13" tabindex="0">パターン2: 区切り文字付きで文字列を結合する</a></li><li><a href="#toc14" tabindex="0">パターン3: 累積割引率を計算する</a></li></ol></li><li><a href="#toc15" tabindex="0">SCAN関数との違い・使い分け</a></li><li><a href="#toc16" tabindex="0">LAMBDAヘルパー関数の比較表</a></li><li><a href="#toc17" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc18" tabindex="0">#VALUE!エラー</a></li><li><a href="#toc19" tabindex="0">#NAME?エラー</a></li><li><a href="#toc20" tabindex="0">#CALC!エラー</a></li><li><a href="#toc21" tabindex="0">結果が0になる（初期値ミス）</a></li></ol></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">ExcelのREDUCE関数とは？</span></h2>



<p class="wp-block-paragraph">REDUCE関数は「リデュース」と読みます。英語の&#8221;reduce&#8221;は「減らす・まとめる」という意味です。プログラミングの世界では「配列を1つの値に畳み込む操作」を指します。JavaScriptの<code>Array.reduce</code>やPythonの<code>functools.reduce</code>と同じ概念ですね。</p>



<p class="wp-block-paragraph">ExcelのREDUCE関数は、配列の要素を順番に処理し、<strong>最終的に1つの値にまとめて返す</strong>関数です。<a href="https://mashukabu.com/excel-function-howto-use-lambda/">LAMBDA関数</a>と組み合わせて使う「LAMBDAヘルパー関数」の1つで、Microsoft 365およびExcel 2024で利用できます。</p>



<p class="wp-block-paragraph">たとえばA1:A5に{10, 20, 30, 40, 50}が入っているとします。REDUCE関数で合計を求めると150という1つの値が返ります。「それならSUMで十分では？」と思うかもしれません。REDUCEの強みは、LAMBDA内に自由な計算ロジックを書ける点にあります。条件付きの集計や累積割引率の計算など、SUMやPRODUCTでは書けない柔軟な処理を実現できますよ。</p>



<h3 class="wp-block-heading"><span id="toc2">LAMBDAヘルパー関数グループとは</span></h3>



<p class="wp-block-paragraph">LAMBDAヘルパー関数とは、LAMBDA関数と組み合わせて使う前提で設計された関数群の総称です。以下の6つが該当します。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-map/">MAP</a>：各セルにLAMBDAを適用して変換</li><li><a href="https://mashukabu.com/excel-function-howto-use-byrow/">BYROW</a>：行ごとにLAMBDAを適用して集計</li><li><a href="https://mashukabu.com/excel-function-howto-use-bycol/">BYCOL</a>：列ごとにLAMBDAを適用して集計</li><li>REDUCE：配列全体を1つの値に集約</li><li>SCAN：累積計算の途中経過をすべて返す</li><li>MAKEARRAY：指定したサイズの配列をゼロから生成</li></ul>



<p class="wp-block-paragraph">これらは2022年頃にMicrosoft 365とGoogleスプレッドシートで導入されました。LAMBDA関数の基本を押さえておくと理解が早いです。初めての方は先に<a href="https://mashukabu.com/excel-function-howto-use-lambda/">LAMBDA関数の基本記事</a>を読んでおくとスムーズですよ。</p>



<h2 class="wp-block-heading"><span id="toc3">REDUCE関数の書き方（構文と引数）</span></h2>



<p class="wp-block-paragraph">ここからはREDUCE関数の構文を見ていきましょう。引数は3つだけなので、順番と役割を押さえれば難しくありません。</p>



<h3 class="wp-block-heading"><span id="toc4">基本構文</span></h3>



<p class="wp-block-paragraph">REDUCE関数の構文は以下のとおりです。</p>



<pre class="wp-block-code"><code>=REDUCE(初期値, 配列, LAMBDA(累積値, 現在値, 計算式))</code></pre>



<p class="wp-block-paragraph">シンプルな合計の例を見てみましょう。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A1:A5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">この数式は、初期値0から始めてA1:A5の値を順番に足し合わせます。<code>acc</code>が累積値、<code>val</code>が現在処理中の要素です。変数名は自由に付けられますが、<code>acc</code>（accumulator）と<code>val</code>（value）が定番ですよ。</p>



<h3 class="wp-block-heading"><span id="toc5">引数の詳細</span></h3>



<p class="wp-block-paragraph">引数の意味を表で整理します。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>初期値（initial_value）</td><td>必須</td><td>累積処理の開始値。合計なら<code>0</code>、積なら<code>1</code>、文字列結合なら<code>""</code>を指定</td></tr><tr><td>配列（array）</td><td>必須</td><td>処理対象のセル範囲または配列</td></tr><tr><td>LAMBDA</td><td>必須</td><td>仮引数は必ず2つ（累積値, 現在値）。3番目に計算式を記述</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">重要なルールが2つあります。<strong>LAMBDAの仮引数は必ず2つ</strong>でなければなりません。1つや3つにすると<code>#VALUE!</code>エラーが発生します。また<strong>初期値の型は処理内容に合わせる</strong>必要があります。数値の合計に<code>""</code>を渡すと型の不整合でエラーになりますよ。</p>



<h3 class="wp-block-heading"><span id="toc6">初期値・累積値とは？</span></h3>



<p class="wp-block-paragraph">REDUCE関数を理解するカギは「初期値」と「累積値」の概念です。A1:A3に{10, 20, 30}が入っている例で、処理の流れを見てみましょう。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A1:A3, LAMBDA(acc, val, acc + val))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>ステップ</th><th>acc（累積値）</th><th>val（現在値）</th><th>計算</th><th>結果</th></tr></thead><tbody><tr><td>開始</td><td>0（初期値）</td><td>—</td><td>—</td><td>—</td></tr><tr><td>1</td><td>0</td><td>10</td><td>0 + 10</td><td>10</td></tr><tr><td>2</td><td>10</td><td>20</td><td>10 + 20</td><td>30</td></tr><tr><td>3</td><td>30</td><td>30</td><td>30 + 30</td><td>60</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最終的に返るのは最後のステップの結果<strong>60</strong>だけです。途中経過の10や30は出力されません。「途中経過も見たい」という場合はSCAN関数を使います（後のセクションで解説します）。</p>



<p class="wp-block-paragraph">前のステップの結果が次のステップの<code>acc</code>に引き継がれていく仕組みが「累積処理」です。初期値はこの連鎖の出発点になる値ですよ。</p>



<h2 class="wp-block-heading"><span id="toc7">REDUCE関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">構文が分かったところで、基本パターンを3つ見ていきましょう。SUMやPRODUCTに相当する処理をREDUCEで書くと、仕組みの理解が深まります。</p>



<h3 class="wp-block-heading"><span id="toc8">数値の合計を求める（SUM相当）</span></h3>



<p class="wp-block-paragraph">最もシンプルな使い方です。A1:A5に{10, 20, 30, 40, 50}が入っているとします。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A1:A5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">初期値<code>0</code>から始めて各要素を順に足し合わせ、<strong>150</strong>を返します。これは<code>=SUM(A1:A5)</code>と同じ結果です。「わざわざREDUCEを使う意味は？」と思うかもしれません。この基本形をベースにLAMBDA内の計算式を変えれば、SUMでは書けない柔軟な処理に拡張できますよ。</p>



<h3 class="wp-block-heading"><span id="toc9">数値の積を求める（PRODUCT相当）</span></h3>



<p class="wp-block-paragraph">掛け算の場合は初期値を<code>1</code>にします。A1:A4に{2, 3, 4, 5}が入っている例です。</p>



<pre class="wp-block-code"><code>=REDUCE(1, A1:A4, LAMBDA(acc, val, acc * val))</code></pre>



<p class="wp-block-paragraph">初期値<code>1</code>から始めて、1×2=2、2×3=6、6×4=24、24×5=<strong>120</strong>を返します。<code>=PRODUCT(A1:A4)</code>と同じ結果です。</p>



<p class="wp-block-paragraph">ここで注意したいのが初期値です。<strong>積を求めるときに初期値を<code>0</code>にすると、結果は常に0になります</strong>。0に何を掛けても0のためです。処理内容に合った値を設定してくださいね。</p>



<h3 class="wp-block-heading"><span id="toc10">文字列を連結する</span></h3>



<p class="wp-block-paragraph">文字列を連結する場合は、初期値を空文字<code>""</code>にします。A1:A3に{&#8220;東京&#8221;, &#8220;大阪&#8221;, &#8220;名古屋&#8221;}が入っている例です。</p>



<pre class="wp-block-code"><code>=REDUCE(&quot;&quot;, A1:A3, LAMBDA(acc, val, acc &amp; val))</code></pre>



<p class="wp-block-paragraph">結果は「<strong>東京大阪名古屋</strong>」です。空文字からスタートして、要素を順番につなぎ合わせます。区切り文字を入れたい場合は次のセクションで紹介しますね。</p>



<h2 class="wp-block-heading"><span id="toc11">REDUCE関数の実務活用パターン</span></h2>



<p class="wp-block-paragraph">ここからは「SUMやPRODUCTでは書けない処理」を実務例で見ていきます。REDUCEの真価が発揮される場面です。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン1: 条件付きで数値を集計する</span></h3>



<p class="wp-block-paragraph">A列に商品名、B列に売上がある表で、「りんご」の売上だけを合計したいケースです。</p>



<figure class="wp-block-table"><table><thead><tr><th>A列（商品名）</th><th>B列（売上）</th></tr></thead><tbody><tr><td>りんご</td><td>300</td></tr><tr><td>みかん</td><td>200</td></tr><tr><td>りんご</td><td>500</td></tr><tr><td>バナナ</td><td>150</td></tr><tr><td>りんご</td><td>400</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>=REDUCE(0, SEQUENCE(5), LAMBDA(acc, i, acc + IF(INDEX(A1:A5, i)=&quot;りんご&quot;, INDEX(B1:B5, i), 0)))</code></pre>



<p class="wp-block-paragraph">この数式はSEQUENCE(5)で1〜5の行番号を生成します。各行のA列が「りんご」ならB列の値を加算し、そうでなければ0を加算します。結果は300+500+400=<strong>1200</strong>です。</p>



<p class="wp-block-paragraph">「それなら<a href="https://mashukabu.com/excel-function-howto-use-sumif/">SUMIF関数</a>で十分では？」と思うかもしれません。確かにこの例ならSUMIFのほうがシンプルです。しかしREDUCEなら、LAMBDA内のIF条件をいくらでも複雑にできます。複数条件の組み合わせや、計算途中でロジックを変えたい場合に威力を発揮しますよ。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン2: 区切り文字付きで文字列を結合する</span></h3>



<p class="wp-block-paragraph">A1:A4に{&#8220;東京&#8221;, &#8220;大阪&#8221;, &#8220;名古屋&#8221;, &#8220;福岡&#8221;}が入っていて、カンマ区切りで結合したいケースです。</p>



<pre class="wp-block-code"><code>=REDUCE(&quot;&quot;, A1:A4, LAMBDA(acc, val, IF(acc=&quot;&quot;, val, acc &amp; &quot;, &quot; &amp; val)))</code></pre>



<p class="wp-block-paragraph">結果は「<strong>東京, 大阪, 名古屋, 福岡</strong>」です。ポイントはIF文で「accが空文字なら区切り文字を付けない」という分岐を入れている点です。これがないと先頭に余計なカンマが付いてしまいます。</p>



<p class="wp-block-paragraph">Excel 2019以降にはTEXTJOIN関数がありますが、REDUCE版なら結合時に条件フィルターを組み込めます。要素ごとに加工しながら結合したい場合にも便利ですよ。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン3: 累積割引率を計算する</span></h3>



<p class="wp-block-paragraph">B1:B4に月ごとの割引率{10%, 5%, 15%, 8%}が入っていて、4か月間の累積割引後の残存率を求めたいケースです。</p>



<pre class="wp-block-code"><code>=REDUCE(1, B1:B4, LAMBDA(acc, rate, acc * (1 - rate)))</code></pre>



<p class="wp-block-paragraph">処理の流れを追ってみましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>ステップ</th><th>acc</th><th>rate</th><th>計算</th><th>結果</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>10%</td><td>1 × 0.9</td><td>0.9</td></tr><tr><td>2</td><td>0.9</td><td>5%</td><td>0.9 × 0.95</td><td>0.855</td></tr><tr><td>3</td><td>0.855</td><td>15%</td><td>0.855 × 0.85</td><td>0.72675</td></tr><tr><td>4</td><td>0.72675</td><td>8%</td><td>0.72675 × 0.92</td><td>0.66861</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">最終結果は約<strong>0.669</strong>（66.9%）です。元の値の66.9%が残る、つまり累積で約33.1%の割引が適用されたことになります。「前のステップの結果に次の値を掛け合わせていく」計算は、SUMやPRODUCTだけでは書けません。REDUCEならステップごとの処理を明確に表現できますよ。</p>



<h2 class="wp-block-heading"><span id="toc15">SCAN関数との違い・使い分け</span></h2>



<p class="wp-block-paragraph">REDUCE関数とよくセットで語られるのがSCAN関数です。構文はほぼ同じですが、<strong>返す値が決定的に違います</strong>。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A1:A3, LAMBDA(acc, val, acc + val))  // → 60（最終値のみ）
=SCAN(0, A1:A3, LAMBDA(acc, val, acc + val))     // → {10, 30, 60}（各ステップの値）</code></pre>



<p class="wp-block-paragraph">A1:A3に{10, 20, 30}が入っている場合で比較します。REDUCE関数は最終値の60だけを返します。一方SCAN関数は各ステップの中間値{10, 30, 60}を配列として返します。</p>



<p class="wp-block-paragraph">使い分けの基準はシンプルです。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>戻り値</th><th>使いどころ</th></tr></thead><tbody><tr><td>REDUCE</td><td>最終値のみ（スカラー値）</td><td>合計・文字列結合など最終結果だけ欲しいとき</td></tr><tr><td>SCAN</td><td>全ステップの値（配列）</td><td>累積推移グラフ・残高推移表など途中経過が必要なとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「最終的な答えだけ欲しい」ならREDUCE、「途中経過も全部見たい」ならSCANと覚えておけば迷いませんよ。</p>



<h2 class="wp-block-heading"><span id="toc16">LAMBDAヘルパー関数の比較表</span></h2>



<p class="wp-block-paragraph">LAMBDAヘルパー関数6種の役割を「処理単位」「戻り値の形」「主な用途」の3軸で整理しました。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>処理単位</th><th>戻り値の形</th><th>主な用途</th></tr></thead><tbody><tr><td><a href="https://mashukabu.com/excel-function-howto-use-map/">MAP</a></td><td>1セル</td><td>入力と同じサイズ</td><td>セル単位の変換</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-byrow/">BYROW</a></td><td>1行</td><td>N行×1列</td><td>行ごとの集計</td></tr><tr><td><a href="https://mashukabu.com/excel-function-howto-use-bycol/">BYCOL</a></td><td>1列</td><td>1行×N列</td><td>列ごとの集計</td></tr><tr><td>REDUCE</td><td>配列全体</td><td>単一の値</td><td>全体を1つの値に集約</td></tr><tr><td>SCAN</td><td>配列全体</td><td>入力と同じサイズ</td><td>累積計算の途中経過を返す</td></tr><tr><td>MAKEARRAY</td><td>—</td><td>指定サイズ</td><td>配列をゼロから生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">迷ったときは「出力の形」から逆算してください。1つの値にしたいならREDUCE、入力と同じ形がほしいならMAPかSCANです。縦1列ならBYROW、横1行ならBYCOLですよ。</p>



<h2 class="wp-block-heading"><span id="toc17">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">REDUCE関数を使い始めると遭遇しやすいエラーをまとめました。</p>



<h3 class="wp-block-heading"><span id="toc18">#VALUE!エラー</span></h3>



<p class="wp-block-paragraph"><code>#VALUE!</code>が出る主な原因は2つです。</p>



<ul class="wp-block-list"><li><strong>LAMBDAの仮引数が2つでない</strong>: REDUCEのLAMBDAは「累積値」「現在値」の2つが必須です。1つや3つにするとエラーになります</li><li><strong>初期値の型と計算結果の型が一致しない</strong>: 数値の合計なのに初期値を文字列にした場合などに発生します</li></ul>



<pre class="wp-block-code"><code>// NG: 仮引数が1つ
=REDUCE(0, A1:A5, LAMBDA(acc, acc + 1))

// OK: 仮引数が2つ
=REDUCE(0, A1:A5, LAMBDA(acc, val, acc + val))</code></pre>



<h3 class="wp-block-heading"><span id="toc19">#NAME?エラー</span></h3>



<p class="wp-block-paragraph"><code>#NAME?</code>が出る原因は主に3つです。</p>



<ul class="wp-block-list"><li><strong>関数名のスペルミス</strong>: <code>REDCUE</code>のような打ち間違い</li><li><strong>Excel 2021以前で使用</strong>: REDUCE関数はMicrosoft 365またはExcel 2024が必要です。お使いのバージョンが対応しているか確認してみてください</li><li><strong>LAMBDA仮引数名にセル参照を使用</strong>: <code>A1</code>や<code>B2</code>のようなセル参照と同じ名前を仮引数にすると発生します。<code>acc</code>や<code>val</code>のように重ならない名前を使いましょう</li></ul>



<h3 class="wp-block-heading"><span id="toc20">#CALC!エラー</span></h3>



<p class="wp-block-paragraph"><code>#CALC!</code>はLAMBDA内部で不正な計算が行われた場合に発生します。計算式を見直し、空セルやエラー値が含まれていないか確認しましょう。</p>



<h3 class="wp-block-heading"><span id="toc21">結果が0になる（初期値ミス）</span></h3>



<p class="wp-block-paragraph">「エラーは出ないのに結果が0になる」というケースがあります。積を求めるときに初期値を<code>0</code>にすると、0×何=0のまま最後まで0が続きます。</p>



<pre class="wp-block-code"><code>// NG: 初期値が0（積の結果は常に0）
=REDUCE(0, A1:A5, LAMBDA(acc, val, acc * val))

// OK: 初期値を1にする
=REDUCE(1, A1:A5, LAMBDA(acc, val, acc * val))</code></pre>



<p class="wp-block-paragraph">積を求めるなら初期値は<code>1</code>、合計なら<code>0</code>、文字列結合なら<code>""</code>を設定してくださいね。</p>



<h2 class="wp-block-heading"><span id="toc22">まとめ</span></h2>



<p class="wp-block-paragraph">ExcelのREDUCE関数は、配列の要素を順番に処理して<strong>最終的に1つの値にまとめて返す</strong>関数です。LAMBDA内に自由な計算ロジックを書けるため、SUMやPRODUCTでは対応できない柔軟な集約処理を実現できます。</p>



<p class="wp-block-paragraph">この記事のポイントを振り返ります。</p>



<ul class="wp-block-list"><li><strong>構文</strong>: <code>=REDUCE(初期値, 配列, LAMBDA(累積値, 現在値, 計算式))</code>。LAMBDAの仮引数は必ず2つ</li><li><strong>初期値の選び方</strong>: 合計なら<code>0</code>、積なら<code>1</code>、文字列結合なら<code>""</code>。初期値のミスは結果に直結する</li><li><strong>基本パターン</strong>: SUM相当（加算）、PRODUCT相当（乗算）、文字列連結が基本の3パターン</li><li><strong>実務活用</strong>: 条件付き集計・区切り文字付き結合・累積割引率の計算など、柔軟な処理が可能</li><li><strong>SCAN関数との違い</strong>: REDUCEは最終値のみ、SCANは途中経過の配列を返す</li><li><strong>対応バージョン</strong>: Microsoft 365 / Excel 2024。Excel 2021以前は非対応</li><li><strong>よくあるエラー</strong>: <code>#VALUE!</code>（仮引数の数が不正）、<code>#NAME?</code>（スペルミス・バージョン非対応）、結果が0（初期値ミス）</li></ul>



<p class="wp-block-paragraph">REDUCE関数は「配列を1つの値に畳み込む」という概念さえ掴めれば、使い方の幅がどんどん広がります。まずは基本のSUM相当の式から試してみてください。</p>



<p class="wp-block-paragraph">LAMBDAヘルパー関数をもっと深掘りしたい方は、<a href="https://mashukabu.com/excel-function-howto-use-map/">MAP関数</a>・<a href="https://mashukabu.com/excel-function-howto-use-byrow/">BYROW関数</a>・<a href="https://mashukabu.com/excel-function-howto-use-bycol/">BYCOL関数</a>の記事もあわせてご覧ください。LAMBDA関数の基本から学びたい方は<a href="https://mashukabu.com/excel-function-howto-use-lambda/">LAMBDA関数の解説記事</a>がおすすめです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-reduce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのREDUCE関数の使い方｜配列を1値に集約</title>
		<link>https://mashukabu.com/spreadsheet-reduce-function/</link>
					<comments>https://mashukabu.com/spreadsheet-reduce-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:31:16 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[REDUCE関数]]></category>
		<category><![CDATA[SCAN関数]]></category>
		<category><![CDATA[SUM関数]]></category>
		<category><![CDATA[配列集約]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4781</guid>

					<description><![CDATA[スプレッドシートのREDUCE関数を基礎から解説。初期値・累積値の概念、LAMBDA関数との組み合わせ方、条件付き集計・累積割引など実務パターン、SUM/PRODUCT比較表、SCAN関数との使い分けまで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで「配列の値をすべて足し合わせたい」「条件に合う値だけを集計したい」と思うことはありますよね。SUM関数やPRODUCT関数でできる場面もありますが、独自の集計ロジックを組みたいときには対応しきれません。</p>



<p class="wp-block-paragraph">REDUCE関数を使えば、配列の全要素を順番に処理して、最終的に1つの値にまとめられます。「前回の計算結果を次に引き継ぐ」という仕組みで、カスタム集約が自由自在です。</p>



<p class="wp-block-paragraph">この記事では、REDUCE関数の基本からSCAN関数との違いまでわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">REDUCE関数とは？</a><ol><li><a href="#toc2" tabindex="0">REDUCE関数の基本構文</a></li><li><a href="#toc3" tabindex="0">初期値・累積値とは？</a></li><li><a href="#toc4" tabindex="0">LAMBDA関数のおさらい</a></li></ol></li><li><a href="#toc5" tabindex="0">REDUCE関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">サンプルデータ</a></li><li><a href="#toc7" tabindex="0">数値の合計を求める（SUM相当）</a></li><li><a href="#toc8" tabindex="0">数値の積を求める（PRODUCT相当）</a></li><li><a href="#toc9" tabindex="0">文字列を連結する</a></li></ol></li><li><a href="#toc10" tabindex="0">REDUCE関数の実務活用パターン</a><ol><li><a href="#toc11" tabindex="0">パターン1: 条件付きで数値を集計する</a></li><li><a href="#toc12" tabindex="0">パターン2: 区切り文字付きで文字列を結合する</a></li><li><a href="#toc13" tabindex="0">パターン3: 累積割引率を計算する</a></li></ol></li><li><a href="#toc14" tabindex="0">SUM・PRODUCT関数との比較</a></li><li><a href="#toc15" tabindex="0">SCAN関数との違い・使い分け</a><ol><li><a href="#toc16" tabindex="0">REDUCE関数が向いている場面</a></li><li><a href="#toc17" tabindex="0">SCAN関数が向いている場面</a></li></ol></li><li><a href="#toc18" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc19" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc20" tabindex="0">まとめ</a><ol><li><a href="#toc21" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">REDUCE関数とは？</span></h2>



<p class="wp-block-paragraph">REDUCE関数（読み方: リデュース関数）は、配列やセル範囲の<strong>全要素を順番に処理して、1つの値に集約する</strong>関数です。「reduce（減らす・まとめる）」が名前の由来で、複数のデータを1つに絞り込むイメージですね。</p>



<p class="wp-block-paragraph">たとえば、5個の数値が入ったセル範囲にREDUCE関数を適用すると、先頭から順に処理して最終的な1つの値を返します。SUM関数やPRODUCT関数と似ていますが、処理内容を自分で定義できるのが最大の特長です。</p>



<p class="wp-block-paragraph">REDUCE関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>配列の全要素を順番に処理して1つの値にまとめる</li><li>LAMBDA関数で処理内容を自由にカスタマイズできる</li><li>「前回の結果を次の計算に使う」累積処理ができる</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>REDUCE関数はGoogleスプレッドシート独自の関数です。Excelには対応する関数がありません。同様の処理は、SUM関数やPRODUCT関数を組み合わせて対応してください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">REDUCE関数の基本構文</span></h3>



<pre class="wp-block-code"><code>=REDUCE(初期値, 配列, LAMBDA(累積値, 現在値, 処理))</code></pre>



<p class="wp-block-paragraph">カッコの中に、初期値・処理対象の配列・各要素に適用するLAMBDA関数を指定します。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>初期値</td><td>必須</td><td>累積処理の開始値。合計なら0、積なら1、文字列結合なら&#8221;&#8221;</td></tr><tr><td>配列</td><td>必須</td><td>処理対象のセル範囲または配列</td></tr><tr><td>LAMBDA(累積値, 現在値, 処理)</td><td>必須</td><td>各要素に適用する関数。仮引数は必ず2つ</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数は必ず2つ必要です。1つ目が「ここまでの計算結果（累積値）」、2つ目が「いま処理している値（現在値）」を受け取ります。<code>acc</code>と<code>val</code>のような短い名前でもOKですよ。</p>



<h3 class="wp-block-heading"><span id="toc3">初期値・累積値とは？</span></h3>



<p class="wp-block-paragraph">REDUCE関数を理解するカギは「初期値」と「累積値」です。</p>



<p class="wp-block-paragraph">初期値は「最初に手元に何を持って始めるか」を決める値です。合計を求めるなら0、積を求めるなら1、文字列を結合するなら空文字<code>""</code>を指定します。</p>



<p class="wp-block-paragraph">累積値は「ここまでの処理結果」が入る変数です。配列の最初の要素を処理するときは初期値が入っています。2番目以降は、前回の処理結果が自動的に入ります。</p>



<p class="wp-block-paragraph">たとえば <code>=REDUCE(0, {10,20,30}, LAMBDA(acc, val, acc+val))</code> の場合、次のように動きます。</p>



<ol class="wp-block-list"><li>acc=0, val=10 → 0+10=10</li><li>acc=10, val=20 → 10+20=30</li><li>acc=30, val=30 → 30+30=60（最終結果）</li></ol>



<p class="wp-block-paragraph">初期値の0からスタートして、各要素を順番に足していくイメージです。</p>



<h3 class="wp-block-heading"><span id="toc4">LAMBDA関数のおさらい</span></h3>



<p class="wp-block-paragraph">REDUCE関数を理解するには、LAMBDA関数の基本を知っておく必要があります。</p>



<p class="wp-block-paragraph">LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。</p>



<pre class="wp-block-code"><code>=LAMBDA(引数, 処理)(値)</code></pre>



<p class="wp-block-paragraph">たとえば <code>=LAMBDA(x, x*2)(5)</code> と書くと、xに5が入って「5×2=10」が返ります。REDUCE関数の中では、このLAMBDA関数に累積値と現在値が自動的に渡される仕組みです。</p>



<h2 class="wp-block-heading"><span id="toc5">REDUCE関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">ここでは、シンプルな数値データを使ってREDUCE関数の動きを確認していきます。</p>



<h3 class="wp-block-heading"><span id="toc6">サンプルデータ</span></h3>



<p class="wp-block-paragraph">A1:A5に以下のデータが入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th></tr></thead><tbody><tr><td>1</td><td>商品名</td></tr><tr><td>2</td><td>100</td></tr><tr><td>3</td><td>200</td></tr><tr><td>4</td><td>150</td></tr><tr><td>5</td><td>250</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc7">数値の合計を求める（SUM相当）</span></h3>



<p class="wp-block-paragraph">A2:A5の合計を求めます。出力先のセル（たとえばC2）に以下の数式を入力してください。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A2:A5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">結果は <strong>700</strong> です。初期値0からスタートして、100→200→150→250を順番に足し合わせています。</p>



<p class="wp-block-paragraph">この例だけなら<a href="https://mashukabu.com/spreadsheet-sum-function/">SUM関数</a>で十分ですが、REDUCE関数の基本動作を理解する第一歩として押さえておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc8">数値の積を求める（PRODUCT相当）</span></h3>



<p class="wp-block-paragraph">各数値をすべて掛け合わせるには、初期値を1にして掛け算します。</p>



<pre class="wp-block-code"><code>=REDUCE(1, A2:A5, LAMBDA(acc, val, acc * val))</code></pre>



<p class="wp-block-paragraph">結果は <strong>750000000</strong>（100×200×150×250）です。初期値を1にするのがポイントですね。0にすると何を掛けても0になってしまいます。</p>



<h3 class="wp-block-heading"><span id="toc9">文字列を連結する</span></h3>



<p class="wp-block-paragraph">B1:B4に「東京」「大阪」「名古屋」「福岡」が入っている場合、すべてを1つにつなげられます。</p>



<pre class="wp-block-code"><code>=REDUCE(&quot;&quot;, B1:B4, LAMBDA(acc, val, acc &amp; val))</code></pre>



<p class="wp-block-paragraph">結果は <strong>東京大阪名古屋福岡</strong> です。初期値を空文字<code>""</code>にして、各要素を<code>&</code>で連結しています。</p>



<h2 class="wp-block-heading"><span id="toc10">REDUCE関数の実務活用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc11">パターン1: 条件付きで数値を集計する</span></h3>



<p class="wp-block-paragraph">REDUCE関数の真価が発揮されるのは、条件付きの集計です。A2:A5の数値のうち、150以上のものだけを合計してみましょう。</p>



<pre class="wp-block-code"><code>=REDUCE(0, A2:A5, LAMBDA(acc, val, IF(val &gt;= 150, acc + val, acc)))</code></pre>



<p class="wp-block-paragraph">結果は <strong>400</strong>（150+250）です。IF関数で条件を判定し、条件に合わないときは累積値をそのまま返しています。「条件に合わなければ何もしない」という書き方がポイントですよ。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン2: 区切り文字付きで文字列を結合する</span></h3>



<p class="wp-block-paragraph">文字列をカンマ区切りで結合する例です。そのまま<code>&</code>で繋ぐと区切りがなくなるので、ひと工夫します。</p>



<pre class="wp-block-code"><code>=REDUCE(&quot;&quot;, B1:B4, LAMBDA(acc, val, IF(acc=&quot;&quot;, val, acc &amp; &quot;, &quot; &amp; val)))</code></pre>



<p class="wp-block-paragraph">結果は <strong>東京, 大阪, 名古屋, 福岡</strong> です。初回（accが空文字）だけ区切り文字なしで値を入れ、2回目以降はカンマを付けて連結しています。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-textjoin-function/">TEXTJOIN関数</a>でも同じことができます。ただし、結合前に値を加工したい場合はREDUCE関数のほうが柔軟です。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン3: 累積割引率を計算する</span></h3>



<p class="wp-block-paragraph">複数の割引率を順番に適用する場面です。C2:C4に「10%」「5%」「3%」が入っているとします。定価10,000円に対する最終価格を求めます。</p>



<pre class="wp-block-code"><code>=REDUCE(10000, C2:C4, LAMBDA(acc, rate, acc * (1 - rate)))</code></pre>



<p class="wp-block-paragraph">結果は <strong>8,293.5</strong> です。10,000→9,000（10%引き）→8,550（5%引き）→8,293.5（3%引き）と順番に割引が適用されます。「前回の結果に次の計算を重ねる」累積処理は、REDUCE関数ならではの得意技です。</p>



<h2 class="wp-block-heading"><span id="toc14">SUM・PRODUCT関数との比較</span></h2>



<p class="wp-block-paragraph">REDUCE関数はSUM関数やPRODUCT関数の上位互換のように見えますが、使い分けが大切です。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>SUM / PRODUCT</th><th>REDUCE関数</th></tr></thead><tbody><tr><td>できること</td><td>単純な合計・積</td><td>カスタムロジックで集約</td></tr><tr><td>条件付き処理</td><td>SUMIF等を別途使う</td><td>LAMBDA内にIF文を書ける</td></tr><tr><td>累積処理</td><td>不可</td><td>前回の結果を引き継げる</td></tr><tr><td>読みやすさ</td><td>シンプルで直感的</td><td>慣れが必要</td></tr><tr><td>処理速度</td><td>高速</td><td>やや遅い</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">単純な合計は<a href="https://mashukabu.com/spreadsheet-sum-function/">SUM関数</a>、単純な積はPRODUCT関数を使いましょう。REDUCE関数の出番は「SUM/PRODUCTでは書けない処理」が必要なときです。</p>



<h2 class="wp-block-heading"><span id="toc15">SCAN関数との違い・使い分け</span></h2>



<p class="wp-block-paragraph">REDUCE関数と最も混同しやすいのがSCAN関数です。どちらも累積処理をしますが、返す結果が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>REDUCE関数</th><th>SCAN関数</th></tr></thead><tbody><tr><td>戻り値</td><td>最終値のみ（1つの値）</td><td>中間値を含む配列</td></tr><tr><td>結果の形</td><td>スカラー値</td><td>元の配列と同じサイズ</td></tr><tr><td>構文</td><td>同じ</td><td>同じ</td></tr><tr><td>典型的な用途</td><td>合計・積など最終結果だけ欲しいとき</td><td>累積合計・残高推移を表示したいとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば <code>{10, 20, 30}</code> に対して累積合計を求めた場合、結果はこうなります。</p>



<ul class="wp-block-list"><li><strong>REDUCE</strong>: 60（最終値のみ）</li><li><strong>SCAN</strong>: {10, 30, 60}（途中経過も含む配列）</li></ul>



<h3 class="wp-block-heading"><span id="toc16">REDUCE関数が向いている場面</span></h3>



<p class="wp-block-paragraph">「最終的な1つの値だけ欲しい」ときはREDUCE関数です。全体の合計金額・累積割引後の最終価格・条件付き集計の結果など、答えが1つに定まる処理に向いています。</p>



<h3 class="wp-block-heading"><span id="toc17">SCAN関数が向いている場面</span></h3>



<p class="wp-block-paragraph">「途中経過も見たい」ときはSCAN関数です。月次の累積売上推移・口座残高の推移など、各ステップの値を一覧で表示したい場面で活躍しますよ。</p>



<h2 class="wp-block-heading"><span id="toc18">LAMBDA系関数の全体像</span></h2>



<p class="wp-block-paragraph">スプレッドシートには、LAMBDA関数と組み合わせて使う関数が複数あります。全体像を把握しておくと、どの場面でどの関数を使うか判断しやすくなりますよ。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>処理単位</th><th>結果の形</th><th>主な用途</th></tr></thead><tbody><tr><td><a href="https://mashukabu.com/spreadsheet-map-function/">MAP</a></td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL</a></td><td>列ごと</td><td>横1行</td><td>列ごとの集計</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-byrow-function/">BYROW</a></td><td>行ごと</td><td>縦1列</td><td>行ごとの集計</td></tr><tr><td>REDUCE</td><td>配列全体</td><td>1つの値</td><td>全体を1つに集約</td></tr><tr><td>SCAN</td><td>累積</td><td>元と同じサイズ</td><td>累積計算の中間結果</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-makearray-function/">MAKEARRAY</a></td><td>行×列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">REDUCE関数は「全要素を1つの値にまとめる」という、最もシンプルな結果を返す関数です。集約結果だけあればいい場面で迷わず使えますね。</p>



<h2 class="wp-block-heading"><span id="toc19">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">REDUCE関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#NAME?</code></td><td>関数名のスペルミス</td><td>「REDUCE」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>REDUCE関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#N/A</code></td><td>LAMBDAの引数が2つでない</td><td>LAMBDAの仮引数は必ず2つ（累積値と現在値）にしてください</td></tr><tr><td><code>#VALUE!</code></td><td>初期値の型が処理と合わない</td><td>合計なら0、文字列結合なら&#8221;&#8221;を初期値にしてください</td></tr><tr><td><code>#ERROR!</code></td><td>LAMBDAの構文ミス</td><td>カッコの閉じ忘れ、カンマの過不足を確認してください</td></tr><tr><td>結果が0になる</td><td>初期値を0にして掛け算した</td><td>積を求めるときは初期値を1にしてください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「LAMBDAの引数が2つでない」エラーです。REDUCE関数のLAMBDAは必ず2つの仮引数（累積値と現在値）が必要です。1つや3つにすると<code>#N/A</code>エラーになるので注意してくださいね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>acc</code>（accumulator の略）と<code>val</code>（value の略）を使うのがおすすめです。累積値と現在値の役割が一目でわかります。なお、REDUCE関数は1つの配列に対して最大約39,998回まで繰り返し処理ができます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc20">まとめ</span></h2>



<p class="wp-block-paragraph">REDUCE関数は、配列の全要素を順番に処理して1つの値に集約する関数です。「前回の結果を次に引き継ぐ」累積処理ができるので、SUM関数やPRODUCT関数では対応できないカスタム集約が実現します。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしておきましょう。</p>



<ul class="wp-block-list"><li>REDUCE関数は<code>=REDUCE(初期値, 配列, LAMBDA(acc, val, 処理))</code>で、全要素を1つの値に集約する</li><li>初期値は「最初に手元に何を持って始めるか」を決める値（合計なら0、積なら1）</li><li>条件付き集計や累積割引率など、カスタムロジックの集約に強い</li><li>単純な合計・積ならSUM関数・PRODUCT関数のほうがシンプルで高速</li><li>SCAN関数は中間値も返す。最終値だけならREDUCE関数を選ぶ</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずは<code>=REDUCE(0, A2:A5, LAMBDA(acc, val, acc + val))</code>のシンプルな合計から試してみてください。初期値と累積値の仕組みがわかれば、条件付き集計や文字列結合など、さまざまな集約処理に応用できますよ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">この記事で紹介した関数・関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-sum-function/">スプレッドシートのSUM関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-textjoin-function/">スプレッドシートのTEXTJOIN関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-map-function/">スプレッドシートのMAP関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-bycol-function/">スプレッドシートのBYCOL関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-byrow-function/">スプレッドシートのBYROW関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-makearray-function/">スプレッドシートのMAKEARRAY関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-reduce-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのSCAN関数の使い方｜累積計算の中間値を返す</title>
		<link>https://mashukabu.com/spreadsheet-scan-function/</link>
					<comments>https://mashukabu.com/spreadsheet-scan-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:30:46 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[REDUCE関数]]></category>
		<category><![CDATA[SCAN関数]]></category>
		<category><![CDATA[累積計算]]></category>
		<category><![CDATA[配列関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4769</guid>

					<description><![CDATA[スプレッドシートのSCAN関数を基礎から解説。LAMBDA関数との組み合わせ方、累積合計・在庫推移・残高推移など実務パターン、REDUCE関数との違い・使い分けまで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「累積合計を一覧で表示したい」と思うことはありますよね。SUM関数で合計は出せますが、途中経過は表示できません。</p>



<p class="wp-block-paragraph">SCAN関数を使えば、各ステップの中間値を配列で返せます。累積売上や残高推移が数式1つで完成しますよ。</p>



<p class="wp-block-paragraph">この記事では、SCAN関数の基本からREDUCE関数との違いまでわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">SCAN関数とは？</a><ol><li><a href="#toc2" tabindex="0">SCAN関数の基本構文</a></li><li><a href="#toc3" tabindex="0">初期値・累積値とは？</a></li><li><a href="#toc4" tabindex="0">LAMBDA関数のおさらい</a></li></ol></li><li><a href="#toc5" tabindex="0">SCAN関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">サンプルデータ</a></li><li><a href="#toc7" tabindex="0">累積合計を求める</a></li><li><a href="#toc8" tabindex="0">累積積を求める</a></li><li><a href="#toc9" tabindex="0">文字列を逐次結合する</a></li></ol></li><li><a href="#toc10" tabindex="0">SCAN関数の実務活用パターン</a><ol><li><a href="#toc11" tabindex="0">パターン1: 月次の累積売上を表示する</a></li><li><a href="#toc12" tabindex="0">パターン2: 在庫数の推移を計算する</a></li><li><a href="#toc13" tabindex="0">パターン3: 口座残高の推移を表示する</a></li></ol></li><li><a href="#toc14" tabindex="0">REDUCE関数との違い・使い分け</a><ol><li><a href="#toc15" tabindex="0">SCAN関数が向いている場面</a></li><li><a href="#toc16" tabindex="0">REDUCE関数が向いている場面</a></li><li><a href="#toc17" tabindex="0">選び方の判断基準</a></li></ol></li><li><a href="#toc18" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc19" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc20" tabindex="0">まとめ</a><ol><li><a href="#toc21" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">SCAN関数とは？</span></h2>



<p class="wp-block-paragraph">SCAN関数（読み方: スキャン関数）は、配列の<strong>全要素を順番に処理して、各ステップの中間値を配列で返す</strong>関数です。「scan（走査する）」が名前の由来ですね。</p>



<p class="wp-block-paragraph">先頭からデータをたどりながら結果を記録するイメージです。</p>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-reduce-function/">REDUCE関数</a>が「最終値だけ」を返すのに対し、SCAN関数は「途中経過もすべて」返します。これが最大の特長です。</p>



<p class="wp-block-paragraph">SCAN関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>配列の全要素を順番に処理して中間値を配列で返す</li><li>LAMBDA関数で処理内容を自由にカスタマイズできる</li><li>「前回の結果を次の計算に使う」累積処理の途中経過が見える</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>SCAN関数はGoogleスプレッドシート独自の関数です。Excelには対応する関数がありません。同様の処理は、SUM関数と$記号を組み合わせた累積合計で対応してください。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc2">SCAN関数の基本構文</span></h3>



<pre class="wp-block-code"><code>=SCAN(初期値, 配列, LAMBDA(累積値, 現在値, 処理))</code></pre>



<p class="wp-block-paragraph">カッコの中に、初期値・処理対象の配列・各要素に適用するLAMBDA関数を指定します。構文は<a href="https://mashukabu.com/spreadsheet-reduce-function/">REDUCE関数</a>と同じです。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>初期値</td><td>必須</td><td>累積処理の開始値。合計なら0、積なら1、文字列結合なら&#8221;&#8221;</td></tr><tr><td>配列</td><td>必須</td><td>処理対象のセル範囲または配列</td></tr><tr><td>LAMBDA(累積値, 現在値, 処理)</td><td>必須</td><td>各要素に適用する関数。仮引数は必ず2つ</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数は必ず2つ必要です。1つ目が「累積値」、2つ目が「現在値」を受け取ります。</p>



<h3 class="wp-block-heading"><span id="toc3">初期値・累積値とは？</span></h3>



<p class="wp-block-paragraph">SCAN関数を理解するカギは「初期値」と「累積値」です。</p>



<p class="wp-block-paragraph">初期値は「最初に手元に何を持って始めるか」を決める値です。合計を求めるなら0、積を求めるなら1を指定します。</p>



<p class="wp-block-paragraph">累積値は「ここまでの処理結果」が入る変数です。最初の要素を処理するときは初期値が入ります。2番目以降は前回の処理結果が入ります。</p>



<p class="wp-block-paragraph">次の数式を例に動きを見てみましょう。</p>



<p class="wp-block-paragraph"><code>=SCAN(0, {10,20,30}, LAMBDA(acc, val, acc+val))</code></p>



<ol class="wp-block-list"><li>acc=0, val=10 → 0+10=10 → 配列に <strong>10</strong> を記録</li><li>acc=10, val=20 → 10+20=30 → 配列に <strong>30</strong> を記録</li><li>acc=30, val=30 → 30+30=60 → 配列に <strong>60</strong> を記録</li></ol>



<p class="wp-block-paragraph">結果は <code>{10, 30, 60}</code> です。REDUCE関数なら最終値の60だけが返ります。SCAN関数は各ステップの値をすべて返すのが違いです。</p>



<h3 class="wp-block-heading"><span id="toc4">LAMBDA関数のおさらい</span></h3>



<p class="wp-block-paragraph">SCAN関数を理解するには、LAMBDA関数の基本を知っておく必要があります。</p>



<p class="wp-block-paragraph">LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。</p>



<pre class="wp-block-code"><code>=LAMBDA(引数, 処理)(値)</code></pre>



<p class="wp-block-paragraph">たとえば <code>=LAMBDA(x, x*2)(5)</code> と書くと、xに5が入って10が返ります。SCAN関数の中では、累積値と現在値が自動的に渡されます。</p>



<h2 class="wp-block-heading"><span id="toc5">SCAN関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">ここでは、シンプルな数値データを使ってSCAN関数の動きを確認していきます。</p>



<h3 class="wp-block-heading"><span id="toc6">サンプルデータ</span></h3>



<p class="wp-block-paragraph">A1:A5に以下のデータが入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th></tr></thead><tbody><tr><td>1</td><td>売上</td></tr><tr><td>2</td><td>100</td></tr><tr><td>3</td><td>200</td></tr><tr><td>4</td><td>150</td></tr><tr><td>5</td><td>250</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc7">累積合計を求める</span></h3>



<p class="wp-block-paragraph">A2:A5の累積合計を求めます。出力先のセル（たとえばB2）に以下の数式を入力してください。</p>



<pre class="wp-block-code"><code>=SCAN(0, A2:A5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">結果は <code>{100, 300, 450, 700}</code> です。B2:B5に各ステップの累積合計が展開されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>売上</td><td>累積合計</td></tr><tr><td>2</td><td>100</td><td>100</td></tr><tr><td>3</td><td>200</td><td>300</td></tr><tr><td>4</td><td>150</td><td>450</td></tr><tr><td>5</td><td>250</td><td>700</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-sum-function/">SUM関数</a>では最終合計の700しか出せません。途中経過も見たいときはSCAN関数の出番です。</p>



<h3 class="wp-block-heading"><span id="toc8">累積積を求める</span></h3>



<p class="wp-block-paragraph">各数値を順番に掛け合わせた途中経過を表示するには、初期値を1にして掛け算します。</p>



<pre class="wp-block-code"><code>=SCAN(1, A2:A5, LAMBDA(acc, val, acc * val))</code></pre>



<p class="wp-block-paragraph">結果は <code>{100, 20000, 3000000, 750000000}</code> です。初期値を1にするのがポイントですね。0だと何を掛けても0になります。</p>



<h3 class="wp-block-heading"><span id="toc9">文字列を逐次結合する</span></h3>



<p class="wp-block-paragraph">B1:B4に「東京」「大阪」「名古屋」「福岡」が入っている場合、1つずつ追加していく過程を表示できます。</p>



<pre class="wp-block-code"><code>=SCAN(&quot;&quot;, B1:B4, LAMBDA(acc, val, IF(acc=&quot;&quot;, val, acc &amp; &quot;→&quot; &amp; val)))</code></pre>



<p class="wp-block-paragraph">各ステップで文字列が増えていく様子が一覧で確認できますよ。結果は次のとおりです。</p>



<p class="wp-block-paragraph"><code>{"東京", "東京→大阪", "東京→大阪→名古屋", "東京→大阪→名古屋→福岡"}</code></p>



<h2 class="wp-block-heading"><span id="toc10">SCAN関数の実務活用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc11">パターン1: 月次の累積売上を表示する</span></h3>



<p class="wp-block-paragraph">月ごとの売上データから、累積売上の推移を自動で表示する例です。A列に月名、B列に売上が入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>月</td><td>売上</td></tr><tr><td>2</td><td>1月</td><td>500,000</td></tr><tr><td>3</td><td>2月</td><td>620,000</td></tr><tr><td>4</td><td>3月</td><td>480,000</td></tr><tr><td>5</td><td>4月</td><td>710,000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">C2に以下の数式を入力してください。</p>



<pre class="wp-block-code"><code>=SCAN(0, B2:B5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">結果は <code>{500000, 1120000, 1600000, 2310000}</code> です。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>1</td><td>月</td><td>売上</td><td>累積売上</td></tr><tr><td>2</td><td>1月</td><td>500,000</td><td>500,000</td></tr><tr><td>3</td><td>2月</td><td>620,000</td><td>1,120,000</td></tr><tr><td>4</td><td>3月</td><td>480,000</td><td>1,600,000</td></tr><tr><td>5</td><td>4月</td><td>710,000</td><td>2,310,000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">売上レポートで「年初からの累計」を並べたい場面にぴったりです。行を追加しても数式を修正する必要がありません。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン2: 在庫数の推移を計算する</span></h3>



<p class="wp-block-paragraph">入荷と出荷のデータから、在庫数の推移を追跡する例です。初期在庫100個からスタートします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>日付</td><td>入出荷</td></tr><tr><td>2</td><td>3/1</td><td>+50</td></tr><tr><td>3</td><td>3/5</td><td>-30</td></tr><tr><td>4</td><td>3/10</td><td>+80</td></tr><tr><td>5</td><td>3/15</td><td>-60</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">C2に以下の数式を入力してください。</p>



<pre class="wp-block-code"><code>=SCAN(100, B2:B5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">結果は <code>{150, 120, 200, 140}</code> です。初期値に100（期首在庫）を指定しています。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th></tr></thead><tbody><tr><td>1</td><td>日付</td><td>入出荷</td><td>在庫数</td></tr><tr><td>2</td><td>3/1</td><td>+50</td><td>150</td></tr><tr><td>3</td><td>3/5</td><td>-30</td><td>120</td></tr><tr><td>4</td><td>3/10</td><td>+80</td><td>200</td></tr><tr><td>5</td><td>3/15</td><td>-60</td><td>140</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">初期値を変えるだけで「期首在庫が違う場合」もすぐに対応できます。累積処理はSCAN関数が最も得意とするパターンです。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン3: 口座残高の推移を表示する</span></h3>



<p class="wp-block-paragraph">入出金データから口座残高の推移を計算する例です。初期残高を1,000,000円とします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>摘要</td><td>金額</td></tr><tr><td>2</td><td>給与</td><td>250,000</td></tr><tr><td>3</td><td>家賃</td><td>-80,000</td></tr><tr><td>4</td><td>食費</td><td>-35,000</td></tr><tr><td>5</td><td>副業</td><td>50,000</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">C2に以下の数式を入力してください。</p>



<pre class="wp-block-code"><code>=SCAN(1000000, B2:B5, LAMBDA(acc, val, acc + val))</code></pre>



<p class="wp-block-paragraph">結果は <code>{1250000, 1170000, 1135000, 1185000}</code> です。</p>



<p class="wp-block-paragraph">残高の推移が一覧で見えます。どの時点で残高が最も少なかったかもひと目でわかりますよ。</p>



<h2 class="wp-block-heading"><span id="toc14">REDUCE関数との違い・使い分け</span></h2>



<p class="wp-block-paragraph">SCAN関数と最も混同しやすいのが<a href="https://mashukabu.com/spreadsheet-reduce-function/">REDUCE関数</a>です。構文はまったく同じですが、返す結果が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>SCAN関数</th><th>REDUCE関数</th></tr></thead><tbody><tr><td>戻り値</td><td>中間値を含む配列</td><td>最終値のみ（1つの値）</td></tr><tr><td>結果の形</td><td>元の配列と同じサイズ</td><td>スカラー値</td></tr><tr><td>構文</td><td>同じ</td><td>同じ</td></tr><tr><td>典型的な用途</td><td>累積合計・残高推移を表示したいとき</td><td>合計・積など最終結果だけ欲しいとき</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">たとえば <code>{10, 20, 30}</code> に対して累積合計を求めた場合、結果はこうなります。</p>



<ul class="wp-block-list"><li><strong>SCAN</strong>: {10, 30, 60}（途中経過も含む配列）</li><li><strong>REDUCE</strong>: 60（最終値のみ）</li></ul>



<h3 class="wp-block-heading"><span id="toc15">SCAN関数が向いている場面</span></h3>



<p class="wp-block-paragraph">「途中経過も見たい」ときはSCAN関数です。累積売上推移・口座残高の推移・在庫数の変動など、一覧表示に向いています。</p>



<h3 class="wp-block-heading"><span id="toc16">REDUCE関数が向いている場面</span></h3>



<p class="wp-block-paragraph">「最終的な1つの値だけ欲しい」ときは<a href="https://mashukabu.com/spreadsheet-reduce-function/">REDUCE関数</a>です。合計金額や累積割引後の最終価格など、答えが1つに定まる処理に向いています。</p>



<h3 class="wp-block-heading"><span id="toc17">選び方の判断基準</span></h3>



<p class="wp-block-paragraph">迷ったときは次のように考えてください。</p>



<ul class="wp-block-list"><li>結果をセル1つに出したい → REDUCE関数</li><li>結果を一覧（複数セル）で見たい → SCAN関数</li></ul>



<p class="wp-block-paragraph">構文が同じなので、まずSCAN関数で途中経過を確認してからREDUCE関数に切り替える、という使い方もおすすめですよ。</p>



<h2 class="wp-block-heading"><span id="toc18">LAMBDA系関数の全体像</span></h2>



<p class="wp-block-paragraph">LAMBDA関数と組み合わせて使う関数は複数あります。全体像を把握しておくと、使い分けの判断がしやすくなりますよ。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>処理単位</th><th>結果の形</th><th>主な用途</th></tr></thead><tbody><tr><td><a href="https://mashukabu.com/spreadsheet-map-function/">MAP</a></td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL</a></td><td>列ごと</td><td>横1行</td><td>列ごとの集計</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-byrow-function/">BYROW</a></td><td>行ごと</td><td>縦1列</td><td>行ごとの集計</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-reduce-function/">REDUCE</a></td><td>配列全体</td><td>1つの値</td><td>全体を1つに集約</td></tr><tr><td>SCAN</td><td>累積</td><td>元と同じサイズ</td><td>累積計算の中間結果</td></tr><tr><td><a href="https://mashukabu.com/spreadsheet-makearray-function/">MAKEARRAY</a></td><td>行×列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">SCAN関数はREDUCE関数の対です。最終値だけならREDUCE、途中経過も必要ならSCANと覚えておきましょう。</p>



<h2 class="wp-block-heading"><span id="toc19">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph">SCAN関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#NAME?</code></td><td>関数名のスペルミス</td><td>「SCAN」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>SCAN関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#N/A</code></td><td>LAMBDAの引数が2つでない</td><td>LAMBDAの仮引数は必ず2つ（累積値と現在値）にしてください</td></tr><tr><td><code>#VALUE!</code></td><td>初期値の型が処理と合わない</td><td>合計なら0、文字列結合なら&#8221;&#8221;を初期値にしてください</td></tr><tr><td><code>#ERROR!</code></td><td>LAMBDAの構文ミス</td><td>カッコの閉じ忘れ、カンマの過不足を確認してください</td></tr><tr><td><code>#REF!</code></td><td>展開先のセルにデータがある</td><td>SCAN関数は配列を返すため、展開先のセルを空にしてください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「LAMBDAの引数が2つでない」エラーです。仮引数は必ず2つにしてください。1つや3つだと<code>#N/A</code>エラーになります。</p>



<p class="wp-block-paragraph">SCAN関数は配列を返すため、展開先に既存データがあると<code>#REF!</code>エラーになります。出力先のセル範囲を事前に空にしておきましょう。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>acc</code>（accumulator の略）と<code>val</code>（value の略）を使うのがおすすめです。累積値と現在値の役割が一目でわかります。なお、SCAN関数は1つの配列に対して最大約39,998回まで繰り返し処理ができます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc20">まとめ</span></h2>



<p class="wp-block-paragraph">SCAN関数は、各ステップの中間値を配列で返す関数です。途中経過を一覧で表示したい場面で活躍します。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしておきましょう。</p>



<ul class="wp-block-list"><li>SCAN関数は<code>=SCAN(初期値, 配列, LAMBDA(acc, val, 処理))</code>で、中間値を含む配列を返す</li><li>初期値は「最初に手元に何を持って始めるか」を決める値（合計なら0、積なら1）</li><li>累積売上・在庫推移・残高推移など、途中経過を見たい場面に最適</li><li>REDUCE関数は最終値のみ。途中経過も欲しいならSCAN関数を選ぶ</li><li>構文はREDUCE関数とまったく同じ。切り替えも簡単</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずはシンプルな累積合計から試してみてください。</p>



<p class="wp-block-paragraph"><code>=SCAN(0, A2:A5, LAMBDA(acc, val, acc + val))</code></p>



<p class="wp-block-paragraph">途中経過が配列で返ってくる動作を体感すれば、さまざまな累積処理に応用できますよ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">この記事で紹介した関数・関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-reduce-function/">スプレッドシートのREDUCE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-sum-function/">スプレッドシートのSUM関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-map-function/">スプレッドシートのMAP関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-bycol-function/">スプレッドシートのBYCOL関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-byrow-function/">スプレッドシートのBYROW関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-makearray-function/">スプレッドシートのMAKEARRAY関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-scan-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
