<?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>LAMBDA関数 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/lambda%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>LAMBDA関数 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ExcelのLET・LAMBDA関数の使い方｜数式を自分の関数に変える方法</title>
		<link>https://mashukabu.com/excel-let-lambda-function-guide/</link>
					<comments>https://mashukabu.com/excel-let-lambda-function-guide/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 16 May 2026 23:15:08 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[LET関数]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[カスタム関数]]></category>
		<category><![CDATA[名前定義]]></category>
		<category><![CDATA[数式整理]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=6825</guid>

					<description><![CDATA[ExcelのLET関数とLAMBDA関数の使い方を実務例8パターンで解説。変数定義で数式を整理するLETと、VBA不要でカスタム関数を自作できるLAMBDAを組み合わせれば、数式のメンテナンスコストが大幅に下がります。FAQ・エラー対処付き。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「このVLOOKUPの数式、ネストが深すぎて自分でも何を書いたか分からない…」。Excelで複雑な数式を扱う方なら、一度はそんな経験があるのではないでしょうか。</p>



<p class="wp-block-paragraph">同じ計算式を複数のセルや別のシートにコピペした後、参照範囲を1か所だけ変えたいとき。気づくと10か所も同じ修正を繰り返し、1つでも直し忘れると <code>#N/A</code> の嵐です。VBAでカスタム関数を作れば解決するとは分かっていても、「マクロは怖い」「セキュリティ警告が嫌だ」と踏み切れない方も多いはずです。</p>



<p class="wp-block-paragraph">そこで本記事では、<strong>LET関数</strong> と <strong>LAMBDA関数</strong> の使い方を解説します。この2つを使えば、VBAを一切書かずに「数式の中で名前を付ける」「自分専用の関数を登録する」ことが可能です。読み終えたとき、長い数式は驚くほどスッキリし、コピペ地獄から解放されているはずです。</p>



<p class="wp-block-paragraph">実務例は全部で8パターン用意しました。LET実務例4つ、LAMBDA実務例3つ、組み合わせ実務例3つです。社内の請求書テンプレートや勤怠データ、評価ランク判定などすぐに転用できるものばかりです。</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">LET関数とLAMBDA関数、どう違う？1分でわかる役割整理</a><ol><li><a href="#toc2" tabindex="0">LET関数＝「セル内で変数を定義する」関数</a></li><li><a href="#toc3" tabindex="0">LAMBDA関数＝「ブック内で再利用できる関数を定義する」関数</a></li><li><a href="#toc4" tabindex="0">LETとLAMBDAの使い分け早見表</a></li></ol></li><li><a href="#toc5" tabindex="0">なぜ今LETとLAMBDAなのか｜従来のExcel数式が抱えていた3つの痛み</a><ol><li><a href="#toc6" tabindex="0">痛み①：同じ式の二度書き地獄</a></li><li><a href="#toc7" tabindex="0">痛み②：参照範囲の一括変更が漏れる</a></li><li><a href="#toc8" tabindex="0">痛み③：VBA UDFのセキュリティ警告</a></li></ol></li><li><a href="#toc9" tabindex="0">LET関数の基本：変数に名前をつけて数式をスッキリさせる</a><ol><li><a href="#toc10" tabindex="0">LET関数の基本構文</a></li><li><a href="#toc11" tabindex="0">実務例①：VLOOKUP+IFERRORを変数化してメンテナンスコストを削減</a></li><li><a href="#toc12" tabindex="0">実務例②：FILTER+SORTを段階的に書いてデバッグしやすくする</a></li><li><a href="#toc13" tabindex="0">実務例③：複雑な条件分岐の途中結果に名前を付ける</a></li><li><a href="#toc14" tabindex="0">実務例④：経理の累進計算をLETで段階分解</a></li><li><a href="#toc15" tabindex="0">Before / After 比較</a></li></ol></li><li><a href="#toc16" tabindex="0">LAMBDA関数の基本：名前定義で「自分の関数」を登録する手順</a><ol><li><a href="#toc17" tabindex="0">LAMBDA関数の基本構文</a></li><li><a href="#toc18" tabindex="0">名前の管理へ登録する手順</a></li><li><a href="#toc19" tabindex="0">実務例⑤：消費税計算をLAMBDA関数化して毎月使い回す</a></li><li><a href="#toc20" tabindex="0">実務例⑥：営業日換算LAMBDAで週末カウントを統一</a></li><li><a href="#toc21" tabindex="0">実務例⑦：評価ランクLAMBDAで成績判定を関数化</a></li></ol></li><li><a href="#toc22" tabindex="0">LAMBDA + ヘルパー関数で配列処理を一気に書く</a><ol><li><a href="#toc23" tabindex="0">MAP関数との連携（要素ごとにLAMBDAを適用）</a></li><li><a href="#toc24" tabindex="0">BYROW/BYCOLとの連携（行・列ごとの一括処理）</a></li></ol></li><li><a href="#toc25" tabindex="0">LET + LAMBDA を組み合わせる：実務頻出3パターン</a><ol><li><a href="#toc26" tabindex="0">パターン1：LETで中間変数を整理してからLAMBDAに渡す</a></li><li><a href="#toc27" tabindex="0">パターン2：FILTER+SORTの組み合わせをLET変数で段階的に書く</a></li><li><a href="#toc28" tabindex="0">パターン3：LAMBDA内部でLETを使ってロジックを可読化する</a></li></ol></li><li><a href="#toc29" tabindex="0">LET/LAMBDA vs VBA Function｜使い分けの判断基準</a></li><li><a href="#toc30" tabindex="0">こんなエラーが出たら：つまずきポイントと対処法</a><ol><li><a href="#toc31" tabindex="0">#NAME?エラーが出る原因と解決策</a></li><li><a href="#toc32" tabindex="0">#CALC!エラーが出る原因と解決策</a></li><li><a href="#toc33" tabindex="0">変数名にセル参照と同名を使ったときの挙動</a></li><li><a href="#toc34" tabindex="0">LAMBDAの再帰呼び出しでスタックオーバーフロー</a></li></ol></li><li><a href="#toc35" tabindex="0">よくある質問（FAQ）</a></li><li><a href="#toc36" tabindex="0">まとめ：LETは今日から、LAMBDAは次のステップで</a><ol><li><a href="#toc37" tabindex="0">関連記事で次のステップに進む</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">LET関数とLAMBDA関数、どう違う？1分でわかる役割整理</span></h2>



<p class="wp-block-paragraph">LET関数とLAMBDA関数は、どちらも「数式に名前を付けて整理する」ための関数です。ただし、名前を付ける対象とスコープが大きく異なります。まずは両者の役割を1分で押さえましょう。</p>



<h3 class="wp-block-heading"><span id="toc2">LET関数＝「セル内で変数を定義する」関数</span></h3>



<p class="wp-block-paragraph">LET関数は、<strong>1つのセルの中だけで通用する「変数」</strong> を定義できる関数です。Excelの文脈では「数式の途中で計算結果に名前を付けておき、後で参照できる仕組み」と理解してください。プログラミング経験者なら「ローカル変数」のイメージです。</p>



<p class="wp-block-paragraph">たとえば <code>VLOOKUP(A2, $D:$E, 2, 0)</code> を <code>result</code> という名前で保存しておけば、後の式で <code>result</code> と書くだけで再利用できます。同じ式を2回書く必要がなく、計算も1回しか走らないのでパフォーマンスも向上します。</p>



<p class="wp-block-paragraph">ただしLET関数のスコープは <strong>「そのセル内のみ」</strong> に限定されます。他のセルや他のシートから <code>result</code> を参照することはできません。あくまで「そのセルを書くときの一時メモ帳」というイメージです。</p>



<h3 class="wp-block-heading"><span id="toc3">LAMBDA関数＝「ブック内で再利用できる関数を定義する」関数</span></h3>



<p class="wp-block-paragraph">LAMBDA関数は、<strong>ブック全体で使い回せる「自分専用の関数」</strong> を定義できる関数です。LAMBDA式を「名前の管理」に登録すると、ブックのどのシート・どのセルからも <code>=MY_FUNC(引数)</code> の形式で呼び出せます。</p>



<p class="wp-block-paragraph">これまでカスタム関数を作るにはVBAでユーザー定義関数（UDF）を書く必要がありました。LAMBDAなら <strong>VBAを一切使わずに、数式だけでカスタム関数を作成できます</strong>。マクロのセキュリティ警告も出ません。まるでプログラムのようですが、あくまでセルに書く数式の延長です。</p>



<p class="wp-block-paragraph">xlsx形式のまま配布できるため、メール添付やSharePoint共有もマクロ警告で止まらないという大きな利点もあります。</p>



<h3 class="wp-block-heading"><span id="toc4">LETとLAMBDAの使い分け早見表</span></h3>



<p class="wp-block-paragraph">両者の違いを「スコープ」と「役割」の2軸で整理すると、次の表になります。</p>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>LET関数</th><th>LAMBDA関数</th></tr></thead><tbody><tr><td>役割</td><td>変数の定義</td><td>関数の定義</td></tr><tr><td>スコープ</td><td>セル内のみ</td><td>ブック全体（名前定義で登録時）</td></tr><tr><td>再利用</td><td>同じセル内のみ</td><td>他セル・他シートからも呼び出し可</td></tr><tr><td>主な用途</td><td>1つの長い数式の整理・可読性向上</td><td>複数箇所で繰り返す計算ロジックの関数化</td></tr><tr><td>対応バージョン</td><td>Microsoft 365 / Excel 2021以降</td><td>Microsoft 365のみ（Excel 2021非対応）</td></tr><tr><td>VBAの必要性</td><td>不要</td><td>不要</td></tr><tr><td>配布形式</td><td>xlsx</td><td>xlsx</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ここで重要なのが <strong>バージョン差分</strong> です。LET関数はExcel 2021でも使えますが、LAMBDA関数はMicrosoft 365専用です。自分のバージョンを確認するには「ファイル」→「アカウント」→「製品情報」を見てください。</p>



<p class="wp-block-paragraph">!<a href="https://mashukabu.com/_images/excel-let-lambda-function-guide/01_data_let-lambda-comparison.png/">_images/excel-let-lambda-function-guide/01_data_let-lambda-comparison.png</a></p>



<h2 class="wp-block-heading"><span id="toc5">なぜ今LETとLAMBDAなのか｜従来のExcel数式が抱えていた3つの痛み</span></h2>



<p class="wp-block-paragraph">LETとLAMBDAの説明に入る前に、「なぜこの2関数が必要になったのか」を整理しておきます。従来のExcel数式には、慣れた人ほど直面する3つの痛みがありました。</p>



<h3 class="wp-block-heading"><span id="toc6">痛み①：同じ式の二度書き地獄</span></h3>



<p class="wp-block-paragraph">最も典型的なのが「条件分岐の中で同じ計算を2回書く」パターンです。たとえばVLOOKUPで取得した値が空欄なら「未登録」、そうでなければそのまま表示したい場合、こう書くしかありませんでした。</p>



<pre class="wp-block-code"><code>'--- 二度書きが避けられない従来の数式 ---
=IF(VLOOKUP(A2,$D:$E,2,0)=&quot;&quot;, &quot;未登録&quot;, VLOOKUP(A2,$D:$E,2,0))</code></pre>



<p class="wp-block-paragraph">VLOOKUP部分が2か所に出てきます。参照範囲を変えたいときは2か所同時に修正しなければなりません。1か所でも直し忘れると <code>#N/A</code> が混ざる悲劇が起こります。さらに同じVLOOKUPが2回実行されるため、データが大きいときは計算速度も無駄になります。</p>



<p class="wp-block-paragraph">条件分岐の基本については <a href="https://mashukabu.com/excel-function-howto-use-if/">ExcelのIF関数の使い方</a> で詳しく解説しています。</p>



<h3 class="wp-block-heading"><span id="toc7">痛み②：参照範囲の一括変更が漏れる</span></h3>



<p class="wp-block-paragraph">数式を100セルにコピーした後で「参照範囲を <code>$D:$E</code> から <code>$D:$F</code> に変えたい」と思ったときが地獄です。すべての数式を編集モードで開き、置換ダイアログか手作業で書き換えるしかありません。</p>



<p class="wp-block-paragraph">VLOOKUPを多用している方は <a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方</a> も合わせてご覧ください。参照範囲の管理が一気に楽になります。</p>



<h3 class="wp-block-heading"><span id="toc8">痛み③：VBA UDFのセキュリティ警告</span></h3>



<p class="wp-block-paragraph">「だったらVBAでカスタム関数を作ればいい」と考える方もいるでしょう。実際 <a href="https://mashukabu.com/excel-vba-howto-use-function/">VBAのFunctionプロシージャ</a> を使えばカスタム関数（UDF）が作れます。しかし配布時に問題が起きます。</p>



<p class="wp-block-paragraph">VBA入りのブックは「マクロ有効ブック（xlsm）」になり、開いた人に「マクロを有効にしますか？」というセキュリティ警告が必ず出ます。社内ポリシーで「不明なマクロは無効化」が設定されている会社では、せっかくのUDFが動きません。</p>



<p class="wp-block-paragraph">LET/LAMBDAなら <strong>xlsxのまま</strong> カスタム関数を作れるため、この壁を完全に回避できます。</p>



<h2 class="wp-block-heading"><span id="toc9">LET関数の基本：変数に名前をつけて数式をスッキリさせる</span></h2>



<p class="wp-block-paragraph">LET関数は、長くてネストが深い数式を「段階的に名前を付けながら組み立てる」イメージで使います。難しく考える必要はなく、「途中の計算結果に名前を付けておく」だけです。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>内容</th></tr></thead><tbody><tr><td>構文</td><td><code>=LET(name1, value1, [name2, value2, …,] calculation)</code></td></tr><tr><td>必須引数</td><td>最低1組の「名前・値」と、最後に必ず計算式</td></tr><tr><td>最大ペア数</td><td>126個の名前/値ペア</td></tr><tr><td>変数名の制約</td><td>文字で始まる／スペース不可／セル参照（A1等）と同名不可／TRUE・FALSE等の予約語不可</td></tr><tr><td>対応バージョン</td><td>Microsoft 365 / Excel 2021以降</td></tr><tr><td>出典</td><td><a href="https://support.microsoft.com/en-us/office/let-function-34842dd8-b92b-4d3f-b325-b8b8f9908999">Microsoft公式: LET関数</a></td></tr></tbody></table></figure>



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



<pre class="wp-block-code"><code>'--- LET関数の最小サンプル ---
=LET(x, 5, SUM(x, 1))</code></pre>



<p class="wp-block-paragraph">この式は「<code>x</code> に <code>5</code> を代入し、<code>SUM(x, 1)</code> を計算する」という意味で、結果は <code>6</code> になります。Excelの文脈では「数式の中で名前付きの一時変数を作れる」と理解すれば十分です。</p>



<p class="wp-block-paragraph">ここからは実務で本当に役立つLETの使い方を、4つの実例で解説していきます。</p>



<h3 class="wp-block-heading"><span id="toc11">実務例①：VLOOKUP+IFERRORを変数化してメンテナンスコストを削減</span></h3>



<p class="wp-block-paragraph">LETが最も威力を発揮するのは、<strong>同じ式を複数回書かなければならない場面</strong> です。代表例が「VLOOKUPの結果をIFERRORで包む」パターンです。</p>



<p class="wp-block-paragraph">通常の書き方では、VLOOKUPを2回書く必要があります。</p>



<pre class="wp-block-code"><code>'--- LETなしの従来パターン（VLOOKUPが2回登場） ---
=IF(VLOOKUP(A2, $D:$E, 2, 0)=&quot;&quot;, &quot;未登録&quot;, VLOOKUP(A2, $D:$E, 2, 0))</code></pre>



<p class="wp-block-paragraph">参照範囲を <code>$D:$F</code> に変えたいとき、2か所すべてを直さないと結果が狂います。これをLETで書き換えるとこうなります。</p>



<pre class="wp-block-code"><code>'--- LETあり：1か所修正で済む新パターン ---
=LET(
  result, VLOOKUP(A2, $D:$E, 2, 0),
  IF(result=&quot;&quot;, &quot;未登録&quot;, result)
)</code></pre>



<p class="wp-block-paragraph">VLOOKUP部分が <code>result</code> という変数1か所だけになりました。参照範囲を変更したいときは <code>result</code> の定義行だけ直せばよく、メンテナンスコストが半分以下になります。さらにVLOOKUPは1回しか実行されないため、計算速度の面でも有利です。</p>



<p class="wp-block-paragraph">VLOOKUPの基本的な使い方を再確認したい方は <a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方</a> を参照してください。エラー処理を厚くしたい方は <a href="https://mashukabu.com/excel-function-howto-use-iferror/">ExcelのIFERROR関数の使い方</a> も合わせてご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc12">実務例②：FILTER+SORTを段階的に書いてデバッグしやすくする</span></h3>



<p class="wp-block-paragraph">動的配列関数（FILTER, SORT, UNIQUE等）を組み合わせると、1セルに長い式が並びがちです。LETを使うと「フィルタしてからソート」という処理を段階的に書けます。</p>



<pre class="wp-block-code"><code>'--- 動的配列関数を段階化したサンプル ---
=LET(
  filtered, FILTER(A2:C100, B2:B100=&quot;東京&quot;),
  sorted,   SORT(filtered, 3, -1),
  sorted
)</code></pre>



<p class="wp-block-paragraph"><code>filtered</code> の段階だけ表示すれば「フィルタが正しいか」を確認できます。次に <code>sorted</code> を返せば「ソートも正しいか」が見えます。長い数式を1行ずつデバッグできる構造になるのが利点です。</p>



<p class="wp-block-paragraph">慣れてくれば、最後の <code>sorted</code> を <code>INDEX(sorted, 1, 3)</code> などに差し替えて「ソート後の1行目の3列目だけ抜く」という応用にもつなげられます。</p>



<h3 class="wp-block-heading"><span id="toc13">実務例③：複雑な条件分岐の途中結果に名前を付ける</span></h3>



<p class="wp-block-paragraph">「売上が100万円以上、かつ達成率が80%以上ならA評価」のような複合条件は、IF/IFSの入れ子で書くと読みにくくなりがちです。LETで条件を変数化すると意図が明確になります。</p>



<pre class="wp-block-code"><code>'--- 複合条件をLETで整理した例 ---
=LET(
  sales,      B2,
  rate,       C2,
  isHighSale, sales &gt;= 1000000,
  isHighRate, rate  &gt;= 0.8,
  IF(AND(isHighSale, isHighRate), &quot;A評価&quot;,
   IF(isHighSale, &quot;B評価&quot;,
   IF(isHighRate, &quot;C評価&quot;, &quot;D評価&quot;)))
)</code></pre>



<p class="wp-block-paragraph"><code>isHighSale</code> <code>isHighRate</code> という変数名のおかげで、後から読み返したときに「何を判定しているか」が一目で分かります。半年後の自分にも親切な数式です。</p>



<p class="wp-block-paragraph">条件分岐の組み合わせをさらに深掘りしたい方は <a href="https://mashukabu.com/excel-function-howto-use-if/">ExcelのIF関数の使い方</a> で基本パターンを確認してください。</p>



<h3 class="wp-block-heading"><span id="toc14">実務例④：経理の累進計算をLETで段階分解</span></h3>



<p class="wp-block-paragraph">経理処理で「税抜金額 → 消費税 → 端数処理 → 税込金額」という多段階計算は、LETの段階分解と相性が抜群です。</p>



<pre class="wp-block-code"><code>'--- 経理の段階計算を可視化 ---
=LET(
  taxRate,   0.1,
  netPrice,  B2,
  tax,       ROUND(netPrice * taxRate, 0),
  gross,     netPrice + tax,
  gross
)</code></pre>



<p class="wp-block-paragraph">消費税率が変わったときも、最初の <code>taxRate</code> の値だけを直せば全体に反映されます。各ステップに変数名が付いているため、デバッグで「途中の <code>tax</code> の値が想定と違う」と気づきやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc15">Before / After 比較</span></h3>



<p class="wp-block-paragraph">LETを導入する前と後で、数式の見た目がどう変わるかを比較します。</p>



<p class="wp-block-paragraph"><strong>Before（LETなし）</strong></p>



<pre class="wp-block-code"><code>'--- 従来：氏名と部署を1セルに連結する力技 ---
=IFERROR(VLOOKUP(A2,$D:$E,2,0),&quot;該当なし&quot;)&amp;&quot; / &quot;&amp;IFERROR(VLOOKUP(A2,$D:$F,3,0),&quot;該当なし&quot;)</code></pre>



<p class="wp-block-paragraph"><strong>After（LETあり）</strong></p>



<pre class="wp-block-code"><code>'--- After：1行ずつ意味が読み取れる ---
=LET(
  name,  IFERROR(VLOOKUP(A2,$D:$E,2,0),&quot;該当なし&quot;),
  dept,  IFERROR(VLOOKUP(A2,$D:$F,3,0),&quot;該当なし&quot;),
  name &amp; &quot; / &quot; &amp; dept
)</code></pre>



<p class="wp-block-paragraph">After版は1行ずつ「何を計算しているか」が読み取れます。半年後に自分が見直しても、別の担当者が引き継いでも理解しやすくなります。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/05/02_result_let-before-after.png" alt="02 result let before after" /></figure>



<p class="wp-block-paragraph">LET関数のもっと詳しい仕様や応用例については <a href="https://mashukabu.com/excel-function-howto-use-let/">ExcelのLET関数の使い方｜変数定義で数式を短く整理する方法</a> で個別に解説しています。深掘りしたい方はそちらもご参照ください。</p>



<h2 class="wp-block-heading"><span id="toc16">LAMBDA関数の基本：名前定義で「自分の関数」を登録する手順</span></h2>



<p class="wp-block-paragraph">LAMBDA関数は、LETの一歩先にある「数式を関数化して使い回す」ための仕組みです。冒頭で触れたとおり <strong>Microsoft 365専用</strong> なので、Excel 2021ユーザーは利用できない点にご注意ください。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>内容</th></tr></thead><tbody><tr><td>構文</td><td><code>=LAMBDA([parameter1, parameter2, …,] calculation)</code></td></tr><tr><td>必須引数</td><td>最後の計算式（パラメータは省略可）</td></tr><tr><td>最大パラメータ数</td><td>253個</td></tr><tr><td>即時呼び出し</td><td><code>=LAMBDA(temp, (5/9)*(temp-32))(100)</code> のように末尾に引数を渡す</td></tr><tr><td>名前定義への登録</td><td>「数式」タブ→「名前の管理」→「新規」から登録</td></tr><tr><td>対応バージョン</td><td>Microsoft 365専用（Excel 2021は非対応）</td></tr><tr><td>出典</td><td><a href="https://support.microsoft.com/en-us/office/lambda-function-bd212d27-1cd1-4321-a34a-ccbf254b8b67">Microsoft公式: LAMBDA関数</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDAを単独でセルに書くだけでは関数の「定義」しかできません。末尾に引数を渡さないと <code>#CALC!</code> エラーが出ます。本来の使い方は「名前の管理」に登録してから呼び出す形です。</p>



<h3 class="wp-block-heading"><span id="toc18">名前の管理へ登録する手順</span></h3>



<p class="wp-block-paragraph">LAMBDA関数を実用するには「名前の管理」への登録が必須です。Windows版Excelでの手順は以下のとおりです。</p>



<ol class="wp-block-list"><li><strong>「数式」タブ</strong> をクリックする</li><li><strong>「名前の管理」</strong> をクリック（ショートカット: <code>Ctrl + F3</code>）</li><li>ダイアログ右上の <strong>「新規」</strong> をクリック</li><li>「新しい名前」ダイアログで以下を入力する</li></ol>



<ul class="wp-block-list"><li><strong>名前</strong>: 関数名（例: <code>TAX_CALC</code>）。Excelの既存関数名と被らないようにする</li><li><strong>範囲</strong>: 通常は「ブック」を選択（シートを選ぶと他シートから呼び出せない）</li><li><strong>コメント</strong>: 関数の説明（後で見返したときに役立つ）</li><li><strong>参照範囲</strong>: LAMBDA式を貼り付ける（例: <code>=LAMBDA(price, price*1.1)</code>）</li></ul>



<ol class="wp-block-list"><li><strong>「OK」</strong> をクリックして登録完了</li></ol>



<p class="wp-block-paragraph">登録が成功すると、そのブック内のどのセルでも <code>=TAX_CALC(1000)</code> のようにネイティブ関数と同じ感覚で呼び出せるようになります。</p>



<p class="wp-block-paragraph">※ 名前の管理ダイアログの操作画面は、デスクトップ版Excel（Windows）でご確認ください。</p>



<h3 class="wp-block-heading"><span id="toc19">実務例⑤：消費税計算をLAMBDA関数化して毎月使い回す</span></h3>



<p class="wp-block-paragraph">毎月の請求書で「税抜価格 × 1.1」の式を何十か所にも書いているなら、LAMBDA化の絶好のチャンスです。次のLAMBDA式を <code>TAX_INCLUDED</code> という名前で登録してみましょう。</p>



<pre class="wp-block-code"><code>'--- 名前の管理に登録するLAMBDA式 ---
=LAMBDA(price, ROUND(price*1.1, 0))</code></pre>



<p class="wp-block-paragraph">登録後はどのセルでも次のように使えます。</p>



<pre class="wp-block-code"><code>'--- 通常の関数として呼び出し可能 ---
=TAX_INCLUDED(B2)</code></pre>



<p class="wp-block-paragraph">将来、消費税率が変わったり端数処理を「切り捨て」に変えたいときは、<strong>「名前の管理」のLAMBDA式を1か所書き換えるだけ</strong> で全体に反映されます。コピペした数式を100か所修正する必要は一切ありません。</p>



<h3 class="wp-block-heading"><span id="toc20">実務例⑥：営業日換算LAMBDAで週末カウントを統一</span></h3>



<p class="wp-block-paragraph">「ある日付からN営業日後の日付を返す」という処理は、社内の勤怠管理や納期計算で頻出です。NETWORKDAYSやWORKDAYを毎回書くのではなく、LAMBDA化すると統一できます。</p>



<pre class="wp-block-code"><code>'--- WORKDAY_AFTER として名前登録 ---
=LAMBDA(startDate, days, WORKDAY(startDate, days))</code></pre>



<p class="wp-block-paragraph">呼び出し例:</p>



<pre class="wp-block-code"><code>'--- 5営業日後の日付を取得 ---
=WORKDAY_AFTER(TODAY(), 5)</code></pre>



<p class="wp-block-paragraph">祝日リストも引数に加えたければ、次のように拡張できます。</p>



<pre class="wp-block-code"><code>'--- 祝日対応版 WORKDAY_AFTER ---
=LAMBDA(startDate, days, holidays, WORKDAY(startDate, days, holidays))</code></pre>



<p class="wp-block-paragraph">このようにLAMBDAは「あとから引数を増やす」拡張も柔軟にできます。</p>



<h3 class="wp-block-heading"><span id="toc21">実務例⑦：評価ランクLAMBDAで成績判定を関数化</span></h3>



<p class="wp-block-paragraph">「点数からA/B/C/D評価を返す」というような判定ロジックは、複数のシートで同じ閾値を使うことが多く、LAMBDA向きです。</p>



<pre class="wp-block-code"><code>'--- RANK_GRADE として名前登録 ---
=LAMBDA(score,
  IF(score &gt;= 80, &quot;A&quot;,
   IF(score &gt;= 60, &quot;B&quot;,
    IF(score &gt;= 40, &quot;C&quot;, &quot;D&quot;)))
)</code></pre>



<p class="wp-block-paragraph">呼び出し:</p>



<pre class="wp-block-code"><code>'--- セルB2の点数から評価を取得 ---
=RANK_GRADE(B2)</code></pre>



<p class="wp-block-paragraph">評価基準が「80→85」に変わったとしても、名前の管理にあるLAMBDA式の1か所を直すだけで、社内の全シートに反映されます。担当者ごとの判定ブレも防げます。</p>



<h2 class="wp-block-heading"><span id="toc22">LAMBDA + ヘルパー関数で配列処理を一気に書く</span></h2>



<p class="wp-block-paragraph">LAMBDA関数の真価は、<strong>MAP/BYROW/BYCOL/REDUCE等のヘルパー関数と組み合わせたとき</strong> に現れます。これらは「LAMBDA式を受け取って、配列の各要素に適用する」高階関数です。</p>



<h3 class="wp-block-heading"><span id="toc23">MAP関数との連携（要素ごとにLAMBDAを適用）</span></h3>



<p class="wp-block-paragraph">MAP関数は、配列の各要素に対してLAMBDAを実行し、結果を配列で返します。たとえば「A2:A10 の全ての値に税込計算を適用したい」とき、次のように書けます。</p>



<pre class="wp-block-code"><code>'--- A2:A10の全要素にTAX_INCLUDEDを適用 ---
=MAP(A2:A10, LAMBDA(x, ROUND(x*1.1, 0)))</code></pre>



<p class="wp-block-paragraph">これでスピル動作により、隣の列に税込価格が9行分一気に展開されます。LAMBDAを毎セルにコピーする必要はありません。</p>



<p class="wp-block-paragraph">MAP関数の詳しい使い方は <a href="https://mashukabu.com/excel-function-howto-use-map/">ExcelのMAP関数の使い方</a> で個別解説しています。</p>



<h3 class="wp-block-heading"><span id="toc24">BYROW/BYCOLとの連携（行・列ごとの一括処理）</span></h3>



<p class="wp-block-paragraph">BYROW関数は「行ごと」に処理をかけ、BYCOL関数は「列ごと」に処理をかけます。たとえば「各行の最大値を取り出す」ならBYROWが便利です。</p>



<pre class="wp-block-code"><code>'--- 各行の最大値を取得 ---
=BYROW(A2:D10, LAMBDA(row, MAX(row)))</code></pre>



<p class="wp-block-paragraph">3列の合計を行単位で出したいなら次のとおりです。</p>



<pre class="wp-block-code"><code>'--- 各行の合計を取得 ---
=BYROW(A2:C10, LAMBDA(row, SUM(row)))</code></pre>



<p class="wp-block-paragraph">集計関数（SUM/MAX/MIN/AVERAGE）をLAMBDA経由で渡すだけで、行・列単位の一括処理が完了します。SUMPRODUCTや配列数式の代わりに使えるシーンが多く、慣れると手放せません。</p>



<h2 class="wp-block-heading"><span id="toc25">LET + LAMBDA を組み合わせる：実務頻出3パターン</span></h2>



<p class="wp-block-paragraph">LETとLAMBDAは単独でも便利ですが、<strong>組み合わせると真価を発揮します</strong>。ここでは実務頻出の3パターンを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc26">パターン1：LETで中間変数を整理してからLAMBDAに渡す</span></h3>



<p class="wp-block-paragraph">外側の数式でLETを使ってデータを整え、整えた結果をLAMBDAベースのカスタム関数に渡す書き方です。</p>



<pre class="wp-block-code"><code>'--- LETでデータ整形→LAMBDA関数を呼び出す ---
=LET(
  raw,    FILTER(A2:C100, B2:B100=&quot;東京&quot;),
  sorted, SORT(raw, 3, -1),
  TAX_INCLUDED(INDEX(sorted, 1, 3))
)</code></pre>



<p class="wp-block-paragraph">中間結果に名前を付けることで「フィルタ→ソート→税込変換」という処理の流れが明確になります。</p>



<h3 class="wp-block-heading"><span id="toc27">パターン2：FILTER+SORTの組み合わせをLET変数で段階的に書く</span></h3>



<p class="wp-block-paragraph">LAMBDAを使わなくても、LET単体で動的配列関数を段階的に書けます。</p>



<pre class="wp-block-code"><code>'--- 動的配列関数を段階化 ---
=LET(
  filtered, FILTER(A2:C10, B2:B10=&quot;東京&quot;),
  SORT(filtered, 3, -1)
)</code></pre>



<p class="wp-block-paragraph">東京のデータだけを抽出し、3列目で降順ソートする処理を「2段階」で書いています。中間結果の <code>filtered</code> だけを表示すれば動作確認ができるため、デバッグも容易です。</p>



<h3 class="wp-block-heading"><span id="toc28">パターン3：LAMBDA内部でLETを使ってロジックを可読化する</span></h3>



<p class="wp-block-paragraph">LAMBDAで複雑な計算をするとき、内部にLETを入れ子にして中間変数を整理できます。</p>



<pre class="wp-block-code"><code>'--- LAMBDA内部にLETを入れ子で書く ---
=LAMBDA(price,
  LET(
    base, price * 1.1,
    tax,  base * 0.1,
    base + tax
  )
)</code></pre>



<p class="wp-block-paragraph">この式を <code>TAX_DETAIL</code> として登録すれば、<code>=TAX_DETAIL(1000)</code> で呼び出せます。LAMBDAの引数 <code>price</code> を受け取り、LETで段階的に <code>base</code> と <code>tax</code> を計算してから合計を返す構造です。</p>



<h2 class="wp-block-heading"><span id="toc29">LET/LAMBDA vs VBA Function｜使い分けの判断基準</span></h2>



<p class="wp-block-paragraph">「カスタム関数を作るならLAMBDAとVBA UDF、どちらを選ぶべきか」は多くの方が悩む点です。両者を実務観点で比較します。</p>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>LAMBDA関数</th><th>VBA Functionプロシージャ</th></tr></thead><tbody><tr><td>作成手段</td><td>数式のみ</td><td>VBAコード（VBE）</td></tr><tr><td>配布形式</td><td>xlsx</td><td>xlsm（マクロ有効ブック）</td></tr><tr><td>セキュリティ警告</td><td>出ない</td><td>出る</td></tr><tr><td>計算速度</td><td>数式と同等</td><td>やや遅い場合あり</td></tr><tr><td>対応バージョン</td><td>Microsoft 365のみ</td><td>VBA対応のExcel全般</td></tr><tr><td>可能な処理</td><td>数式で書ける範囲</td><td>ファイル操作・API呼出・複雑制御も可</td></tr><tr><td>デバッグ</td><td>LETの中間変数で確認</td><td>ブレークポイント・イミディエイト</td></tr><tr><td>学習コスト</td><td>Excelの数式知識のみ</td><td>VBA文法を学ぶ必要あり</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">判断基準を実務シーン別に整理すると次のとおりです。</p>



<ul class="wp-block-list"><li><strong>xlsxのまま配布したい・社内のマクロ警告を回避したい</strong> → LAMBDA</li><li><strong>計算式の延長で済む処理（税込・営業日・評価判定など）</strong> → LAMBDA</li><li><strong>Excel 2021や旧バージョンのユーザーがいる</strong> → VBA Function（LAMBDAは使えない）</li><li><strong>ファイル操作・正規表現・WEB API呼び出しが必要</strong> → VBA Function</li><li><strong>長年VBA UDFで運用していて移行コストが高い</strong> → VBA Functionを継続</li></ul>



<p class="wp-block-paragraph">VBAのFunctionプロシージャの基本については <a href="https://mashukabu.com/excel-vba-howto-use-function/">VBA Functionプロシージャの使い方</a> で詳しく解説しています。両者の使い分けを社内で標準化したい方は、まずLAMBDAで実装してみて、できない処理だけVBAに移すアプローチが現実的です。</p>



<h2 class="wp-block-heading"><span id="toc30">こんなエラーが出たら：つまずきポイントと対処法</span></h2>



<p class="wp-block-paragraph">LET/LAMBDAは強力ですが、慣れないうちはエラーに遭遇します。代表的な4つのケースと対処法をまとめます。</p>



<h3 class="wp-block-heading"><span id="toc31">#NAME?エラーが出る原因と解決策</span></h3>



<p class="wp-block-paragraph"><code>#NAME?</code> エラーは、Excelが関数名や変数名を認識できないときに発生します。主な原因は3つです。</p>



<ol class="wp-block-list"><li><strong>バージョン非対応</strong>: Excel 2019以前でLETを使うと出ます。LAMBDAはExcel 2021でも非対応なので注意してください</li><li><strong>関数名のスペルミス</strong>: <code>=LET</code> を <code>=LTE</code> などとタイプミスしている</li><li><strong>名前定義の未登録</strong>: <code>=TAX_CALC(100)</code> と呼んでも、「名前の管理」に未登録なら認識されません</li></ol>



<p class="wp-block-paragraph">対処は「バージョン確認 → スペル確認 → 名前の管理で登録状態を確認」の順で切り分けます。エラー処理を厚くしたいなら <a href="https://mashukabu.com/excel-function-howto-use-iferror/">ExcelのIFERROR関数の使い方</a> を組み合わせてください。</p>



<h3 class="wp-block-heading"><span id="toc32">#CALC!エラーが出る原因と解決策</span></h3>



<p class="wp-block-paragraph"><code>#CALC!</code> エラーは、LAMBDAをセルに書いた際に <strong>末尾の引数渡しを忘れた</strong> ときの典型エラーです。たとえば次の式はエラーになります。</p>



<pre class="wp-block-code"><code>'--- これは#CALC!エラーになる ---
=LAMBDA(temp, (5/9)*(temp-32))</code></pre>



<p class="wp-block-paragraph">セル内で即時呼び出しするには末尾に <code>(100)</code> のように引数を付けます。</p>



<pre class="wp-block-code"><code>'--- 末尾に引数を渡せば正常動作 ---
=LAMBDA(temp, (5/9)*(temp-32))(100)</code></pre>



<p class="wp-block-paragraph">なお、名前定義に登録したLAMBDAを呼び出す場合は <code>=MY_FUNC(100)</code> の形で問題ありません。</p>



<h3 class="wp-block-heading"><span id="toc33">変数名にセル参照と同名を使ったときの挙動</span></h3>



<p class="wp-block-paragraph">LETの変数名に <code>A1</code> や <code>B2</code> のような「セル参照と同名」を使うと、Excelは予期しない動作をする可能性があります。たとえば以下の式は本来意図した動作にならない恐れがあります。</p>



<pre class="wp-block-code"><code>'--- セル参照と同名はNG ---
=LET(A1, 10, A1*2)</code></pre>



<p class="wp-block-paragraph">LETの仕様上「変数名はセル参照と同名にしない」というルールがあります。<code>price</code> や <code>taxRate</code> のように <strong>意味のある名前</strong> を必ず付けてください。可読性の面でも重要です。</p>



<h3 class="wp-block-heading"><span id="toc34">LAMBDAの再帰呼び出しでスタックオーバーフロー</span></h3>



<p class="wp-block-paragraph">LAMBDAは自分自身を呼び出す「再帰」が可能ですが、停止条件を書き忘れるとExcelがフリーズします。階乗計算の例で見てみましょう。</p>



<pre class="wp-block-code"><code>'--- FACT_LAMBDA として登録するイメージ ---
=LAMBDA(n, IF(n&lt;=1, 1, n * FACT_LAMBDA(n-1)))</code></pre>



<p class="wp-block-paragraph"><code>n<=1</code> という停止条件を抜くと無限ループになり、最悪Excelが応答不能になります。再帰LAMBDAを書くときは必ず停止条件を最初に書く癖を付けてください。</p>



<h2 class="wp-block-heading"><span id="toc35">よくある質問（FAQ）</span></h2>



<p class="wp-block-paragraph">[faq q="LET関数とLAMBDA関数の最大の違いは何ですか？" a="スコープと役割が違います。LET関数は「1つのセル内だけで使える変数」を作るためのもの、LAMBDA関数は「ブック全体で使い回せるカスタム関数」を作るためのものです。LETは長い数式を整理する用途、LAMBDAは複数箇所で同じ計算ロジックを再利用する用途で使い分けます。"]<br>[faq q="Excel 2019や2016ではLET・LAMBDAは使えますか？" a="使えません。LET関数はExcel 2021 / Microsoft 365以降が必須、LAMBDA関数はMicrosoft 365専用です。Excel 2019以前のバージョンで開くと#NAME?エラーになります。社外に共有する場合は、相手のExcelバージョンを必ず確認してください。"]<br>[faq q="LAMBDA関数で作ったカスタム関数は他のブックでも使えますか？" a="そのままでは使えません。LAMBDA関数は「名前の管理」に登録するため、登録したブック内でのみ有効です。他のブックでも使うには、各ブックで同じLAMBDA式を再登録するか、テンプレートブックを共有して全員にコピーしてもらう運用が一般的です。"]<br>[faq q="LAMBDA関数にマクロのセキュリティ警告は出ますか？" a="出ません。LAMBDAは数式の延長なので、ファイル形式もxlsxのままで配布できます。VBAのユーザー定義関数（UDF）と違い、開いた人にマクロ警告が出ないため、社内ポリシーでマクロが制限されている環境でも安心して配布できます。"]<br>[faq q="LET関数の変数名に使ってはいけないものはありますか？" a="4つの制約があります。1. 数字や記号で始まる名前（例: 1stValue）、2. スペースを含む名前、3. A1やB2などのセル参照と同じ名前、4. TRUE・FALSE・NULLなどの予約語、これらは使えません。安全な命名は「英小文字で始まる意味のある名前（例: result, taxRate, totalPrice）」です。"]<br>[faq q="LAMBDAとVBAのユーザー定義関数(UDF)はどちらを使うべきですか？" a="数式で書ける範囲ならLAMBDAを優先するのがおすすめです。xlsxのまま配布でき、セキュリティ警告も出ないからです。ただしファイル操作・正規表現・WEB API呼び出しなど数式で書けない処理はVBA UDFが必要です。Microsoft 365が使えない環境ではVBA UDFを選びましょう。"]</p>



<h2 class="wp-block-heading"><span id="toc36">まとめ：LETは今日から、LAMBDAは次のステップで</span></h2>



<p class="wp-block-paragraph">LET関数とLAMBDA関数は、ExcelをVBAなしで「自分仕様」にカスタマイズできる強力な仕組みです。最後に本記事の要点を整理します。</p>



<ul class="wp-block-list"><li><strong>LET関数</strong>: セル内で変数を定義し、長い数式を整理する。Excel 2021以降で利用可</li><li><strong>LAMBDA関数</strong>: ブック全体で再利用できるカスタム関数を定義する。Microsoft 365専用</li><li><strong>使い分け</strong>: 1セル完結ならLET、複数箇所で繰り返すならLAMBDA</li><li><strong>組み合わせ</strong>: LAMBDA内部でLETを使えば、関数の内部ロジックを段階的に書けて可読性が大幅向上</li><li><strong>エラー対処</strong>: <code>#NAME?</code> はバージョン・スペル・名前登録、<code>#CALC!</code> はLAMBDA末尾の引数渡し忘れ</li><li><strong>VBAとの違い</strong>: xlsxのまま配布可・セキュリティ警告なし・ただしMicrosoft 365専用</li></ul>



<p class="wp-block-paragraph">まずは今日からLETを試してみてください。長いVLOOKUP+IFERRORの数式を <code>result</code> という変数1つで括るだけで、メンテナンス性が大きく変わります。LETの操作に慣れたら、次のステップとしてLAMBDA関数を1つだけ「名前の管理」に登録してみましょう。消費税計算でも単価計算でもかまいません。1つでも自作の関数がブックに登録できると、Excelとの付き合い方そのものが変わります。</p>



<p class="wp-block-paragraph">VBAに踏み込まなくても、数式だけでここまで自動化できる時代になりました。<strong>「数式に名前を付ける」</strong> という小さな一歩から、メンテナンスしやすく再利用可能なExcel運用を始めていきましょう。</p>



<h3 class="wp-block-heading"><span id="toc37">関連記事で次のステップに進む</span></h3>



<p class="wp-block-paragraph">LET/LAMBDAを使いこなすうえで、合わせて押さえておきたい関数記事を紹介します。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-vlookup/">ExcelのVLOOKUP関数の使い方</a>：LET実務例①で必須の検索関数</li><li><a href="https://mashukabu.com/excel-function-howto-use-if/">ExcelのIF関数の使い方</a>：複合条件をLETで整理する前に基礎を確認</li><li><a href="https://mashukabu.com/excel-function-howto-use-iferror/">ExcelのIFERROR関数の使い方</a>：エラー処理の標準パターン</li><li><a href="https://mashukabu.com/excel-function-howto-use-map/">ExcelのMAP関数の使い方</a>：LAMBDAとの相棒、配列一括処理の要</li><li><a href="https://mashukabu.com/excel-vba-howto-use-function/">VBA Functionプロシージャの使い方</a>：LAMBDAで足りないケースの代替手段</li><li><a href="https://mashukabu.com/excel-function-list-by-function/">Excel関数一覧【機能別】</a>：他の便利関数を機能別に俯瞰</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-let-lambda-function-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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-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">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のBYCOL関数の使い方｜列ごとに関数適用</title>
		<link>https://mashukabu.com/excel-function-howto-use-bycol/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-bycol/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 12:10:13 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[BYCOL関数]]></category>
		<category><![CDATA[Excel中級者]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[スピル]]></category>
		<category><![CDATA[列集計]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5899</guid>

					<description><![CDATA[ExcelのBYCOL関数の使い方を実例で解説。列ごとにSUM・AVERAGE・MAXをまとめて求める方法、LAMBDA構文の書き方、#SPILL!エラーの対処、BYROW関数との違いまでカバー。Microsoft 365ユーザー必見。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月の集計表で、列ごとにSUM関数をコピペしていませんか。列数が増えるたびに数式をコピーして、見た目は揃っていてもどこかで貼り間違いが発生する。そんな地味な作業に時間を奪われるのはもったいないですよね。</p>



<p class="wp-block-paragraph">もし1つの数式で「この表の各列の合計をまとめて出して」と指示できたらどうでしょうか。実はExcelのMicrosoft 365には、そのためのBYCOL関数という専用関数が用意されています。列単位で一気に集計を返してくれる、スピル時代ならではの便利な関数です。</p>



<p class="wp-block-paragraph">この記事では、ExcelのBYCOL関数の使い方を基本から応用まで解説します。LAMBDA関数との組み合わせ方、#SPILL!エラーへの対処、BYROW関数との違い、さらにGoogleスプレッドシート版との差分まで、実務で詰まりやすいポイントを重点的に紹介します。</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">BYCOL関数とは？</a><ol><li><a href="#toc2" tabindex="0">Microsoft 365専用・スプレッドシート版との違い</a></li><li><a href="#toc3" tabindex="0">BYROW関数（行版）との対比</a></li></ol></li><li><a href="#toc4" tabindex="0">BYCOL関数の書き方</a><ol><li><a href="#toc5" tabindex="0">構文と引数</a></li><li><a href="#toc6" tabindex="0">LAMBDAを省略できない理由</a></li></ol></li><li><a href="#toc7" tabindex="0">基本の使い方</a><ol><li><a href="#toc8" tabindex="0">列ごとにSUMを求める</a></li><li><a href="#toc9" tabindex="0">列ごとにAVERAGE・MAXを求める</a></li></ol></li><li><a href="#toc10" tabindex="0">応用例</a><ol><li><a href="#toc11" tabindex="0">BYCOL × IFで条件付き列集計</a></li><li><a href="#toc12" tabindex="0">複合計算（SUM÷COUNTなど）をネストする</a></li><li><a href="#toc13" tabindex="0">空白・文字列が混在する列を安全に集計する</a></li><li><a href="#toc14" tabindex="0">名前の管理でLAMBDAを登録して使い回す</a></li><li><a href="#toc15" tabindex="0">共有ブックで「数式を壊されにくい」という地味な強み</a></li><li><a href="#toc16" tabindex="0">列ごとに文字列を連結する（TEXTJOIN）</a></li></ol></li><li><a href="#toc17" tabindex="0">MAP・SCANとの使い分け</a></li><li><a href="#toc18" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc19" tabindex="0">#SPILL!エラー｜隣のセルが空白か確認</a></li><li><a href="#toc20" tabindex="0">LAMBDA引数ミス｜引数の数が合わないとき</a></li><li><a href="#toc21" tabindex="0">バージョン非対応｜M365以外で使えない場合</a></li></ol></li><li><a href="#toc22" tabindex="0">よくある質問（FAQ）</a><ol><li><a href="#toc23" tabindex="0">BYCOL関数とSUMPRODUCT関数はどう違いますか？</a></li><li><a href="#toc24" tabindex="0">BYCOL関数の結果を縦方向に並べたいのですが可能ですか？</a></li><li><a href="#toc25" tabindex="0">BYCOL関数の中でFILTER関数を使えますか？</a></li><li><a href="#toc26" tabindex="0">BYCOL関数の結果を固定値として貼り付けたいです。</a></li><li><a href="#toc27" tabindex="0">毎月列が増える表でもBYCOL関数は使えますか？</a></li></ol></li><li><a href="#toc28" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">ExcelのBYCOL関数は、配列の「列ごと」にLAMBDA関数を適用し、1行にまとめた結果を返す関数です。読み方は「バイコル」。「BY COLumn（列ごとに）」という名前の通り、表を縦方向に分割して各列を1つずつ処理するイメージで使います。</p>



<p class="wp-block-paragraph">従来のExcelで列ごとの集計を行う場合、SUMやAVERAGEを列の数だけ横にコピーするのが一般的でした。BYCOL関数を使えば、1つの数式で「すべての列に同じ処理」を適用できます。結果はスピル（自動的に隣のセルへ展開される機能）で横方向に並ぶため、数式の管理箇所が1つに集約され、修正や検算の手間が大きく減ります。</p>



<p class="wp-block-paragraph">戻り値の形状は「1行×N列」の配列です。たとえば2行×3列の表を渡せば、結果は1行×3列の配列として返ります。元データの「列の数」がそのまま結果の「セルの数」になる、と覚えておくと迷いません。</p>



<h3 class="wp-block-heading"><span id="toc2">Microsoft 365専用・スプレッドシート版との違い</span></h3>



<p class="wp-block-paragraph">BYCOL関数はMicrosoft 365時代の新世代関数で、対応バージョンは限定的です。利用できる環境は次のとおりです。</p>



<ul class="wp-block-list"><li>Excel for Microsoft 365 / Microsoft 365 for Mac</li><li>Excel for the web</li><li>Excel 2024 / Excel 2024 for Mac</li></ul>



<p class="wp-block-paragraph">Excel 2019やExcel 2021では使えない点に注意してください。</p>



<p class="wp-block-paragraph">GoogleスプレッドシートにもBYCOL関数は存在し、基本構文は <code>=BYCOL(配列または範囲, LAMBDA)</code> でExcel版とほぼ同じです。「Sheetsで使っていた数式をそのままExcelに持ってきたい」というケースでも、ほぼ書き換えなしで動くのが嬉しいポイントです。ただしスピルの干渉エラーの出方や、Excelテーブル内では動的配列関数が機能しないなど、Excel特有の注意点があります。</p>



<p class="wp-block-paragraph">詳しいSheets版の書き方は、自サイトの<a href="https://mashukabu.com/spreadsheet-bycol-function/">スプレッドシートのBYCOL関数の使い方</a>も参考にしてください。両方の違いを押さえておくと、二重運用している環境でも迷わず使い分けられます。</p>



<h3 class="wp-block-heading"><span id="toc3">BYROW関数（行版）との対比</span></h3>



<p class="wp-block-paragraph">BYCOL関数には「行版」とも言うべき兄弟関数、BYROW関数があります。BYROW関数は配列の「行ごと」にLAMBDAを適用し、「N行×1列」の配列を返します。「行はBYROW、列はBYCOL」と名前の頭文字で覚えると混乱しません。</p>



<figure class="wp-block-table"><table><thead><tr><th>観点</th><th>BYCOL関数</th><th>BYROW関数</th></tr></thead><tbody><tr><td>処理の向き</td><td>列ごと（縦のかたまりを処理）</td><td>行ごと（横のかたまりを処理）</td></tr><tr><td>戻り値の形</td><td>1行×N列</td><td>N行×1列</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">どちらもLAMBDA関数を使って「各列/各行にどんな処理を適用するか」を自由に指定できます。行ごとの集計が必要ならBYROW、列ごとの集計ならBYCOL、と目的に合わせて選び分けるだけです。</p>



<h2 class="wp-block-heading"><span id="toc4">BYCOL関数の書き方</span></h2>



<p class="wp-block-paragraph">BYCOL関数は引数が2つだけのシンプルな構造ですが、第2引数にLAMBDAが必須という点だけは他の関数と毛色が違います。ここで構文を正確に押さえておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc5">構文と引数</span></h3>



<p class="wp-block-paragraph">BYCOL関数の基本構文は次のとおりです。</p>



<pre class="wp-block-code"><code>=BYCOL(array, lambda(column))</code></pre>



<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><code>array</code></td><td>必須</td><td>処理したい配列またはセル範囲。A1:C10のような長方形の範囲を渡す</td></tr><tr><td><code>lambda(column)</code></td><td>必須</td><td>各列に適用するLAMBDA関数。<code>column</code>は1列分のデータを表す仮引数</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>array</code> には通常のセル範囲だけでなく、他の関数が返す配列もそのまま渡せます。<code>lambda(column)</code> の <code>column</code> という名前は自分で好きな名前に変えても構いません。たとえば <code>LAMBDA(col, SUM(col))</code> のように短い名前を使うと、数式が読みやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc6">LAMBDAを省略できない理由</span></h3>



<p class="wp-block-paragraph">「SUMだけを使いたいのだから、LAMBDAは省略したい」と思うかもしれません。しかしBYCOL関数では、第2引数のLAMBDAは省略できません。理由は、BYCOL関数自体が「何の処理をするか」を知らない汎用関数だからです。</p>



<p class="wp-block-paragraph">BYCOL関数は「各列を順番にLAMBDAへ渡す」という役割しか持ちません。列ごとに何を計算するかはLAMBDAの中で決める必要があります。次の2つを見比べると違いが明確です。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, SUM)</code></pre>



<p class="wp-block-paragraph">上の書き方はNGです。SUMをLAMBDAで包まずに渡しているためエラーになります。正しくは次のように書きます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph"><code>LAMBDA(仮引数, 計算式)</code> の形で必ず包んであげてください。</p>



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



<p class="wp-block-paragraph">ここからはBYCOL関数を使った基本的な集計パターンを紹介します。どれも実務の集計表で頻出するものばかりです。</p>



<h3 class="wp-block-heading"><span id="toc8">列ごとにSUMを求める</span></h3>



<p class="wp-block-paragraph">まずは定番の「列ごとの合計」から。A1:C5に店舗別の売上が入っていて、各列（＝各店舗）の合計を一発で出したい場合の数式は次のとおりです。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C5, LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph">この数式をE1に入力すると、E1:G1の3セルに各列の合計がスピルで展開されます。列数が10や20に増えても、範囲を <code>A1:T5</code> のように広げるだけでOKです。SUM関数をコピペする必要はありません。</p>



<p class="wp-block-paragraph">Microsoft公式ドキュメントでは、各列の最大値を求める <code>=BYCOL(A1:C2, LAMBDA(array, MAX(array)))</code> が使用例として紹介されています。LAMBDAの仮引数名は <code>array</code> でも <code>col</code> でも動作は同じです。</p>



<h3 class="wp-block-heading"><span id="toc9">列ごとにAVERAGE・MAXを求める</span></h3>



<p class="wp-block-paragraph">SUM以外の集計関数も同じ要領です。AVERAGEで平均、MAXで最大値、MINで最小値がそれぞれ1つの数式で取れます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C5, LAMBDA(col, AVERAGE(col)))</code></pre>



<pre class="wp-block-code"><code>=BYCOL(A1:C5, LAMBDA(col, MAX(col)))</code></pre>



<pre class="wp-block-code"><code>=BYCOL(A1:C5, LAMBDA(col, MIN(col)))</code></pre>



<p class="wp-block-paragraph">これらを縦に並べて書けば、1つのセル範囲に「合計・平均・最大」を整然と出せます。従来なら関数を手で入力していた作業が、数式の使い回しで済むようになるのが最大のメリットです。</p>



<h2 class="wp-block-heading"><span id="toc10">応用例</span></h2>



<p class="wp-block-paragraph">基本の使い方を押さえたら、実務でよく出てくる応用パターンにも挑戦してみましょう。BYCOL関数はLAMBDAの中身を自由に書けるため、組み合わせ次第で表現力がぐっと広がります。</p>



<h3 class="wp-block-heading"><span id="toc11">BYCOL × IFで条件付き列集計</span></h3>



<p class="wp-block-paragraph">「各列のうち、100以上の値だけを合計したい」といった条件付き集計もBYCOL関数で実現できます。LAMBDAの中にIF関数を仕込み、条件を満たす要素だけをSUMに渡す形です。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, SUM(IF(col&gt;=100, col, 0))))</code></pre>



<p class="wp-block-paragraph">この数式は各列について「100以上ならその値、未満なら0」を返し、その合計を取ります。SUMIF関数は範囲と条件を直接指定する使い方が主流ですが、BYCOL内ではLAMBDAの仮引数を条件判定に使えるため、より柔軟な集計が組めます。</p>



<p class="wp-block-paragraph">同じ考え方で、COUNTIFのように「条件に合う件数」を列ごとに数えることもできます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, SUM(--(col&gt;=100))))</code></pre>



<p class="wp-block-paragraph"><code>--(col>=100)</code> は、TRUE/FALSEを1/0に変換する定番テクニックです。BYCOLと組み合わせると、列ごとの条件一致件数がスピルで一気に並びます。</p>



<h3 class="wp-block-heading"><span id="toc12">複合計算（SUM÷COUNTなど）をネストする</span></h3>



<p class="wp-block-paragraph">LAMBDAの中では複数の関数をネストして自由に計算できます。たとえば「各列の平均を自前で計算したい」ときは、SUMとCOUNTを組み合わせる書き方が可能です。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, SUM(col)/COUNT(col)))</code></pre>



<p class="wp-block-paragraph">単純な平均ならAVERAGEで十分ですが、分母と分子に別々の条件を絡めたいときに威力を発揮します。公式ドキュメントでは <code>=BYCOL(A1:C2, LAMBDA(array, SUMSQ(array)))</code> のように二乗和を求める例も紹介されています。通常の数式で書ける計算ならほぼ何でも詰め込める、と考えてOKです。</p>



<p class="wp-block-paragraph">より複雑な式では、LET関数で中間変数を定義すると可読性が上がります。詳しくは<a href="https://mashukabu.com/excel-function-howto-use-let/">ExcelのLET関数の使い方</a>もあわせて参照してみてください。</p>



<h3 class="wp-block-heading"><span id="toc13">空白・文字列が混在する列を安全に集計する</span></h3>



<p class="wp-block-paragraph">実務の集計表には、未入力の空白セルや「未集計」などの文字列が紛れ込んでいることがよくあります。こうした列にそのままBYCOL関数でAVERAGEをかけると、空白だけの列で <code>#DIV/0!</code> エラーが出たり、数値以外が混じって意図しない結果になったりします。</p>



<p class="wp-block-paragraph">そこでLAMBDAの中にIFERROR関数を挟んでおくと、エラーを空文字に置き換えて表全体の見栄えを保てます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, IFERROR(AVERAGE(col), &quot;&quot;)))</code></pre>



<p class="wp-block-paragraph">この書き方なら、データのない列だけ空白表示になり、ほかの列は通常どおり平均が出ます。集計表を他人に渡す前のひと工夫として覚えておくと便利です。</p>



<p class="wp-block-paragraph">文字列が混在する列を合計したいときは、ISNUMBER関数で数値だけを拾う形が安全です。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, LAMBDA(col, SUM(IF(ISNUMBER(col), col, 0))))</code></pre>



<p class="wp-block-paragraph"><code>IF(ISNUMBER(col), col, 0)</code> で「数値ならその値、それ以外は0」に変換してから合計します。文字列が混じっていてもエラーにならず、数値だけをきれいに足し込めます。汚れたデータをそのまま受け止められるのは、LAMBDAで前処理を書き込めるBYCOLならではの強みです。</p>



<h3 class="wp-block-heading"><span id="toc14">名前の管理でLAMBDAを登録して使い回す</span></h3>



<p class="wp-block-paragraph">同じ集計ロジックを複数のシートやブックで何度も書くなら、LAMBDAを「名前」として登録しておくと数式がぐっと短くなります。手順は次のとおりです。</p>



<ol class="wp-block-list"><li>リボンの「数式」タブから「名前の管理」を開く</li><li>「新規作成」をクリックし、名前に <code>MY_SUM</code> などと入力する</li><li>参照範囲に <code>=LAMBDA(col, SUM(col))</code> と入力して保存する</li></ol>



<p class="wp-block-paragraph">登録後は、BYCOLの第2引数に名前をそのまま渡すだけで動きます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C10, MY_SUM)</code></pre>



<p class="wp-block-paragraph">毎回 <code>LAMBDA(col, SUM(col))</code> と書く必要がなくなり、数式の読みやすさと保守性が上がります。チームで共有するブックなら、集計ロジックを1か所に集約できるのも大きなメリットです。</p>



<p class="wp-block-paragraph">ただし、名前付きLAMBDAは登録したブック内だけで有効です。別ブックにコピーしても自動では引き継がれないため、配布先でも使いたいときは同じ名前を登録し直すか、インラインのLAMBDAに書き戻しておきましょう。LAMBDAの登録手順をより詳しく知りたい場合は、<a href="https://mashukabu.com/excel-function-howto-use-lambda/">ExcelのLAMBDA関数の使い方</a>もあわせて確認してみてください。</p>



<h3 class="wp-block-heading"><span id="toc15">共有ブックで「数式を壊されにくい」という地味な強み</span></h3>



<p class="wp-block-paragraph">従来のSUMコピー方式では、列の数だけ独立した数式がセルに散らばります。複数人で編集するブックだと、誰かが1列分の数式を上書きしたり消してしまったりしても、見た目では気づきにくいのが悩みどころです。</p>



<p class="wp-block-paragraph">BYCOL関数なら集計の入力セルがたった1つに集約されます。「ここに数式があり、ここがすべての列を集計している」と一目でわかるため、誤って壊された場合の検知や修正がはるかに簡単です。共有ブックで集計式がいつの間にか狂っている、というあるあるトラブルへの予防策としても有効です。</p>



<h3 class="wp-block-heading"><span id="toc16">列ごとに文字列を連結する（TEXTJOIN）</span></h3>



<p class="wp-block-paragraph">BYCOL関数は数値の集計だけでなく、文字列を返す関数とも組み合わせられます。たとえば各列の項目をカンマ区切りで1つのセルにまとめたいときは、TEXTJOIN関数をLAMBDAの中に置きます。</p>



<pre class="wp-block-code"><code>=BYCOL(A1:C5, LAMBDA(col, TEXTJOIN(&quot;、&quot;, TRUE, col)))</code></pre>



<p class="wp-block-paragraph">各列の値が「商品A、商品B、商品C」のように読点区切りで1セルに結合され、列ごとの一覧を横並びで作れます。TEXTJOINは1つの文字列を返すため、BYCOLの「LAMBDAは単一の値を返す」というルールにきちんと収まります。商品名や担当者名などのリストを概要欄にまとめたいときに役立つパターンです。TEXTJOIN自体の細かい使い方は<a href="https://mashukabu.com/excel-function-howto-use-textjoin/">ExcelのTEXTJOIN関数の使い方</a>で解説しています。</p>



<h2 class="wp-block-heading"><span id="toc17">MAP・SCANとの使い分け</span></h2>



<p class="wp-block-paragraph">BYCOL関数を調べていると、MAP関数やSCAN関数といった同じLAMBDA系の「ヘルパー関数」も目に入ってきます。名前が似ていて混乱しやすいので、それぞれの守備範囲をここで整理しておきましょう。役割を一言でいうと、BYCOLは「集約」、MAPは「変換」、SCANは「累積」です。</p>



<figure class="wp-block-table"><table><thead><tr><th>関数</th><th>処理の中身</th><th>戻り値の形</th><th>典型用途</th></tr></thead><tbody><tr><td>BYCOL</td><td>列ごとに1つの値へ集約</td><td>1行×N列</td><td>列ごとの合計・平均・最大</td></tr><tr><td>BYROW</td><td>行ごとに1つの値へ集約</td><td>N行×1列</td><td>行ごとの合計・平均・最大</td></tr><tr><td>MAP</td><td>各セルを1対1で変換</td><td>元の表と同じサイズ</td><td>全セルを1.1倍・単位変換</td></tr><tr><td>SCAN</td><td>先頭から順に累積</td><td>元の表と同じサイズ</td><td>累計・残高の推移</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">判断の目安はシンプルです。表のサイズを保ったまま中身だけ変えたいならMAP、各列を1つの値にまとめたいならBYCOLを選びます。たとえば「各列の値をすべて1.1倍したい（税込み変換など）」なら、サイズが変わらないMAP関数の出番です。一方「各列の合計を1行で出したい」なら集約を行うBYCOL関数が正解です。</p>



<p class="wp-block-paragraph">「列ごとの累計の推移を見たい」という場合は、BYCOLでは最終的な合計値しか返らず「なぜ1行しか出ないのか」と詰まりがちです。途中経過まで欲しいときは、累積を返すSCAN関数を使います。各関数の詳しい挙動は<a href="https://mashukabu.com/excel-function-howto-use-map/">ExcelのMAP関数の使い方</a>、<a href="https://mashukabu.com/excel-function-howto-use-scan/">ExcelのSCAN関数の使い方</a>で確認できます。行版の集計が必要なら<a href="https://mashukabu.com/excel-function-howto-use-byrow/">ExcelのBYROW関数の使い方</a>もあわせてどうぞ。</p>



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



<p class="wp-block-paragraph">BYCOL関数は新しい関数のため、初めて触るときに独特のエラーに遭遇することがあります。公式ドキュメントに記載されている代表的なエラーと対処法をまとめました。</p>



<h3 class="wp-block-heading"><span id="toc19">#SPILL!エラー｜隣のセルが空白か確認</span></h3>



<p class="wp-block-paragraph">BYCOL関数の結果は横方向にスピルするため、結果が展開される領域が他のデータで埋まっていると <code>#SPILL!</code> エラーが発生します。Microsoft公式によれば、主な原因は次の3つです。</p>



<ul class="wp-block-list"><li>スピル範囲に既存データが残っている</li><li>スピル範囲に結合セルが含まれている</li><li>Excelテーブル内で動的配列関数を使っている（テーブル内ではスピルが機能しない）</li></ul>



<p class="wp-block-paragraph">対処はシンプルで、スピル先のセルを空にすればOKです。エラーセルの横に表示される警告アイコンをクリックし、「妨害しているセルを選択」ボタンを押すと、原因となっているセルがハイライトされます。その位置のデータを退避するか、数式の入力位置を別の場所に変えましょう。</p>



<p class="wp-block-paragraph">Excelテーブル内で使いたい場合は、一度テーブル外のセルに数式を書き、結果だけをテーブルに値貼り付けする運用がおすすめです。</p>



<h3 class="wp-block-heading"><span id="toc20">LAMBDA引数ミス｜引数の数が合わないとき</span></h3>



<p class="wp-block-paragraph"><code>#VALUE!</code> エラーや <code>#CALC!</code> エラーが出たときは、LAMBDA関数の書き方を見直します。公式ドキュメントでは次のように区別されています。</p>



<ul class="wp-block-list"><li><code>#VALUE!</code>：無効なLAMBDA関数、またはLAMBDAのパラメータ数が正しくない（Incorrect Parameters）</li><li><code>#CALC!</code>：LAMBDA関数が提供されていない、またはLAMBDAが単一値以外を返している</li></ul>



<p class="wp-block-paragraph">典型的なミスは、LAMBDAの仮引数を増やしすぎるパターンです。BYCOL関数のLAMBDAは仮引数1つだけを受け取ります。<code>LAMBDA(col, row, SUM(col))</code> のように引数を2つ書くと <code>#VALUE!</code> になります。</p>



<p class="wp-block-paragraph">また <code>#CALC!</code> は、LAMBDAの中身が配列をそのまま返してしまった場合に出ます。SUMやAVERAGEのような集約関数で「1つの値」に畳み込む処理を必ず最後に置いてください。</p>



<h3 class="wp-block-heading"><span id="toc21">バージョン非対応｜M365以外で使えない場合</span></h3>



<p class="wp-block-paragraph">Excel 2019やExcel 2021でBYCOL関数を使おうとすると、関数名が認識されず <code>#NAME?</code> エラーになります。BYCOL関数はMicrosoft 365系とExcel 2024系でのみ使える新しい関数だからです。</p>



<p class="wp-block-paragraph">バージョンが原因かどうかは、「ファイル」→「アカウント」画面で確認できます。製品名が「Microsoft 365」や「Excel 2024」になっていれば対応済みです。「Excel 2021」「Excel 2019」と表示される場合は、そのPC環境ではBYCOL関数自体が存在しません。</p>



<p class="wp-block-paragraph">対応バージョンのPCで数式を書き、値貼り付けで共有するか、SUMを列ごとに並べる従来の書き方にフォールバックする必要があります。Microsoft 365にアップグレードできるならそれが最速の解決策です。</p>



<h2 class="wp-block-heading"><span id="toc22">よくある質問（FAQ）</span></h2>



<h3 class="wp-block-heading"><span id="toc23">BYCOL関数とSUMPRODUCT関数はどう違いますか？</span></h3>



<p class="wp-block-paragraph">SUMPRODUCT関数は、表全体を掛け合わせて最終的に1つの値へ集約する関数です。これに対してBYCOL関数は、列ごとに集約した結果を横一列のスピルで並べて返します。「表全体の合計が1つ欲しい」ならSUMPRODUCT、「列ごとの結果をそれぞれ並べたい」ならBYCOL、と出力の形で選び分けると迷いません。</p>



<h3 class="wp-block-heading"><span id="toc24">BYCOL関数の結果を縦方向に並べたいのですが可能ですか？</span></h3>



<p class="wp-block-paragraph">BYCOL関数の戻り値は「1行×N列」と必ず横方向に並びます。これを縦に並べたいときは、TRANSPOSE関数で囲んで転置するのが定番です。<code>=TRANSPOSE(BYCOL(...))</code> のように書くと、横並びの結果が縦並びに切り替わります。レイアウトの都合で縦に置きたいときに覚えておくと便利です。</p>



<h3 class="wp-block-heading"><span id="toc25">BYCOL関数の中でFILTER関数を使えますか？</span></h3>



<p class="wp-block-paragraph">FILTER関数は条件に合う複数の値を「配列」として返すため、そのままLAMBDAの中に置くと単一値を返せず <code>#CALC!</code> エラーになりやすい点に注意が必要です。条件で絞り込んだうえで列ごとに集計したい場合は、先にFILTERで範囲を絞ってからBYCOLに渡すか、本文の応用例で紹介したIF関数を使った条件付き集計に置き換えるのが安全です。</p>



<h3 class="wp-block-heading"><span id="toc26">BYCOL関数の結果を固定値として貼り付けたいです。</span></h3>



<p class="wp-block-paragraph">スピルした結果はそのままだと数式に連動して変わります。値として固定したいときは、結果のセル範囲を選択してコピーし、貼り付け先で「値の貼り付け」（Ctrl+Alt+Vから「値」を選択）を実行してください。これで集計結果が静的な数値に変わり、元データを消しても保持されます。</p>



<h3 class="wp-block-heading"><span id="toc27">毎月列が増える表でもBYCOL関数は使えますか？</span></h3>



<p class="wp-block-paragraph">使えますが、<code>A1:C10</code> のような固定範囲だと増えた列が集計に入らないため、範囲の指定を見直す必要があります。OFFSET関数やINDEX関数とCOUNTA関数を組み合わせて列数に応じた範囲を作り、それをBYCOLに渡すと列が増えても自動で集計対象を広げられます。なお、Excelテーブル（ListObject）内ではスピルが機能しません。動的に列を増やしたい場合はテーブル外のセルに数式を置く運用がおすすめです。</p>



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



<p class="wp-block-paragraph">ExcelのBYCOL関数は、列ごとの集計を1つの数式にまとめてくれる頼もしい関数です。SUM・AVERAGE・MAXなどの定番集計はもちろん、IFと組み合わせた条件付き集計や、SUM/COUNTを組み合わせたカスタム計算もLAMBDA内で自由に書けます。</p>



<p class="wp-block-paragraph">ポイントを改めて整理すると次のとおりです。</p>



<ul class="wp-block-list"><li>構文は <code>=BYCOL(array, lambda(column))</code> で、LAMBDAは省略不可</li><li>戻り値は「1行×N列」の配列（列数がそのまま結果のセル数になる）</li><li>Microsoft 365・Excel 2024系でのみ動作。Excel 2021以前は <code>#NAME?</code> エラー</li><li><code>#SPILL!</code> エラーはスピル先の空き・結合セル・テーブル内使用を疑う</li><li>行ごとの集計が必要ならBYROW関数、列ごとならBYCOL関数で使い分ける</li></ul>



<p class="wp-block-paragraph">LAMBDA関数の書き方に不安があるなら、先に<a href="https://mashukabu.com/excel-function-howto-use-lambda/">ExcelのLAMBDA関数の使い方</a>で基本構文を押さえておくとBYCOLの理解が一気に進みます。コピペ集計から卒業して、スピル時代のスマートな集計術を自分の武器にしていきましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-bycol/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExcelのLAMBDA関数の使い方｜カスタム関数を自作する方法</title>
		<link>https://mashukabu.com/excel-function-howto-use-lambda/</link>
					<comments>https://mashukabu.com/excel-function-howto-use-lambda/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 04:32:21 +0000</pubDate>
				<category><![CDATA[Excel関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[カスタム関数]]></category>
		<category><![CDATA[ヘルパー関数]]></category>
		<category><![CDATA[名前の管理]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=5772</guid>

					<description><![CDATA[ExcelのLAMBDA関数でVBA不要のカスタム関数を作る方法を解説。基本構文から名前の管理への登録手順、税込計算などの実務例、MAP・REDUCE等のヘルパー関数との組み合わせ、よくあるエラー対処法まで紹介しています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「毎回同じ長い数式を組み直すのが面倒&#8230;」。複数のシートで同じ計算ロジックをコピペしていませんか。</p>



<p class="wp-block-paragraph">数式が長くなるほど読みにくくなりますし、修正するときは使っている場所をすべて直す必要があります。</p>



<p class="wp-block-paragraph">そんな悩みを解決するのが <strong>LAMBDA関数</strong> です。よく使う計算ロジックに名前を付けて、自作の関数として使い回せるようになります。この記事ではExcel LAMBDA関数の使い方を実例付きで紹介します。基本の書き方から「名前の管理」への登録、MAP・REDUCEとの連携まで解説します。</p>



<p class="wp-block-paragraph">この記事は次のような人におすすめ</p>



<ul class="wp-block-list"><li>同じ計算式を何度もコピペするのをやめたい</li><li>VBAを使わずにオリジナルの関数を作りたい</li><li>MAP関数やREDUCE関数との組み合わせ方を知りたい</li></ul>




  <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">LAMBDA関数とは？</a></li><li><a href="#toc2" tabindex="0">LAMBDA関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc5" tabindex="0">LAMBDA関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">税込価格を計算する</a></li><li><a href="#toc7" tabindex="0">2つの引数を使う</a></li><li><a href="#toc8" tabindex="0">セル内で単体テストする</a></li></ol></li><li><a href="#toc9" tabindex="0">「名前の管理」に登録する方法</a><ol><li><a href="#toc10" tabindex="0">登録手順</a></li></ol></li><li><a href="#toc11" tabindex="0">LAMBDA関数の実務活用パターン</a><ol><li><a href="#toc12" tabindex="0">MAP関数と組み合わせて配列を一括変換する</a></li><li><a href="#toc13" tabindex="0">REDUCE関数と組み合わせて集約する</a></li><li><a href="#toc14" tabindex="0">BYROW関数と組み合わせて行ごとに処理する</a></li><li><a href="#toc15" tabindex="0">MAKEARRAY関数で配列を生成する</a></li></ol></li><li><a href="#toc16" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc17" tabindex="0">Googleスプレッドシートとの違い</a></li><li><a href="#toc18" tabindex="0">まとめ</a><ol><li><a href="#toc19" tabindex="0">関連記事</a></li><li><a href="#toc20" tabindex="0">関数一覧</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">LAMBDA（読み方: らむだ）関数は、<strong>独自の計算ロジックを関数として定義できる関数</strong>です。名前はプログラミング用語の「ラムダ式（無名関数）」からきています。</p>



<p class="wp-block-paragraph">たとえば「税込価格を計算する関数」がすぐに作れます。「2つの値を特定ルールで結合する関数」なども定義できます。</p>



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



<ul class="wp-block-list"><li>繰り返し使う計算ロジックを1つの関数にまとめる</li><li>「名前の管理」に登録すれば、SUM関数やIF関数と同じように呼び出せる</li><li>MAP・REDUCE・BYROWなどと組み合わせて高度な配列処理ができる</li><li>VBAを使わずに自作関数を作れる</li></ul>



<p class="wp-block-paragraph">対応バージョンはMicrosoft 365、Excel for the web、Excel 2024です。Excel 2021以前では使えません。</p>



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



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



<pre class="wp-block-code"><code>=LAMBDA(引数名1, [引数名2, ...], 数式本体)(値1, [値2, ...])</code></pre>



<p class="wp-block-paragraph">LAMBDA関数は2つのパートに分かれています。定義部分の <code>LAMBDA(...)</code> と、値を渡す <code>(値)</code> です。</p>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/省略可</th><th>説明</th></tr></thead><tbody><tr><td>引数名1</td><td>必須</td><td>数式本体で使う変数の名前（好きな名前を付けられる）</td></tr><tr><td>引数名2〜</td><td>省略可</td><td>2つ目以降の引数。最大253個まで</td></tr><tr><td>数式本体</td><td>必須</td><td>引数名を使った計算式。必ず最後の引数として書く</td></tr><tr><td>(値1, 値2, &#8230;)</td><td>必須</td><td>定義した引数に渡す実際の値やセル参照</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">引数名はセル参照（A1やB2）や関数名（SUMやIFなど）と被らなければ自由に付けられます。<code>price</code> や <code>x</code> など、わかりやすい名前にするのがおすすめです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>LAMBDA関数の最後の引数が必ず「数式本体」になります。引数が1つなら <code>LAMBDA(x, x<em>1.1)</code> のように、<code>x</code> が引数名で <code>x</em>1.1</code> が数式本体です。</p></blockquote>



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



<p class="wp-block-paragraph">まずはセルに直接書いて動きを確認してみましょう。</p>



<h3 class="wp-block-heading"><span id="toc6">税込価格を計算する</span></h3>



<p class="wp-block-paragraph">税抜き価格から税込価格を計算するLAMBDA関数です。</p>



<pre class="wp-block-code"><code>=LAMBDA(price, price*1.1)(A2)</code></pre>



<p class="wp-block-paragraph"><code>price</code> という引数名を定義し、<code>price*1.1</code> で10%の消費税を加算しています。最後の <code>(A2)</code> でセルA2の値を渡しています。A2に「1000」が入っていれば、結果は「1100」です。</p>



<h3 class="wp-block-heading"><span id="toc7">2つの引数を使う</span></h3>



<p class="wp-block-paragraph">姓と名をスペースでつなげてフルネーム表示する例です。</p>



<pre class="wp-block-code"><code>=LAMBDA(sei, mei, sei&amp;&quot; &quot;&amp;mei)(A2, B2)</code></pre>



<p class="wp-block-paragraph">A2に「田中」、B2に「太郎」が入っていれば「田中 太郎」を返します。引数名を2つ定義し、値も2つ渡しているのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc8">セル内で単体テストする</span></h3>



<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><code>=LAMBDA(x, x*2)(5)</code></td><td><strong>10</strong></td><td>5を2倍</td></tr><tr><td><code>=LAMBDA(x, y, x+y)(3, 7)</code></td><td><strong>10</strong></td><td>3+7</td></tr><tr><td><code>=LAMBDA(x, IF(x>=60,"合格","不合格"))(75)</code></td><td><strong>合格</strong></td><td>条件分岐</td></tr><tr><td><code>=LAMBDA(txt, UPPER(txt))("hello")</code></td><td><strong>HELLO</strong></td><td>文字列変換</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">セル内で動作を確認してから「名前の管理」に登録する、という流れがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc9">「名前の管理」に登録する方法</span></h2>



<p class="wp-block-paragraph">LAMBDA関数の真価は「名前の管理」に登録したときに発揮されます。登録すれば、SUM関数やVLOOKUP関数と同じ感覚で呼び出せるようになります。</p>



<h3 class="wp-block-heading"><span id="toc10">登録手順</span></h3>



<ol class="wp-block-list"><li>「<strong>数式</strong>」タブ →「<strong>名前の管理</strong>」をクリックします</li><li>「<strong>新規作成</strong>」をクリックします</li><li>以下の項目を入力します</li></ol>



<ul class="wp-block-list"><li><strong>名前</strong>: 関数名（例: <code>TAX_INCL</code>）</li><li><strong>スコープ</strong>: ブック（デフォルトのまま）</li><li><strong>コメント</strong>: 「税抜価格から税込価格を計算」など機能説明</li><li><strong>参照範囲</strong>: <code>=LAMBDA(price, ROUND(price*1.1,0))</code></li></ul>



<ol class="wp-block-list"><li>「<strong>OK</strong>」をクリックして保存します</li></ol>



<p class="wp-block-paragraph">登録が完了すると、どのセルでも次のように呼び出せます。</p>



<pre class="wp-block-code"><code>=TAX_INCL(A2)</code></pre>



<p class="wp-block-paragraph">定義を1か所直すだけで、使っているすべてのセルに反映されます。税率が変わっても修正は1回で済むのが大きなメリットです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Excelの「名前の管理」で登録した関数は、オートコンプリート（入力候補）には表示されません。関数名を正確に入力する必要があるので、覚えやすい名前を付けておきましょう。Macの場合は「数式」タブ →「名前の定義」から登録できます。</p></blockquote>



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



<h3 class="wp-block-heading"><span id="toc12">MAP関数と組み合わせて配列を一括変換する</span></h3>



<p class="wp-block-paragraph">MAP関数を使えば、配列の各値にLAMBDA関数を適用できます。</p>



<pre class="wp-block-code"><code>=MAP(A2:A10, LAMBDA(price, ROUND(price*1.1,0)))</code></pre>



<p class="wp-block-paragraph">A2:A10の全セルに対して税込計算を一括で適用します。結果はスピル（自動展開）で複数行に表示されるので、1つのセルに数式を入れるだけで完了です。</p>



<h3 class="wp-block-heading"><span id="toc13">REDUCE関数と組み合わせて集約する</span></h3>



<p class="wp-block-paragraph">REDUCE関数は配列を1つの値にまとめる関数です。LAMBDAで集約のロジックを定義します。</p>



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



<p class="wp-block-paragraph">この例では1,000以上の値だけを合計しています。SUMIFSでは書きにくい複雑な条件でも、LAMBDAの中身を自由に書けるので柔軟に対応できます。</p>



<h3 class="wp-block-heading"><span id="toc14">BYROW関数と組み合わせて行ごとに処理する</span></h3>



<p class="wp-block-paragraph">BYROW関数は各行に対してLAMBDAを適用します。</p>



<pre class="wp-block-code"><code>=BYROW(A2:C10, LAMBDA(row, MAX(row)-MIN(row)))</code></pre>



<p class="wp-block-paragraph">各行の最大値と最小値の差（レンジ）を一括で計算できます。行単位の集計処理が1つの数式で完結するのが便利なポイントです。</p>



<h3 class="wp-block-heading"><span id="toc15">MAKEARRAY関数で配列を生成する</span></h3>



<p class="wp-block-paragraph">MAKEARRAY関数はLAMBDAで計算した結果から配列を作ります。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))</code></pre>



<p class="wp-block-paragraph">9行9列の九九の表を1つの数式で作れます。テスト用のダミーデータを用意したいときにも使えます。</p>



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



<figure class="wp-block-table"><table><thead><tr><th>症状</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td>#CALC! エラー</td><td>セル内でLAMBDAを定義したが値を渡していない</td><td><code>=LAMBDA(x, x*2)</code> の末尾に <code>(A2)</code> を付けて値を渡す</td></tr><tr><td>#VALUE! エラー</td><td>引数の数が定義と一致しない</td><td>引数を2つ定義したなら値も2つ渡す</td></tr><tr><td>#VALUE! エラー</td><td>パラメータが253個を超えている</td><td>引数は253個以内に収める</td></tr><tr><td>#NUM! エラー</td><td>再帰呼び出しが深すぎる</td><td>基底条件（IFなどで再帰を止める条件）を見直す</td></tr><tr><td>#NAME? エラー</td><td>引数名にセル参照（A1等）を使っている</td><td><code>x</code>、<code>val</code>、<code>price</code> などセル参照以外の名前にする</td></tr><tr><td>数式本体が実行されない</td><td>「名前の管理」に登録せずセル内で <code>(値)</code> を付け忘れた</td><td><code>=LAMBDA(x, x*2)(A2)</code> と末尾に値を渡す</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">エラー値の詳細は<a href="https://mashukabu.com/excel-error-value-list/">Excelのエラー値一覧</a>も参考にしてください。エラーを非表示にしたい場合は<a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数</a>が便利です。</p>



<h2 class="wp-block-heading"><span id="toc17">Googleスプレッドシートとの違い</span></h2>



<p class="wp-block-paragraph">GoogleスプレッドシートにもLAMBDA関数があります。構文は同じですが、登録方法に大きな違いがあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>Excel</th><th>Googleスプレッドシート</th></tr></thead><tbody><tr><td>LAMBDA関数の構文</td><td><code>=LAMBDA(引数, 数式)(値)</code></td><td><code>=LAMBDA(引数, 数式)(値)</code></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><tr><td>対応バージョン</td><td>Microsoft 365 / Excel for the web / Excel 2024</td><td>全アカウント</td></tr><tr><td>ヘルパー関数</td><td>MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY, ISOMITTED（7種）</td><td>同じ7種類</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">構文自体は同じなので、数式をそのままコピーして使えます。ただし登録方法が異なるため、ブック間の移行では再登録が必要です。</p>



<p class="wp-block-paragraph">カスタム関数の登録・管理のしやすさではGoogleスプレッドシートが有利です。GUIで登録でき、オートコンプリートにも対応しています。一方、ExcelはVBAとの連携や大規模データの処理速度に強みがあります。</p>



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



<p class="wp-block-paragraph">LAMBDA関数は、繰り返し使う計算ロジックをカスタム関数として定義できる関数です。</p>



<ul class="wp-block-list"><li>構文は <code>=LAMBDA(引数名, 数式本体)(値)</code> で、最後の引数が数式本体</li><li>「名前の管理」に登録すると、SUM関数と同じように呼び出せる</li><li>MAP・REDUCE・BYROW・MAKEARRAY等と組み合わせて配列処理が可能</li><li>引数名にはセル参照や関数名と被らない名前を使う</li><li>対応バージョンはMicrosoft 365、Excel for the web、Excel 2024</li><li>Googleスプレッドシートにも同じ構文があるが、登録方法が異なる</li></ul>



<p class="wp-block-paragraph">まずは <code>=LAMBDA(x, x*2)(5)</code> でLAMBDA関数の動きを確認するところから始めてみてください。「名前の管理」への登録まで進めば、自作関数の便利さを実感できるはずです。</p>



<h3 class="wp-block-heading"><span id="toc19">関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-filter/">FILTER関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-unique/">UNIQUE関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-sequence/">SEQUENCE関数の使い方</a></li><li><a href="https://mashukabu.com/excel-function-howto-use-iferror/">IFERROR関数の使い方</a></li></ul>



<h3 class="wp-block-heading"><span id="toc20">関数一覧</span></h3>



<p class="wp-block-paragraph">Excel関数の一覧は下記の記事で確認できます。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-list-by-function/">Excel関数 機能別一覧</a></li></ul>



<p class="wp-block-paragraph">エラー値が表示される場合は、下記の記事も参考にしてみてください。</p>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-error-value-list/">Excelのエラー値一覧</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-function-howto-use-lambda/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのBYCOL関数の使い方｜各列にLAMBDA適用</title>
		<link>https://mashukabu.com/spreadsheet-bycol-function/</link>
					<comments>https://mashukabu.com/spreadsheet-bycol-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:37:57 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[BYCOL関数]]></category>
		<category><![CDATA[BYROW関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[MAP関数]]></category>
		<category><![CDATA[列ごとの集計]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4905</guid>

					<description><![CDATA[スプレッドシートのBYCOL関数で各列にLAMBDA処理を一括適用する方法を解説。BYROW関数・MAP関数との違いや、列ごとの合計・平均・最大値を一行で取得する実務パターンまで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで「列ごとの合計」や「列ごとの平均」を出したいときに困りますよね。列の数だけSUM関数やAVERAGE関数を並べるのは手間ですし、列が増えるたびに数式をコピーするのも面倒です。</p>



<p class="wp-block-paragraph">BYCOL関数を使えば、すべての列に同じ計算を一括で適用できます。LAMBDA関数と組み合わせて「各列にこの処理をして」と指定するだけです。</p>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-5" checked><label class="toc-title" for="toc-checkbox-5">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">BYCOL関数とは？</a><ol><li><a href="#toc2" tabindex="0">BYCOL関数の基本構文</a></li><li><a href="#toc3" tabindex="0">LAMBDA関数とは？</a></li></ol></li><li><a href="#toc4" tabindex="0">BYCOL関数の基本的な使い方</a><ol><li><a href="#toc5" tabindex="0">サンプルデータ</a></li><li><a href="#toc6" tabindex="0">各列の合計を一括で求める</a></li><li><a href="#toc7" tabindex="0">各列の平均を一括で求める</a></li><li><a href="#toc8" tabindex="0">各列の最大値・最小値を求める</a></li></ol></li><li><a href="#toc9" tabindex="0">BYCOL関数の実務活用パターン</a><ol><li><a href="#toc10" tabindex="0">パターン1: 列ごとにデータの件数をカウントする</a></li><li><a href="#toc11" tabindex="0">パターン2: 列ごとに条件付きカウントする</a></li><li><a href="#toc12" tabindex="0">パターン3: 列ごとにユニークな値の数を数える</a></li><li><a href="#toc13" tabindex="0">パターン4: 列ごとの標準偏差を求める</a></li><li><a href="#toc14" tabindex="0">パターン5: 文字列の列ごとの結合</a></li></ol></li><li><a href="#toc15" tabindex="0">BYROW関数との違い・使い分け</a><ol><li><a href="#toc16" tabindex="0">BYCOL関数が向いている場面</a></li><li><a href="#toc17" tabindex="0">BYROW関数が向いている場面</a></li></ol></li><li><a href="#toc18" tabindex="0">MAP関数との違い・使い分け</a><ol><li><a href="#toc19" tabindex="0">MAP関数の使用例</a></li></ol></li><li><a href="#toc20" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc21" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc22" tabindex="0">まとめ</a><ol><li><a href="#toc23" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">BYCOL関数（読み方: バイコル関数）は、配列やセル範囲の<strong>各列に対してLAMBDA関数を適用する</strong>関数です。結果は横1行に返ります。「by column（列ごとに）」が名前の由来で、列単位で処理を繰り返すイメージですね。</p>



<p class="wp-block-paragraph">たとえば、3行x4列の売上データにBYCOL関数でSUM処理を適用すると、4列それぞれの合計が横1行に並びます。列を追加しても数式を変更する必要がなく、自動で集計範囲が広がりますよ。</p>



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



<ul class="wp-block-list"><li>各列に同じ計算（合計・平均・最大値など）を一括で適用する</li><li>LAMBDA関数で処理内容を自由にカスタマイズできる</li><li>結果を横1行で返すため、集計行として使いやすい</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>BYCOL関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、各列にSUM関数やAVERAGE関数を個別に入力してください。</p></blockquote>



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



<pre class="wp-block-code"><code>=BYCOL(配列, 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>処理対象のセル範囲または配列</td></tr><tr><td>LAMBDA(列, 処理)</td><td>必須</td><td>各列に適用する関数。「列」は各列を受け取る仮引数</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数（上の例では「列」）には好きな名前を付けられます。<code>col</code>や<code>c</code>でもOKです。この仮引数に各列のデータが1列ずつ渡されて、処理が実行されます。</p>



<h3 class="wp-block-heading"><span id="toc3">LAMBDA関数とは？</span></h3>



<p class="wp-block-paragraph">BYCOL関数を理解するには、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<em>2)(5)</code> と書くと、xに5が入って「5</em>2=10」が返ります。BYCOL関数の中では、このLAMBDA関数に各列のデータが自動的に渡される仕組みです。</p>



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



<p class="wp-block-paragraph">ここでは、月別の売上データをBYCOL関数で列ごとに集計する例を紹介します。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>&nbsp;</td><td>4月</td><td>5月</td><td>6月</td></tr><tr><td>2</td><td>東京</td><td>100</td><td>120</td><td>110</td></tr><tr><td>3</td><td>大阪</td><td>80</td><td>90</td><td>85</td></tr><tr><td>4</td><td>名古屋</td><td>60</td><td>70</td><td>65</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc6">各列の合計を一括で求める</span></h3>



<p class="wp-block-paragraph">B2:D4の数値部分に対して、列ごとの合計を求めます。出力先のセル（たとえばB6）に以下の数式を入力して、Enterを押します。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D4, LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph">結果が横1行に展開されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>6</td><td>240</td><td>280</td><td>260</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">4月の合計は240、5月は280、6月は260です。3列分の合計が一度に求まりましたね。</p>



<h3 class="wp-block-heading"><span id="toc7">各列の平均を一括で求める</span></h3>



<p class="wp-block-paragraph">SUM関数の部分をAVERAGE関数に変えるだけで、列ごとの平均が出せます。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D4, LAMBDA(col, AVERAGE(col)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>7</td><td>80</td><td>93.33</td><td>86.67</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の処理部分を入れ替えるだけで、さまざまな集計に対応できるのがBYCOL関数の強みです。</p>



<h3 class="wp-block-heading"><span id="toc8">各列の最大値・最小値を求める</span></h3>



<p class="wp-block-paragraph">MAX関数やMIN関数も同じように使えます。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D4, LAMBDA(col, MAX(col)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>8</td><td>100</td><td>120</td><td>110</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">各月の最大売上が横1行に並びます。どの月が最も好調だったか、一目でわかりますよ。</p>



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



<h3 class="wp-block-heading"><span id="toc10">パターン1: 列ごとにデータの件数をカウントする</span></h3>



<p class="wp-block-paragraph">各列に何件のデータが入っているかをカウントする例です。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D10, LAMBDA(col, COUNTA(col)))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-counta-function/">COUNTA関数</a>を使えば、空白以外のセルの数を列ごとにカウントできます。入力漏れのチェックに活躍するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc11">パターン2: 列ごとに条件付きカウントする</span></h3>



<p class="wp-block-paragraph">条件に合うデータだけを列ごとにカウントすることもできます。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D10, LAMBDA(col, COUNTIF(col, &quot;&gt;&quot;&amp;100)))</code></pre>



<p class="wp-block-paragraph">各列で「100を超えるデータが何件あるか」を一括で求めています。<a href="https://mashukabu.com/spreadsheet-countif-function/">COUNTIF関数</a>を組み合わせれば、閾値を超えた件数の一覧が簡単に作れますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン3: 列ごとにユニークな値の数を数える</span></h3>



<p class="wp-block-paragraph">各列に重複なしで何種類の値があるかを数える例です。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D10, LAMBDA(col, COUNTA(UNIQUE(col))))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-unique-function/">UNIQUE関数</a>で重複を除外してからCOUNTA関数でカウントしています。カテゴリの多様性を列ごとにチェックしたいときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン4: 列ごとの標準偏差を求める</span></h3>



<p class="wp-block-paragraph">統計的な分析にも使えます。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D10, LAMBDA(col, STDEV(col)))</code></pre>



<p class="wp-block-paragraph">各列のばらつき度合いを一括で算出できます。月ごとの売上のばらつきを比較したい場面で活躍しますよ。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン5: 文字列の列ごとの結合</span></h3>



<p class="wp-block-paragraph">数値だけでなく、文字列の処理にも使えます。</p>



<pre class="wp-block-code"><code>=BYCOL(A2:A10, LAMBDA(col, TEXTJOIN(&quot;, &quot;, TRUE, col)))</code></pre>



<p class="wp-block-paragraph">各列のデータをカンマ区切りで1つのセルにまとめます。<a href="https://mashukabu.com/spreadsheet-textjoin-function/">TEXTJOIN関数</a>と組み合わせれば、リスト化がワンステップで完了です。</p>



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



<p class="wp-block-paragraph">BYCOL関数とペアで覚えたいのが、BYROW関数です。名前のとおり、処理の方向が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>BYCOL関数</th><th>BYROW関数</th></tr></thead><tbody><tr><td>処理単位</td><td>列ごと</td><td>行ごと</td></tr><tr><td>結果の方向</td><td>横1行に展開</td><td>縦1列に展開</td></tr><tr><td>典型的な用途</td><td>列ごとの合計・平均</td><td>行ごとの合計・平均</td></tr><tr><td>構文</td><td><code>=BYCOL(配列, LAMBDA(col, ...))</code></td><td><code>=BYROW(配列, LAMBDA(row, ...))</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>月別・カテゴリ別の集計（列方向）</strong> → BYCOL関数</li><li><strong>個人別・行方向の集計（行方向）</strong> → BYROW関数</li></ul>



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



<p class="wp-block-paragraph">BYCOL関数は「列ごとの集計行を作りたい」ときに最適です。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D4, LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph">月別の売上表の最終行に「合計」行を作る場面を思い浮かべてください。各列の合計を1つの数式で出せるので、列が追加されても数式の修正が不要です。</p>



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



<p class="wp-block-paragraph">BYROW関数は「行ごとの集計列を作りたい」ときに使います。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D4, LAMBDA(row, SUM(row)))</code></pre>



<p class="wp-block-paragraph">担当者ごと・商品ごとに行方向の合計を出したい場面で活躍します。結果は縦1列に展開されますよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>BYCOL関数とBYROW関数を同じ表に使えば、行方向と列方向の集計を両方自動化できます。「列の合計はBYCOL、行の合計はBYROW」と覚えておくと迷いません。</p></blockquote>



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



<p class="wp-block-paragraph">BYCOL関数と混同しやすいのがMAP関数です。どちらもLAMBDA関数と組み合わせて使いますが、処理の粒度が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>BYCOL関数</th><th>MAP関数</th></tr></thead><tbody><tr><td>処理単位</td><td>列（複数セルのまとまり）</td><td>セル（1つずつ）</td></tr><tr><td>結果の形</td><td>横1行</td><td>元の配列と同じ形</td></tr><tr><td>向いている処理</td><td>集計（SUM, AVERAGE, MAX等）</td><td>変換・加工（四捨五入、条件分岐等）</td></tr><tr><td>引数のLAMBDA</td><td>列全体を受け取る</td><td>各セルの値を受け取る</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>列ごとにまとめて集計したい</strong> → BYCOL関数</li><li><strong>各セルを個別に変換・加工したい</strong> → MAP関数</li></ul>



<h3 class="wp-block-heading"><span id="toc19">MAP関数の使用例</span></h3>



<p class="wp-block-paragraph">MAP関数は各セルに対して処理を適用します。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, LAMBDA(val, IF(val &gt;= 100, &quot;達成&quot;, &quot;未達&quot;)))</code></pre>



<p class="wp-block-paragraph">この例では、各セルの値が100以上かどうかを判定しています。結果は元の3行x3列と同じ形で返ります。</p>



<p class="wp-block-paragraph">BYCOL関数で同じことをしようとすると「列全体を受け取る」ため、セル単位の変換には向きません。セルごとの加工はMAP関数、列ごとの集計はBYCOL関数と使い分けてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc20">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>BYCOL</td><td>列ごと</td><td>横1行</td><td>列ごとの集計</td></tr><tr><td>BYROW</td><td>行ごと</td><td>縦1列</td><td>行ごとの集計</td></tr><tr><td>MAP</td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td>REDUCE</td><td>配列全体</td><td>1つの値</td><td>全体を1つに集約</td></tr><tr><td>SCAN</td><td>累積</td><td>縦1列</td><td>累積計算の中間結果</td></tr><tr><td>MAKEARRAY</td><td>行×列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">BYCOL関数は「列ごとに集計して横1行にまとめる」という、かなり限定的な用途の関数です。そのぶん使い方が明快で、迷わずに使えるのがメリットですね。</p>



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



<p class="wp-block-paragraph">BYCOL関数は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>「BYCOL」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>BYCOL関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#VALUE!</code></td><td>LAMBDAが1つの値を返さない</td><td>BYCOL関数のLAMBDAは各列に対して1つの値を返す必要があります。配列を返す処理は使えません</td></tr><tr><td><code>#REF!</code></td><td>出力先のセルにデータがある</td><td>結果が横に展開されるため、出力先の右側のセルを空にしてください</td></tr><tr><td><code>#ERROR!</code></td><td>LAMBDAの引数の数が合わない</td><td>LAMBDAの仮引数は1つ（列を受け取る引数）にしてください</td></tr><tr><td>結果が0になる</td><td>文字列の列にSUM関数を使った</td><td>文字列を含む列には、COUNTA関数やTEXTJOIN関数を使ってください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「LAMBDAが1つの値を返さない」エラーです。BYCOL関数は各列に対して1つの値（スカラー値）を返すことを期待しています。SORT関数やFILTER関数のように配列を返す処理はNGです。LAMBDA内に書くと<code>#VALUE!</code>エラーになるので注意してくださいね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>col</code>（column の略）を使うのがおすすめです。BYROW関数では<code>row</code>、MAP関数では<code>val</code>や<code>v</code>を使うと、どの関数を使っているか一目でわかります。</p></blockquote>



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



<p class="wp-block-paragraph">BYCOL関数は、配列の各列にLAMBDA関数で処理を適用し、結果を横1行に返す関数です。列ごとの集計をまとめて自動化できるので、列数が多い表の管理がグッと楽になります。</p>



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



<ul class="wp-block-list"><li>BYCOL関数は<code>=BYCOL(配列, LAMBDA(col, 処理))</code>で、各列に同じ処理を一括適用する</li><li>SUM、AVERAGE、MAX、COUNTAなど、1つの値を返す関数ならなんでもLAMBDAに組み込める</li><li>BYROW関数は行方向の集計、MAP関数はセルごとの変換に使い分ける</li><li>LAMBDAは各列に対して1つの値を返す必要がある（配列を返すとエラー）</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずは<code>=BYCOL(B2:D4, LAMBDA(col, SUM(col)))</code>のシンプルな列合計から試してみてください。一度使い方を覚えれば、AVERAGE、MAX、COUNTAなど、処理部分を入れ替えるだけでさまざまな集計に応用できますよ。</p>



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



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-byrow-function/">スプレッドシートのBYROW関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-filter-function/">スプレッドシートのFILTER関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-unique-function/">スプレッドシートのUNIQUE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-flatten-function/">スプレッドシートのFLATTEN関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-countif-function/">スプレッドシートのCOUNTIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-counta-function/">スプレッドシートのCOUNTA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-textjoin-function/">スプレッドシートのTEXTJOIN関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-bycol-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのBYROW関数の使い方｜各行にLAMBDA適用</title>
		<link>https://mashukabu.com/spreadsheet-byrow-function/</link>
					<comments>https://mashukabu.com/spreadsheet-byrow-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:37:49 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[BYCOL関数]]></category>
		<category><![CDATA[BYROW関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[MAP関数]]></category>
		<category><![CDATA[行ごとの集計]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4903</guid>

					<description><![CDATA[スプレッドシートのBYROW関数で各行にLAMBDA処理を一括適用する方法を解説。BYCOL関数・MAP関数との違いや、行ごとの合計・平均・最大値を一列で取得する実務パターンまで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで「行ごとの合計」や「行ごとの平均」を出したいときに困りますよね。行の数だけSUM関数やAVERAGE関数を並べるのは手間ですし、行が増えるたびに数式をコピーするのも面倒です。</p>



<p class="wp-block-paragraph">BYROW関数を使えば、すべての行に同じ計算を一括で適用できます。LAMBDA関数と組み合わせて「各行にこの処理をして」と指定するだけです。</p>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">BYROW関数とは？</a><ol><li><a href="#toc2" tabindex="0">BYROW関数の基本構文</a></li><li><a href="#toc3" tabindex="0">LAMBDA関数のおさらい</a></li></ol></li><li><a href="#toc4" tabindex="0">BYROW関数の基本的な使い方</a><ol><li><a href="#toc5" tabindex="0">サンプルデータ</a></li><li><a href="#toc6" tabindex="0">各行の合計を一括で求める</a></li><li><a href="#toc7" tabindex="0">各行の平均を一括で求める</a></li><li><a href="#toc8" tabindex="0">各行の最大値・最小値を求める</a></li></ol></li><li><a href="#toc9" tabindex="0">BYROW関数の実務活用パターン</a><ol><li><a href="#toc10" tabindex="0">パターン1: 行ごとにデータの件数をカウントする</a></li><li><a href="#toc11" tabindex="0">パターン2: 行ごとに条件付きカウントする</a></li><li><a href="#toc12" tabindex="0">パターン3: 行ごとにユニークな値の数を数える</a></li><li><a href="#toc13" tabindex="0">パターン4: 行ごとの標準偏差を求める</a></li><li><a href="#toc14" tabindex="0">パターン5: 文字列の行ごとの結合</a></li></ol></li><li><a href="#toc15" tabindex="0">BYCOL関数との違い・使い分け</a><ol><li><a href="#toc16" tabindex="0">BYROW関数が向いている場面</a></li><li><a href="#toc17" tabindex="0">BYCOL関数が向いている場面</a></li></ol></li><li><a href="#toc18" tabindex="0">MAP関数との違い・使い分け</a><ol><li><a href="#toc19" tabindex="0">MAP関数の使用例</a></li></ol></li><li><a href="#toc20" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc21" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc22" tabindex="0">まとめ</a><ol><li><a href="#toc23" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">BYROW関数（読み方: バイロウ関数）は、配列やセル範囲の<strong>各行に対してLAMBDA関数を適用する</strong>関数です。結果は縦1列に返ります。「by row（行ごとに）」が名前の由来で、行単位で処理を繰り返すイメージですね。</p>



<p class="wp-block-paragraph">たとえば、4行x3列の売上データにBYROW関数でSUM処理を適用すると、4行それぞれの合計が縦1列に並びます。行を追加しても数式を変更する必要がなく、自動で集計範囲が広がりますよ。</p>



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



<ul class="wp-block-list"><li>各行に同じ計算（合計・平均・最大値など）を一括で適用する</li><li>LAMBDA関数で処理内容を自由にカスタマイズできる</li><li>結果を縦1列で返すため、集計列として使いやすい</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>BYROW関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、各行にSUM関数やAVERAGE関数を個別に入力してください。</p></blockquote>



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



<pre class="wp-block-code"><code>=BYROW(配列, 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>処理対象のセル範囲または配列</td></tr><tr><td>LAMBDA(行, 処理)</td><td>必須</td><td>各行に適用する関数。「行」は各行を受け取る仮引数</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数（上の例では「行」）には好きな名前を付けられます。<code>row</code>や<code>r</code>でもOKです。この仮引数に各行のデータが1行ずつ渡されて、処理が実行されます。</p>



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



<p class="wp-block-paragraph">BYROW関数を使うには、LAMBDA関数の基本を知っておく必要があります。LAMBDA関数の詳しい仕組みは<a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL関数の記事</a>で解説していますので、ここではポイントだけ押さえましょう。</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<em>2)(5)</code> と書くと、xに5が入って「5</em>2=10」が返ります。BYROW関数の中では、このLAMBDA関数に各行のデータが自動的に渡される仕組みです。</p>



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



<p class="wp-block-paragraph">ここでは、担当者別の売上データをBYROW関数で行ごとに集計する例を紹介します。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>&nbsp;</td><td>4月</td><td>5月</td><td>6月</td></tr><tr><td>2</td><td>東京</td><td>100</td><td>120</td><td>110</td></tr><tr><td>3</td><td>大阪</td><td>80</td><td>90</td><td>85</td></tr><tr><td>4</td><td>名古屋</td><td>60</td><td>70</td><td>65</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc6">各行の合計を一括で求める</span></h3>



<p class="wp-block-paragraph">B2:D4の数値部分に対して、行ごとの合計を求めます。出力先のセル（たとえばE2）に以下の数式を入力して、Enterを押します。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D4, LAMBDA(row, SUM(row)))</code></pre>



<p class="wp-block-paragraph">結果が縦1列に展開されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>E</th></tr></thead><tbody><tr><td>2</td><td>330</td></tr><tr><td>3</td><td>255</td></tr><tr><td>4</td><td>195</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">東京の合計は330、大阪は255、名古屋は195です。3行分の合計が一度に求まりましたね。</p>



<h3 class="wp-block-heading"><span id="toc7">各行の平均を一括で求める</span></h3>



<p class="wp-block-paragraph">SUM関数の部分をAVERAGE関数に変えるだけで、行ごとの平均が出せます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D4, LAMBDA(row, AVERAGE(row)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>E</th></tr></thead><tbody><tr><td>2</td><td>110</td></tr><tr><td>3</td><td>85</td></tr><tr><td>4</td><td>65</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の処理部分を入れ替えるだけで、さまざまな集計に対応できるのがBYROW関数の強みです。</p>



<h3 class="wp-block-heading"><span id="toc8">各行の最大値・最小値を求める</span></h3>



<p class="wp-block-paragraph">MAX関数やMIN関数も同じように使えます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D4, LAMBDA(row, MAX(row)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>E</th></tr></thead><tbody><tr><td>2</td><td>120</td></tr><tr><td>3</td><td>90</td></tr><tr><td>4</td><td>70</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">各担当者の最大売上が縦1列に並びます。どの月が最も好調だったか、担当者ごとに一目でわかりますよ。</p>



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



<h3 class="wp-block-heading"><span id="toc10">パターン1: 行ごとにデータの件数をカウントする</span></h3>



<p class="wp-block-paragraph">各行に何件のデータが入っているかをカウントする例です。</p>



<pre class="wp-block-code"><code>=BYROW(B2:F10, LAMBDA(row, COUNTA(row)))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-counta-function/">COUNTA関数</a>を使えば、空白以外のセルの数を行ごとにカウントできます。入力漏れのチェックに活躍するパターンです。</p>



<h3 class="wp-block-heading"><span id="toc11">パターン2: 行ごとに条件付きカウントする</span></h3>



<p class="wp-block-paragraph">条件に合うデータだけを行ごとにカウントすることもできます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:F10, LAMBDA(row, COUNTIF(row, &quot;&gt;&quot;&amp;100)))</code></pre>



<p class="wp-block-paragraph">各行で「100を超えるデータが何件あるか」を一括で求めています。<a href="https://mashukabu.com/spreadsheet-countif-function/">COUNTIF関数</a>を組み合わせれば、閾値を超えた月の数が担当者ごとに簡単にわかりますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン3: 行ごとにユニークな値の数を数える</span></h3>



<p class="wp-block-paragraph">各行に重複なしで何種類の値があるかを数える例です。</p>



<pre class="wp-block-code"><code>=BYROW(B2:F10, LAMBDA(row, COUNTA(UNIQUE(TRANSPOSE(row)))))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-unique-function/">UNIQUE関数</a>は縦方向に重複を除外するため、行データをTRANSPOSE関数で縦に変換してから処理しています。カテゴリの多様性を行ごとにチェックしたいときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン4: 行ごとの標準偏差を求める</span></h3>



<p class="wp-block-paragraph">統計的な分析にも使えます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:F10, LAMBDA(row, STDEV(row)))</code></pre>



<p class="wp-block-paragraph">各行のばらつき度合いを一括で算出できます。担当者ごとの売上のばらつきを比較したい場面で活躍しますよ。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン5: 文字列の行ごとの結合</span></h3>



<p class="wp-block-paragraph">数値だけでなく、文字列の処理にも使えます。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D10, LAMBDA(row, TEXTJOIN(&quot;, &quot;, TRUE, row)))</code></pre>



<p class="wp-block-paragraph">各行のデータをカンマ区切りで1つのセルにまとめます。<a href="https://mashukabu.com/spreadsheet-textjoin-function/">TEXTJOIN関数</a>と組み合わせれば、リスト化がワンステップで完了です。</p>



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



<p class="wp-block-paragraph">BYROW関数とペアで覚えたいのが、<a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL関数</a>です。名前のとおり、処理の方向が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>BYROW関数</th><th>BYCOL関数</th></tr></thead><tbody><tr><td>処理単位</td><td>行ごと</td><td>列ごと</td></tr><tr><td>結果の方向</td><td>縦1列に展開</td><td>横1行に展開</td></tr><tr><td>典型的な用途</td><td>行ごとの合計・平均</td><td>列ごとの合計・平均</td></tr><tr><td>構文</td><td><code>=BYROW(配列, LAMBDA(row, ...))</code></td><td><code>=BYCOL(配列, LAMBDA(col, ...))</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>担当者別・行方向の集計（行方向）</strong> → BYROW関数</li><li><strong>月別・カテゴリ別の集計（列方向）</strong> → BYCOL関数</li></ul>



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



<p class="wp-block-paragraph">BYROW関数は「行ごとの集計列を作りたい」ときに最適です。</p>



<pre class="wp-block-code"><code>=BYROW(B2:D4, LAMBDA(row, SUM(row)))</code></pre>



<p class="wp-block-paragraph">担当者ごとの売上表の右端に「合計」列を作る場面を思い浮かべてください。各行の合計を1つの数式で出せるので、行が追加されても数式の修正が不要です。</p>



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



<p class="wp-block-paragraph">BYCOL関数は「列ごとの集計行を作りたい」ときに使います。</p>



<pre class="wp-block-code"><code>=BYCOL(B2:D4, LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph">月別の売上表の最終行に「合計」行を作る場面で活躍します。結果は横1行に展開されますよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>BYROW関数とBYCOL関数を同じ表に使えば、行方向と列方向の集計を両方自動化できます。「行の合計はBYROW、列の合計はBYCOL」と覚えておくと迷いません。</p></blockquote>



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



<p class="wp-block-paragraph">BYROW関数と混同しやすいのがMAP関数です。どちらもLAMBDA関数と組み合わせて使いますが、処理の粒度が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>BYROW関数</th><th>MAP関数</th></tr></thead><tbody><tr><td>処理単位</td><td>行（複数セルのまとまり）</td><td>セル（1つずつ）</td></tr><tr><td>結果の形</td><td>縦1列</td><td>元の配列と同じ形</td></tr><tr><td>向いている処理</td><td>集計（SUM, AVERAGE, MAX等）</td><td>変換・加工（四捨五入、条件分岐等）</td></tr><tr><td>引数のLAMBDA</td><td>行全体を受け取る</td><td>各セルの値を受け取る</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>行ごとにまとめて集計したい</strong> → BYROW関数</li><li><strong>各セルを個別に変換・加工したい</strong> → MAP関数</li></ul>



<h3 class="wp-block-heading"><span id="toc19">MAP関数の使用例</span></h3>



<p class="wp-block-paragraph">MAP関数は各セルに対して処理を適用します。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, LAMBDA(val, IF(val &gt;= 100, &quot;達成&quot;, &quot;未達&quot;)))</code></pre>



<p class="wp-block-paragraph">この例では、各セルの値が100以上かどうかを判定しています。結果は元の3行x3列と同じ形で返ります。</p>



<p class="wp-block-paragraph">BYROW関数で同じことをしようとすると「行全体を受け取る」ため、セル単位の変換には向きません。セルごとの加工はMAP関数、行ごとの集計はBYROW関数と使い分けてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc20">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>BYROW</td><td>行ごと</td><td>縦1列</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>MAP</td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td>REDUCE</td><td>配列全体</td><td>1つの値</td><td>全体を1つに集約</td></tr><tr><td>SCAN</td><td>累積</td><td>縦1列</td><td>累積計算の中間結果</td></tr><tr><td>MAKEARRAY</td><td>行x列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">BYROW関数は「行ごとに集計して縦1列にまとめる」という、かなり限定的な用途の関数です。そのぶん使い方が明快で、迷わずに使えるのがメリットですね。</p>



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



<p class="wp-block-paragraph">BYROW関数は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>「BYROW」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>BYROW関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#VALUE!</code></td><td>LAMBDAが1つの値を返さない</td><td>BYROW関数のLAMBDAは各行に対して1つの値を返す必要があります。配列を返す処理は使えません</td></tr><tr><td><code>#REF!</code></td><td>出力先のセルにデータがある</td><td>結果が縦に展開されるため、出力先の下側のセルを空にしてください</td></tr><tr><td><code>#ERROR!</code></td><td>LAMBDAの引数の数が合わない</td><td>LAMBDAの仮引数は1つ（行を受け取る引数）にしてください</td></tr><tr><td>結果が0になる</td><td>文字列の行にSUM関数を使った</td><td>文字列を含む行には、COUNTA関数やTEXTJOIN関数を使ってください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「LAMBDAが1つの値を返さない」エラーです。BYROW関数は各行に対して1つの値（スカラー値）を返すことを期待しています。SORT関数やFILTER関数のように配列を返す処理はNGです。LAMBDAの中に書くと<code>#VALUE!</code>エラーになるので注意してくださいね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>row</code>を使うのがおすすめです。BYCOL関数では<code>col</code>、MAP関数では<code>val</code>や<code>v</code>を使うと、どの関数を使っているか一目でわかります。</p></blockquote>



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



<p class="wp-block-paragraph">BYROW関数は、配列の各行にLAMBDA関数で処理を適用し、結果を縦1列に返す関数です。行ごとの集計をまとめて自動化できるので、行数が多い表の管理がグッと楽になります。</p>



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



<ul class="wp-block-list"><li>BYROW関数は<code>=BYROW(配列, LAMBDA(row, 処理))</code>で、各行に同じ処理を一括適用する</li><li>SUM、AVERAGE、MAX、COUNTAなど、1つの値を返す関数ならなんでもLAMBDAに組み込める</li><li>BYCOL関数は列方向の集計、MAP関数はセルごとの変換に使い分ける</li><li>LAMBDAは各行に対して1つの値を返す必要がある（配列を返すとエラー）</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずは<code>=BYROW(B2:D4, LAMBDA(row, SUM(row)))</code>のシンプルな行合計から試してみてください。一度使い方を覚えれば、AVERAGE、MAX、COUNTAなど、処理部分を入れ替えるだけでさまざまな集計に応用できますよ。</p>



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



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



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-bycol-function/">スプレッドシートのBYCOL関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-filter-function/">スプレッドシートのFILTER関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-unique-function/">スプレッドシートのUNIQUE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-countif-function/">スプレッドシートのCOUNTIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-counta-function/">スプレッドシートのCOUNTA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-textjoin-function/">スプレッドシートのTEXTJOIN関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-byrow-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのMAKEARRAY関数の使い方｜計算で配列を自在に生成</title>
		<link>https://mashukabu.com/spreadsheet-makearray-function/</link>
					<comments>https://mashukabu.com/spreadsheet-makearray-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:32:45 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[LAMBDA系関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[MAKEARRAY関数]]></category>
		<category><![CDATA[SEQUENCE関数]]></category>
		<category><![CDATA[配列生成]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4813</guid>

					<description><![CDATA[スプレッドシートのMAKEARRAY関数で行×列の計算配列を生成する方法を解説。九九表や距離行列の作成例、SEQUENCE関数との違い、LAMBDA系関数の使い分けまでわかりやすく紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「行と列の位置に応じて、計算した値で配列を作りたい」。スプレッドシートで表を作っていると、こんな場面に出くわすことがあります。</p>



<p class="wp-block-paragraph">九九表やランダムデータの生成、距離行列の作成など、「行×列の計算結果で埋めた表」を手作業で作るのはかなりの手間です。</p>



<p class="wp-block-paragraph">MAKEARRAY関数を使えば、行数と列数を指定して、各セルの値をLAMBDA関数で自由に計算できます。この記事では、基本から実務活用パターン、SEQUENCE関数との違いまでわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-7" checked><label class="toc-title" for="toc-checkbox-7">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MAKEARRAY関数とは？</a><ol><li><a href="#toc2" tabindex="0">MAKEARRAY関数の基本構文</a></li><li><a href="#toc3" tabindex="0">LAMBDA関数のおさらい</a></li></ol></li><li><a href="#toc4" tabindex="0">MAKEARRAY関数の基本的な使い方</a><ol><li><a href="#toc5" tabindex="0">九九表を作る</a></li><li><a href="#toc6" tabindex="0">固定値で埋めた配列を作る</a></li><li><a href="#toc7" tabindex="0">行番号・列番号を使った計算で配列を作る</a></li></ol></li><li><a href="#toc8" tabindex="0">MAKEARRAY関数の実務活用パターン</a><ol><li><a href="#toc9" tabindex="0">パターン1: 対角線だけ1の単位行列を作る</a></li><li><a href="#toc10" tabindex="0">パターン2: ランダムなテストデータを生成する</a></li><li><a href="#toc11" tabindex="0">パターン3: 上三角行列を作る</a></li><li><a href="#toc12" tabindex="0">パターン4: セルの値を参照して動的なサイズの配列を作る</a></li><li><a href="#toc13" tabindex="0">パターン5: 連番に名前付きのラベルを付ける</a></li></ol></li><li><a href="#toc14" tabindex="0">SEQUENCE関数との違い・使い分け</a><ol><li><a href="#toc15" tabindex="0">SEQUENCE関数で十分なケース</a></li><li><a href="#toc16" tabindex="0">MAKEARRAY関数でないとできないケース</a></li></ol></li><li><a href="#toc17" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc18" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc19" tabindex="0">まとめ</a><ol><li><a href="#toc20" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">MAKEARRAY関数（読み方: メイクアレイ関数）は、指定した行数×列数の<strong>配列をLAMBDA関数の計算結果で生成する</strong>関数です。「make array（配列を作る）」が名前の由来で、ゼロから計算で配列を作り出すイメージですね。</p>



<p class="wp-block-paragraph">たとえば、3行×3列の九九表を作りたいとき、MAKEARRAY関数で「行番号×列番号」という計算を指定するだけで、9マスすべてが自動で埋まります。セルをひとつずつ入力する必要はありません。</p>



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



<ul class="wp-block-list"><li>行数×列数を指定して、任意のサイズの配列を一発で生成する</li><li>各セルの値をLAMBDA関数の計算で自由に決められる</li><li>LAMBDAには行番号と列番号が渡されるため、位置に応じた計算が可能</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>MAKEARRAY関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、SEQUENCE関数やINDEX関数を組み合わせてください。</p></blockquote>



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



<pre class="wp-block-code"><code>=MAKEARRAY(行数, 列数, 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>生成する配列の行数（1以上の整数）</td></tr><tr><td>列数</td><td>必須</td><td>生成する配列の列数（1以上の整数）</td></tr><tr><td>LAMBDA(行, 列, 処理)</td><td>必須</td><td>各セルに適用する関数。「行」は行番号、「列」は列番号を受け取る仮引数</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数（上の例では「行」「列」）には好きな名前を付けられます。<code>r</code>と<code>c</code>や<code>row</code>と<code>col</code>でもOKです。この仮引数に行番号（1から始まる）と列番号（1から始まる）が渡されて、処理が実行されます。</p>



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



<p class="wp-block-paragraph">MAKEARRAY関数を理解するには、LAMBDA関数の基本を知っておく必要があります。LAMBDA関数については<a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL関数の記事</a>で詳しく解説していますので、ここではポイントだけおさらいします。</p>



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



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



<p class="wp-block-paragraph">たとえば <code>=LAMBDA(x, y, x<em>y)(3, 4)</code> と書くと、xに3、yに4が入って「3</em>4=12」が返ります。MAKEARRAY関数の中では、このLAMBDA関数に行番号と列番号が自動的に渡される仕組みです。</p>



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



<p class="wp-block-paragraph">ここでは、MAKEARRAY関数でさまざまな配列を生成する基本パターンを紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">九九表を作る</span></h3>



<p class="wp-block-paragraph">MAKEARRAY関数のもっともわかりやすい例が九九表です。任意のセル（たとえばA1）に以下の数式を入力します。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))</code></pre>



<p class="wp-block-paragraph">結果が9行×9列に展開されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td></tr><tr><td>2</td><td>2</td><td>4</td><td>6</td><td>8</td><td>10</td><td>12</td><td>14</td><td>16</td><td>18</td></tr><tr><td>3</td><td>3</td><td>6</td><td>9</td><td>12</td><td>15</td><td>18</td><td>21</td><td>24</td><td>27</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1行目×1列目=1、2行目×3列目=6、9行目×9列目=81。行番号と列番号をかけ算しているだけですが、たった1つの数式で九九表が完成しますよ。</p>



<h3 class="wp-block-heading"><span id="toc6">固定値で埋めた配列を作る</span></h3>



<p class="wp-block-paragraph">すべてのセルを同じ値で埋めた配列を作ることもできます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(3, 4, LAMBDA(r, c, 0))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>0</td><td>0</td><td>0</td><td>0</td></tr><tr><td>3</td><td>0</td><td>0</td><td>0</td><td>0</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3行×4列のゼロ埋め配列が生成されます。LAMBDAの処理部分で<code>r</code>や<code>c</code>を使わずに固定値を返しているだけですね。テンプレートの雛形を作りたいときに便利です。</p>



<h3 class="wp-block-heading"><span id="toc7">行番号・列番号を使った計算で配列を作る</span></h3>



<p class="wp-block-paragraph">行番号と列番号を組み合わせれば、位置に応じた計算結果で配列を埋められます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(3, 3, LAMBDA(r, c, r + c))</code></pre>



<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>2</td><td>3</td><td>4</td></tr><tr><td>2</td><td>3</td><td>4</td><td>5</td></tr><tr><td>3</td><td>4</td><td>5</td><td>6</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">1行1列目は1+1=2、2行3列目は2+3=5です。足し算・引き算・べき乗など、自由に計算式を組み立てられるのがMAKEARRAY関数の強みですね。</p>



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



<h3 class="wp-block-heading"><span id="toc9">パターン1: 対角線だけ1の単位行列を作る</span></h3>



<p class="wp-block-paragraph">数値分析で使う単位行列（対角成分が1、それ以外が0）をワンステップで作れます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r=c, 1, 0)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td></tr><tr><td>2</td><td>0</td><td>1</td><td>0</td><td>0</td></tr><tr><td>3</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>4</td><td>0</td><td>0</td><td>0</td><td>1</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">行番号と列番号が同じなら1、違えば0を返しています。<a href="https://mashukabu.com/spreadsheet-if-function/">IF関数</a>と組み合わせれば、条件に応じた値を配置できますよ。</p>



<h3 class="wp-block-heading"><span id="toc10">パターン2: ランダムなテストデータを生成する</span></h3>



<p class="wp-block-paragraph">動作確認用のダミーデータを一括で作りたいときに便利です。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(5, 3, LAMBDA(r, c, RANDBETWEEN(1, 100)))</code></pre>



<p class="wp-block-paragraph">5行×3列に、1から100までのランダムな整数が入ります。シートを再計算するたびに値が変わるので、固定したい場合は結果をコピーして「値のみ貼り付け」してください。</p>



<h3 class="wp-block-heading"><span id="toc11">パターン3: 上三角行列を作る</span></h3>



<p class="wp-block-paragraph">行番号が列番号以下の部分だけ値を入れ、残りを空白にする上三角行列です。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(4, 4, LAMBDA(r, c, IF(r&lt;=c, r*c, &quot;&quot;)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>2</td><td>&nbsp;</td><td>4</td><td>6</td><td>8</td></tr><tr><td>3</td><td>&nbsp;</td><td>&nbsp;</td><td>9</td><td>12</td></tr><tr><td>4</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>16</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">行番号が列番号以下のセルだけ計算結果を入れ、それ以外は空文字を返しています。マトリクス表の作成に応用できるパターンですよ。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン4: セルの値を参照して動的なサイズの配列を作る</span></h3>



<p class="wp-block-paragraph">行数や列数をセル参照にすれば、配列のサイズを動的に変えられます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(A1, B1, LAMBDA(r, c, r*c))</code></pre>



<p class="wp-block-paragraph">A1に5、B1に3と入力すると、5行×3列の九九表が生成されます。A1やB1の値を変えるだけで配列のサイズが自動で変わるため、可変サイズのテンプレートを作りたいときに重宝します。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン5: 連番に名前付きのラベルを付ける</span></h3>



<p class="wp-block-paragraph">MAKEARRAY関数の中で文字列を返すこともできます。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(5, 1, LAMBDA(r, c, &quot;項目&quot;&amp;r))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th></tr></thead><tbody><tr><td>1</td><td>項目1</td></tr><tr><td>2</td><td>項目2</td></tr><tr><td>3</td><td>項目3</td></tr><tr><td>4</td><td>項目4</td></tr><tr><td>5</td><td>項目5</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「項目1」「項目2」&#8230;と連番付きのラベルが自動生成されます。列方向に展開したい場合は行数と列数を入れ替えてください。</p>



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



<p class="wp-block-paragraph">MAKEARRAY関数と混同しやすいのが<a href="https://mashukabu.com/spreadsheet-sequence-function/">SEQUENCE関数</a>です。どちらも「配列を生成する」関数ですが、生成できる配列の自由度が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>MAKEARRAY関数</th><th>SEQUENCE関数</th></tr></thead><tbody><tr><td>生成方法</td><td>LAMBDAで各セルを自由に計算</td><td>開始値・ステップの等差数列</td></tr><tr><td>引数</td><td>行数, 列数, LAMBDA</td><td>行数, 列数, 開始値, ステップ</td></tr><tr><td>柔軟性</td><td>各セルで異なる計算が可能</td><td>規則的な連番のみ</td></tr><tr><td>LAMBDA</td><td>必須</td><td>不要</td></tr><tr><td>典型的な用途</td><td>九九表・単位行列・条件付き配列</td><td>連番・日付連番・通し番号</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>規則的な連番を作りたい</strong> → SEQUENCE関数（シンプルで高速）</li><li><strong>位置に応じた計算で配列を作りたい</strong> → MAKEARRAY関数（柔軟性が高い）</li></ul>



<h3 class="wp-block-heading"><span id="toc15">SEQUENCE関数で十分なケース</span></h3>



<p class="wp-block-paragraph">1, 2, 3&#8230;のような等差数列や、日付の連番ならSEQUENCE関数のほうが適しています。</p>



<pre class="wp-block-code"><code>=SEQUENCE(5, 1, 1, 1)</code></pre>



<p class="wp-block-paragraph">この数式は1から始まる5行の連番を返します。MAKEARRAY関数でも <code>=MAKEARRAY(5, 1, LAMBDA(r, c, r))</code> と書けば同じ結果になりますが、SEQUENCE関数のほうが簡潔ですよね。</p>



<h3 class="wp-block-heading"><span id="toc16">MAKEARRAY関数でないとできないケース</span></h3>



<p class="wp-block-paragraph">九九表のように「行番号×列番号」で値を決めたい場合や、条件に応じてセルの値を変えたい場合は、MAKEARRAY関数の出番です。</p>



<pre class="wp-block-code"><code>=MAKEARRAY(5, 5, LAMBDA(r, c, IF(r=c, &quot;X&quot;, &quot;-&quot;)))</code></pre>



<p class="wp-block-paragraph">この数式は対角線に「X」、それ以外に「-」を入れた5×5のマトリクスを返します。SEQUENCE関数にはこうした条件分岐の機能がないため、MAKEARRAY関数が必要になります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「連番ならSEQUENCE、計算ならMAKEARRAY」と覚えておくと迷いません。迷ったときは、LAMBDAの中で行番号・列番号を使った計算が必要かどうかで判断してください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc17">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-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>MAP</td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td>REDUCE</td><td>配列全体</td><td>1つの値</td><td>全体を1つに集約</td></tr><tr><td>SCAN</td><td>累積</td><td>縦1列</td><td>累積計算の中間結果</td></tr><tr><td>MAKEARRAY</td><td>行×列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">MAKEARRAY関数は他の5関数と性質が異なります。BYCOL・BYROW・MAP・REDUCE・SCANが「既存のデータに処理を適用する」のに対し、MAKEARRAY関数は「ゼロからデータを生成する」関数です。そのぶん用途が明確で、「配列を計算で作りたい」ときはMAKEARRAY一択ですよ。</p>



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



<p class="wp-block-paragraph">MAKEARRAY関数は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>「MAKEARRAY」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>MAKEARRAY関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#VALUE!</code></td><td>LAMBDAの引数が2つでない</td><td>MAKEARRAY関数のLAMBDAは行番号と列番号の2つの仮引数が必要です</td></tr><tr><td><code>#ERROR!</code></td><td>行数または列数が0以下</td><td>行数・列数には1以上の整数を指定してください</td></tr><tr><td><code>#REF!</code></td><td>出力先のセルにデータがある</td><td>結果が展開されるため、出力先の周囲のセルを空にしてください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「LAMBDAの引数が2つでない」エラーです。BYCOL関数やBYROW関数のLAMBDAは仮引数が1つですが、MAKEARRAY関数では行番号と列番号の2つが必要です。<code>LAMBDA(r, c, r*c)</code> のように必ず2つの仮引数を指定してくださいね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>r</code>（row の略）と<code>c</code>（column の略）を使うのがおすすめです。BYCOL関数では<code>col</code>、BYROW関数では<code>row</code>を使うと、どの関数を使っているか一目でわかります。</p></blockquote>



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



<p class="wp-block-paragraph">MAKEARRAY関数は、指定した行数×列数の配列をLAMBDA関数の計算結果で生成する関数です。位置に応じた自由な計算ができるので、九九表・単位行列・条件付きマトリクスなどを一発で作成できます。</p>



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



<ul class="wp-block-list"><li>MAKEARRAY関数は<code>=MAKEARRAY(行数, 列数, LAMBDA(r, c, 処理))</code>で、計算結果の配列を生成する</li><li>LAMBDAの仮引数には行番号と列番号が渡されるため、位置に応じた計算が可能</li><li>連番の生成ならSEQUENCE関数のほうがシンプル。計算が必要な配列にはMAKEARRAY関数を使う</li><li>LAMBDAの仮引数は必ず2つ（行番号と列番号）を指定する</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずは<code>=MAKEARRAY(9, 9, LAMBDA(r, c, r*c))</code>の九九表から試してみてください。一度使い方を覚えれば、IF関数やRANDBETWEEN関数と組み合わせて、さまざまな配列を自在に生成できますよ。</p>



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



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



<ul class="wp-block-list"><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-sequence-function/">スプレッドシートのSEQUENCE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-if-function/">スプレッドシートのIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-unique-function/">スプレッドシートのUNIQUE関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-makearray-function/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-8" checked><label class="toc-title" for="toc-checkbox-8">目次</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-9" checked><label class="toc-title" for="toc-checkbox-9">目次</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>
		<item>
		<title>スプレッドシートのMAP関数の使い方｜各値にLAMBDA適用</title>
		<link>https://mashukabu.com/spreadsheet-map-function/</link>
					<comments>https://mashukabu.com/spreadsheet-map-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:28:38 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[ARRAYFORMULA関数]]></category>
		<category><![CDATA[BYCOL関数]]></category>
		<category><![CDATA[BYROW関数]]></category>
		<category><![CDATA[LAMBDA関数]]></category>
		<category><![CDATA[MAP関数]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4719</guid>

					<description><![CDATA[スプレッドシートのMAP関数で各セルにLAMBDA処理を一括適用する方法を解説。ARRAYFORMULA関数との違いや、BYCOL・BYROW関数との使い分け、複数配列の同時処理パターンまでわかりやすく紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで「全セルに同じ加工をしたい」場面、ありませんか？ 数値の四捨五入、条件に応じたラベル付け、文字列の変換など、1つずつ数式をコピーしていくのは手間がかかります。</p>



<p class="wp-block-paragraph">MAP関数を使えば、配列のすべてのセルにLAMBDA関数で処理を一括適用できます。しかも複数の配列を同時に処理できるのが、MAP関数ならではの強みです。</p>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">MAP関数とは？</a><ol><li><a href="#toc2" tabindex="0">MAP関数の基本構文</a></li><li><a href="#toc3" tabindex="0">LAMBDA関数のおさらい</a></li></ol></li><li><a href="#toc4" tabindex="0">MAP関数の基本的な使い方</a><ol><li><a href="#toc5" tabindex="0">サンプルデータ</a></li><li><a href="#toc6" tabindex="0">各セルを四捨五入する</a></li><li><a href="#toc7" tabindex="0">条件分岐を一括適用する</a></li><li><a href="#toc8" tabindex="0">複数の配列を同時に処理する</a></li></ol></li><li><a href="#toc9" tabindex="0">MAP関数の実務活用パターン</a><ol><li><a href="#toc10" tabindex="0">パターン1: 空白セルにデフォルト値を埋める</a></li><li><a href="#toc11" tabindex="0">パターン2: 数値にカンマ区切りの書式を適用する</a></li><li><a href="#toc12" tabindex="0">パターン3: 税込価格を一括計算する</a></li><li><a href="#toc13" tabindex="0">パターン4: 2つの列を結合してフルネームを作る</a></li><li><a href="#toc14" tabindex="0">パターン5: エラー値を安全に処理する</a></li><li><a href="#toc15" tabindex="0">パターン6: 日付・テキストの一括整形</a></li><li><a href="#toc16" tabindex="0">パターン7: MAP関数とBYCOL・BYROWの二段階活用</a></li></ol></li><li><a href="#toc17" tabindex="0">ARRAYFORMULA関数との違い・使い分け</a><ol><li><a href="#toc18" tabindex="0">ARRAYFORMULA関数で書ける例</a></li><li><a href="#toc19" tabindex="0">MAP関数でないとできない例</a></li></ol></li><li><a href="#toc20" tabindex="0">BYCOL・BYROW関数との違い・使い分け</a></li><li><a href="#toc21" tabindex="0">LAMBDA系関数の全体像</a></li><li><a href="#toc22" tabindex="0">MAP関数のネストと多段変換</a><ol><li><a href="#toc23" tabindex="0">MAP関数を入れ子にする</a></li><li><a href="#toc24" tabindex="0">複数配列を使った条件付きマスキング</a></li></ol></li><li><a href="#toc25" tabindex="0">よくあるエラーと対処法</a></li><li><a href="#toc26" tabindex="0">まとめ</a><ol><li><a href="#toc27" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">MAP関数（読み方: マップ関数）は、配列やセル範囲の<strong>各セルに対してLAMBDA関数を適用する</strong>関数です。結果は元の配列と同じサイズで返ります。「map（対応づける）」が名前の由来で、各値を別の値に変換するイメージですね。</p>



<p class="wp-block-paragraph">たとえば、3行x3列の売上データにMAP関数でROUND処理を適用すると、9つのセルすべてが四捨五入された値に置き換わります。元の表と同じ形のまま一括で変換できるのがポイントです。</p>



<p class="wp-block-paragraph">MAP関数にできることをまとめると、次のとおりです。</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>MAP関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、ARRAYFORMULA関数や配列数式で代用してください。</p></blockquote>



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



<pre class="wp-block-code"><code>=MAP(配列, 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>処理対象のセル範囲または配列（複数指定可）</td></tr><tr><td>LAMBDA(値, 処理)</td><td>必須</td><td>各セルに適用する関数。「値」は各セルを受け取る仮引数</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">LAMBDA関数の仮引数（上の例では「値」）には好きな名前を付けられます。<code>val</code>や<code>v</code>でもOKです。この仮引数に各セルのデータが1つずつ渡されて、処理が実行されます。</p>



<p class="wp-block-paragraph"><strong>複数配列を渡す場合</strong>の構文はこうなります。</p>



<pre class="wp-block-code"><code>=MAP(配列1, 配列2, LAMBDA(値1, 値2, 処理))</code></pre>



<p class="wp-block-paragraph">配列1と配列2の同じ位置にあるセルが、それぞれ値1・値2としてLAMBDA関数に渡されます。配列は3つ以上でも指定可能です。ただし、すべての配列は同じサイズ（行数×列数）にしてください。</p>



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



<p class="wp-block-paragraph">MAP関数を理解するには、LAMBDA関数の基本を知っておく必要があります。詳しくは<a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL関数の記事</a>で解説していますが、ここでもかんたんにおさらいしておきますね。</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<em>2)(5)</code> と書くと、xに5が入って「5</em>2=10」が返ります。MAP関数の中では、このLAMBDA関数に各セルの値が自動的に渡される仕組みです。</p>



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



<p class="wp-block-paragraph">ここでは、売上データをMAP関数で一括変換する例を紹介します。</p>



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



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



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>&nbsp;</td><td>4月</td><td>5月</td><td>6月</td></tr><tr><td>2</td><td>東京</td><td>98.7</td><td>120.3</td><td>110.5</td></tr><tr><td>3</td><td>大阪</td><td>82.4</td><td>91.8</td><td>85.2</td></tr><tr><td>4</td><td>名古屋</td><td>63.1</td><td>74.6</td><td>68.9</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc6">各セルを四捨五入する</span></h3>



<p class="wp-block-paragraph">B2:D4の数値を一括で四捨五入します。出力先のセル（たとえばF2）に以下の数式を入力して、Enterを押します。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, LAMBDA(val, ROUND(val, 0)))</code></pre>



<p class="wp-block-paragraph">結果が元の3行x3列と同じ形で返ります。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>F</th><th>G</th><th>H</th></tr></thead><tbody><tr><td>2</td><td>99</td><td>120</td><td>111</td></tr><tr><td>3</td><td>82</td><td>92</td><td>85</td></tr><tr><td>4</td><td>63</td><td>75</td><td>69</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">すべてのセルがROUND関数で四捨五入されました。9つのセルに個別にROUND関数を入力する手間が省けますね。</p>



<h3 class="wp-block-heading"><span id="toc7">条件分岐を一括適用する</span></h3>



<p class="wp-block-paragraph">各セルの値を条件で判定し、ラベルを付ける例です。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, LAMBDA(val, IF(val &gt;= 100, &quot;達成&quot;, &quot;未達&quot;)))</code></pre>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>F</th><th>G</th><th>H</th></tr></thead><tbody><tr><td>2</td><td>未達</td><td>達成</td><td>達成</td></tr><tr><td>3</td><td>未達</td><td>未達</td><td>未達</td></tr><tr><td>4</td><td>未達</td><td>未達</td><td>未達</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-if-function/">IF関数</a>と組み合わせれば、全セルに条件分岐を一括適用できます。目標達成の判定表が一発で完成です。</p>



<h3 class="wp-block-heading"><span id="toc8">複数の配列を同時に処理する</span></h3>



<p class="wp-block-paragraph">MAP関数ならではの機能が、複数の配列を同時に処理できることです。</p>



<p class="wp-block-paragraph">たとえば、売上データ（B2:D4）と目標データ（F2:H4）の2つの表がある場合を考えてみましょう。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, F2:H4, LAMBDA(actual, target, actual - target))</code></pre>



<p class="wp-block-paragraph">各セルの「売上 &#8211; 目標」の差額が一括で計算されます。2つの表の同じ位置にあるセルが、LAMBDAの引数に1つずつ渡される仕組みです。</p>



<p class="wp-block-paragraph">この使い方はBYCOL関数やBYROW関数にはありません。「複数の表を突き合わせてセルごとに処理したい」場面では、MAP関数の出番ですよ。</p>



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



<h3 class="wp-block-heading"><span id="toc10">パターン1: 空白セルにデフォルト値を埋める</span></h3>



<p class="wp-block-paragraph">データに空白セルが混じっているとき、一括で「0」や「-」に置き換えます。</p>



<pre class="wp-block-code"><code>=MAP(B2:D10, LAMBDA(val, IF(val=&quot;&quot;, 0, val)))</code></pre>



<p class="wp-block-paragraph">空白だったセルが0に置き換わり、それ以外はそのまま残ります。集計前のデータクリーニングに便利なパターンです。</p>



<h3 class="wp-block-heading"><span id="toc11">パターン2: 数値にカンマ区切りの書式を適用する</span></h3>



<p class="wp-block-paragraph">大きな数値をカンマ区切りの文字列に変換します。</p>



<pre class="wp-block-code"><code>=MAP(B2:D10, LAMBDA(val, TEXT(val, &quot;#,##0&quot;)))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-text-function/">TEXT関数</a>と組み合わせれば、表示形式の一括変換がワンステップで完了します。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン3: 税込価格を一括計算する</span></h3>



<p class="wp-block-paragraph">税抜き価格の表から、税込価格の表を一発で作ります。</p>



<pre class="wp-block-code"><code>=MAP(B2:D10, LAMBDA(val, ROUND(val * 1.1, 0)))</code></pre>



<p class="wp-block-paragraph">消費税10%を掛けてROUND関数で整数に丸めています。価格表の更新に使えるパターンです。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン4: 2つの列を結合してフルネームを作る</span></h3>



<p class="wp-block-paragraph">姓（A列）と名（B列）を結合して、フルネームを作る例です。</p>



<pre class="wp-block-code"><code>=MAP(A2:A10, B2:B10, LAMBDA(sei, mei, sei &amp; &quot; &quot; &amp; mei))</code></pre>



<p class="wp-block-paragraph">複数配列の同時処理を使えば、姓と名を1つの列にまとめる作業が一括で片付きます。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン5: エラー値を安全に処理する</span></h3>



<p class="wp-block-paragraph">計算結果にエラーが含まれる可能性がある場合、エラーを別の値に置き換えます。</p>



<pre class="wp-block-code"><code>=MAP(B2:D10, LAMBDA(val, IFERROR(val / A2, &quot;N/A&quot;)))</code></pre>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-iferror-function/">IFERROR関数</a>を組み込めば、エラーが出たセルだけを「N/A」に置き換えられます。他のセルは正常に計算されますよ。</p>



<h3 class="wp-block-heading"><span id="toc15">パターン6: 日付・テキストの一括整形</span></h3>



<p class="wp-block-paragraph">MAP関数はテキスト整形や日付変換にも活躍します。</p>



<p class="wp-block-paragraph"><strong>日付フォーマットの一括変換</strong></p>



<p class="wp-block-paragraph">A列に「2026/5/1」形式の日付が入っているとき、「2026年5月1日」形式に一括変換するには次のようにします。</p>



<pre class="wp-block-code"><code>=MAP(A2:A20, LAMBDA(d, TEXT(d, &quot;yyyy年m月d日&quot;)))</code></pre>



<p class="wp-block-paragraph">TEXT関数と組み合わせることで、日付の書式変換が全セル一括で完了します。元のデータを変えずに「表示用の別列」を作りたいときに便利なパターンです。</p>



<p class="wp-block-paragraph"><strong>単位変換の一括処理</strong></p>



<p class="wp-block-paragraph">メートル単位の距離データをキロメートルに変換する例です。</p>



<pre class="wp-block-code"><code>=MAP(B2:B20, LAMBDA(m, m / 1000 &amp; &quot; km&quot;))</code></pre>



<p class="wp-block-paragraph">数値変換と文字列の結合を組み合わせることで、「5000 m → 5 km」のような単位付きの表示列を一括生成できます。</p>



<p class="wp-block-paragraph"><strong>部分文字列の抽出・整形</strong></p>



<p class="wp-block-paragraph">社員番号「EMP-00123」のように「EMP-」プレフィックスが不要な場合、数字部分だけを取り出せます。</p>



<pre class="wp-block-code"><code>=MAP(A2:A20, LAMBDA(code, VALUE(MID(code, 5, 10))))</code></pre>



<p class="wp-block-paragraph">MID関数と組み合わせて、特定の位置から文字列を切り出す処理を全セルに一括適用できます。</p>



<h3 class="wp-block-heading"><span id="toc16">パターン7: MAP関数とBYCOL・BYROWの二段階活用</span></h3>



<p class="wp-block-paragraph">MAP関数とBYCOL・BYROW関数は、「変換してから集計する」という二段階処理で組み合わせることができます。</p>



<p class="wp-block-paragraph">たとえば、売上データ（B2:D4）に欠損値（空白）が混じっている場合、まずMAPで空白を0に補完してから、BYCOLで列ごとに合計を出す流れです。</p>



<pre class="wp-block-code"><code>=BYCOL(MAP(B2:D4, LAMBDA(val, IF(val=&quot;&quot;, 0, val))), LAMBDA(col, SUM(col)))</code></pre>



<p class="wp-block-paragraph">処理の流れはこうなります。</p>



<ol class="wp-block-list"><li>MAP関数が各セルを走査し、空白を0に置き換えた新しい配列を作る</li><li>BYCOL関数がその配列を列ごとに処理してSUMを計算する</li></ol>



<p class="wp-block-paragraph">MAP単体では「セルを変換するが集計はしない」、BYCOLは「変換前の配列しか受け取れない」という制約をそれぞれ持っています。二段階にすることで、「欠損補完してから集計」「テキスト整形してから行ごとに結合」といった複雑な処理をスマートに実装できます。</p>



<p class="wp-block-paragraph">同様に、BYROWと組み合わせれば「各行の最大値だけを使って行ごとに合計」なども実現できます。</p>



<pre class="wp-block-code"><code>=BYROW(MAP(B2:D10, LAMBDA(val, IF(val &gt; 100, val, 0))), LAMBDA(row, SUM(row)))</code></pre>



<p class="wp-block-paragraph">この例では、100超のセルだけを残して（他は0に置き換え）、行ごとにSUMを取っています。</p>



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



<p class="wp-block-paragraph">MAP関数と似た機能を持つのが<a href="https://mashukabu.com/spreadsheet-arrayformula-function/">ARRAYFORMULA関数</a>です。どちらも「範囲に処理を一括適用する」関数ですが、得意分野が異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>MAP関数</th><th>ARRAYFORMULA関数</th></tr></thead><tbody><tr><td>処理の定義方法</td><td>LAMBDA関数で自由に記述</td><td>既存関数をそのまま使用</td></tr><tr><td>複数配列の同時処理</td><td>対応（配列をいくつでも渡せる）</td><td>非対応（1つの数式で処理）</td></tr><tr><td>複雑な条件分岐</td><td>得意（LAMBDA内で自由に組める）</td><td>シンプルな条件のみ</td></tr><tr><td>学習コスト</td><td>やや高い（LAMBDA関数の理解が必要）</td><td>低い（既存関数を囲むだけ）</td></tr><tr><td>パフォーマンス</td><td>大量データではやや遅い</td><td>高速</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>既存関数をそのまま範囲に適用したい</strong> → ARRAYFORMULA関数</li><li><strong>LAMBDAで複雑な処理を定義したい・複数配列を同時に処理したい</strong> → MAP関数</li></ul>



<h3 class="wp-block-heading"><span id="toc18">ARRAYFORMULA関数で書ける例</span></h3>



<p class="wp-block-paragraph">たとえば「各セルに2を掛ける」程度のシンプルな処理なら、ARRAYFORMULA関数のほうが簡潔です。</p>



<pre class="wp-block-code"><code>=ARRAYFORMULA(B2:D4 * 2)</code></pre>



<p class="wp-block-paragraph">MAP関数で書くと <code>=MAP(B2:D4, LAMBDA(val, val * 2))</code> になります。結果は同じですが、ARRAYFORMULA関数のほうが短くて読みやすいですよね。</p>



<h3 class="wp-block-heading"><span id="toc19">MAP関数でないとできない例</span></h3>



<p class="wp-block-paragraph">一方、複数の配列を突き合わせて処理するケースはMAP関数の出番です。</p>



<pre class="wp-block-code"><code>=MAP(B2:D4, F2:H4, LAMBDA(actual, target, IF(actual &gt;= target, &quot;OK&quot;, &quot;NG&quot;)))</code></pre>



<p class="wp-block-paragraph">「売上」と「目標」の2つの表を突き合わせて、達成・未達を判定しています。ARRAYFORMULA関数でも <code>=ARRAYFORMULA(IF(B2:D4>=F2:H4,"OK","NG"))</code> と書けますが、LAMBDAで複雑な処理を組み立てられるのはMAP関数だけです。</p>



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



<p class="wp-block-paragraph">LAMBDA系関数には<a href="https://mashukabu.com/spreadsheet-bycol-function/">BYCOL関数</a>と<a href="https://mashukabu.com/spreadsheet-byrow-function/">BYROW関数</a>もありますが、処理の粒度がまったく異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>MAP関数</th><th>BYCOL関数</th><th>BYROW関数</th></tr></thead><tbody><tr><td>処理単位</td><td>セル（1つずつ）</td><td>列（まとめて）</td><td>行（まとめて）</td></tr><tr><td>結果の形</td><td>元の配列と同じサイズ</td><td>横1行</td><td>縦1列</td></tr><tr><td>向いている処理</td><td>変換・加工</td><td>列ごとの集計</td><td>行ごとの集計</td></tr><tr><td>LAMBDAに渡される値</td><td>各セルの値</td><td>各列全体（配列）</td><td>各行全体（配列）</td></tr><tr><td>複数配列の同時処理</td><td>対応</td><td>非対応</td><td>非対応</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>各セルを個別に変換したい</strong> → MAP関数</li><li><strong>列ごとにまとめて集計したい</strong> → BYCOL関数</li><li><strong>行ごとにまとめて集計したい</strong> → BYROW関数</li></ul>



<p class="wp-block-paragraph">MAP関数は「セルごと」、BYCOL・BYROWは「まとめて集計」。この違いを押さえておけば迷いませんよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「合計や平均を出したい」ならBYCOL・BYROW関数、「各セルの値を変換・加工したい」ならMAP関数です。「集計か変換か」で選んでくださいね。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc21">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>MAP</td><td>セルごと</td><td>元と同じ形</td><td>セルごとの変換・加工</td></tr><tr><td>BYCOL</td><td>列ごと</td><td>横1行</td><td>列ごとの集計</td></tr><tr><td>BYROW</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>縦1列</td><td>累積計算の中間結果</td></tr><tr><td>MAKEARRAY</td><td>行×列</td><td>新しい配列</td><td>計算で配列を生成</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">MAP関数は「各セルを個別に変換する」という、最も直感的な使い方の関数です。配列処理のファーストチョイスとして覚えておくと便利ですよ。</p>



<h2 class="wp-block-heading"><span id="toc22">MAP関数のネストと多段変換</span></h2>



<h3 class="wp-block-heading"><span id="toc23">MAP関数を入れ子にする</span></h3>



<p class="wp-block-paragraph">MAP関数はLAMBDA関数の処理部分に別のMAP関数を入れ子にできます。ただし、同一の配列に対して複数の変換を順番にかけたい場合は、MAP関数を重ねるより<strong>LAMBDAの処理内に複数の関数を組み合わせる</strong>ほうがシンプルです。</p>



<p class="wp-block-paragraph">たとえば「空白を0に置き換えてから四捨五入する」処理を1つのMAPで書くとこうなります。</p>



<pre class="wp-block-code"><code>=MAP(B2:D10, LAMBDA(val, ROUND(IF(val=&quot;&quot;, 0, val), 0)))</code></pre>



<p class="wp-block-paragraph">LAMBDA関数の中にIF関数とROUND関数の両方を入れることで、2つの変換を1回のMAPで完結させています。「変換1してから変換2する」という流れは、LAMBDA内でネストして書くのが基本です。</p>



<h3 class="wp-block-heading"><span id="toc24">複数配列を使った条件付きマスキング</span></h3>



<p class="wp-block-paragraph">複数配列の同時処理を使うと、「フラグ列に応じてデータを出し分ける」処理が簡潔に書けます。</p>



<p class="wp-block-paragraph">A列にフラグ（1 or 0）、B列に数値データがあるとき、フラグが1のセルだけ値を表示し、0のセルは空白にするには次のように書きます。</p>



<pre class="wp-block-code"><code>=MAP(A2:A20, B2:B20, LAMBDA(flag, val, IF(flag=1, val, &quot;&quot;)))</code></pre>



<p class="wp-block-paragraph">2つの配列の同じ行のデータがLAMBDAに渡されるため、「条件列」と「データ列」を突き合わせた処理がワンステップで実現できます。フラグによるデータのマスキングや、条件に応じた値の切り替えに役立つパターンです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>MAP関数の処理部分（LAMBDA内）は自由度が高く、IF・IFERROR・TEXT・ROUNDなどほぼすべての関数を組み合わせられます。「セルごとに何かしたい」と思ったら、まずMAP + LAMBDAで書けないか考えてみると、スマートな数式になることが多いですよ。</p></blockquote>



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



<p class="wp-block-paragraph">MAP関数は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>「MAP」のスペルを確認してください</td></tr><tr><td><code>#NAME?</code></td><td>Excelで使用しようとした</td><td>MAP関数はGoogleスプレッドシート専用です</td></tr><tr><td><code>#NAME?</code></td><td>LAMBDA関数の仮引数名が不正</td><td>仮引数名にセル参照（A1等）やスペースは使えません</td></tr><tr><td><code>#VALUE!</code></td><td>複数配列のサイズが不一致</td><td>MAP関数に複数の配列を渡す場合、すべて同じ行数×列数にしてください</td></tr><tr><td><code>#REF!</code></td><td>出力先のセルにデータがある</td><td>結果が元の配列と同じサイズで展開されるため、出力先に十分な空きスペースを確保してください</td></tr><tr><td><code>#ERROR!</code></td><td>LAMBDAの引数の数が合わない</td><td>配列が1つならLAMBDAの仮引数も1つ、配列が2つなら仮引数も2つにしてください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に多いのが「複数配列のサイズ不一致」エラーです。MAP関数に複数の配列を渡すとき、たとえばB2:D4（3行3列）とF2:H5（4行3列）のように行数が違うと<code>#VALUE!</code>になります。範囲を揃えてから試してくださいね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>LAMBDA関数の仮引数名で迷ったら、<code>val</code>や<code>v</code>を使うのがおすすめです。複数配列を渡すときは、<code>a</code>と<code>b</code>や、意味のある名前（<code>actual</code>と<code>target</code>など）を使うと読みやすくなります。</p></blockquote>



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



<p class="wp-block-paragraph">MAP関数は、配列の各セルにLAMBDA関数で処理を適用し、結果を元の配列と同じサイズで返す関数です。セルごとの変換・加工を一括で自動化できるので、データクリーニングや表の加工がグッと楽になります。</p>



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



<ul class="wp-block-list"><li>MAP関数は<code>=MAP(配列, LAMBDA(val, 処理))</code>で、各セルに同じ処理を一括適用する</li><li>複数の配列を渡して、対応するセル同士を処理できるのがMAP関数ならではの強み</li><li>シンプルな計算はARRAYFORMULA関数、LAMBDA処理や複数配列はMAP関数と使い分ける</li><li>BYCOL・BYROW関数は集計向き、MAP関数は変換・加工向き</li><li>Googleスプレッドシート独自の関数で、Excelでは使えない</li></ul>



<p class="wp-block-paragraph">まずは<code>=MAP(B2:D4, LAMBDA(val, ROUND(val, 0)))</code>のシンプルな四捨五入から試してみてください。一度使い方を覚えれば、IF関数やTEXT関数など、処理部分を入れ替えるだけでさまざまな変換に応用できますよ。</p>



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



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



<ul class="wp-block-list"><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><li><a href="https://mashukabu.com/spreadsheet-if-function/">スプレッドシートのIF関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-iferror-function/">スプレッドシートのIFERROR関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-text-function/">スプレッドシートのTEXT関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-map-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
