LWP | Excel数式を「スピル世代」で捉える
図解1|関数の新旧より、計算モデルの世代を見る

動的配列以降の数式体系を広く表すなら「モダンExcel数式」。世代の特徴を一言で伝えるなら、本稿では「スピル世代」と呼びます。
解説1|「モダンExcel数式」から、呼びやすい「スピル世代」へ
Excelの数式を学んでいると、動的配列、スピル、LET、LAMBDA、高階関数と、異なる種類の言葉が次々に出てきます。これらをまとめる「モダンExcel数式」という総称は、広がった数式の世界を表すのに向いています。ただ、日々の説明では少し長く、どこが以前と変わったのかも名前だけでは伝わりません。
そこで本稿では、数式計算の世代に注目する呼び方として「スピル世代」を提案します。数式全体を指すなら「スピル世代の数式」、短く「スピル世代数式」。関数を話題にするなら「スピル世代の関数」と呼びます。複数の結果が一つの入力セルから周囲へ広がる、あの特徴的な姿を、世代の目印にする考え方です。
重要なのは、新しく加わった関数だけを集めないことです。FILTERやUNIQUE、LET、LAMBDA、REDUCEなどを「スピル世代の新関数」と呼べます。一方、IFやLENは以前からありますが、動的配列の計算モデルの下で複数の値をまとめて処理できます。こちらは「スピル世代で使う既存関数」です。合計など一つの値を返す数式も、この世代の数式に含めます。
世代という言葉で捉える範囲
ここでいう世代は、Excel製品全体を二分するバージョン名ではありません。従来のセル単位の計算やCSE配列数式を中心にした使い方に対し、動的配列を前提に数式を組み立てられる計算モデルを指します。動的配列以降の新機能も、同時に一斉追加されたわけではありません。
現在のExcelにも通常のセル数式と、互換性のためのCSE配列数式が残っています。「旧世代から全て置き換わった」と考えるより、従来の資産も使いながら、数式の組み立て方が広がったと捉えると自然です。この地図の中で、関数名の新旧と数式の働きを分けて見ていきましょう。
出典
計算モデルの変化はMicrosoftの動的配列数式と従来のCSE配列数式、Range.FormulaとFormula2を参照。
図解2|配列という値の構造と、スピルという動作

スピルは、関数の名前ではなく数式の結果に現れる動作です。既存関数でも複数結果を返せます。
解説2|IFやLENも、スピル世代の数式で使える
配列は、複数の値が並んだ「値のまとまり」です。スピルは、数式が返した複数の結果を隣接セルへ展開する動作です。配列は値の構造、スピルはワークシート上での配置と分けると、用語を混同しにくくなります。
たとえばA1:A3に1、2、3、B1:B3にA、AA、AAAを順に入力します。動的配列対応のExcelで、空いているC1とE1に次の式をそれぞれ入力し、Enterで確定します。
=IF(A1:A3>1,"大","小")=LEN(B1:B3)IFは三つの数をそれぞれ判定し、C1:C3へ「小」「大」「大」を返します。LENは三つの文字列の長さを求め、E1:E3へ1、2、3を返します。新関数へ書き換えなくても、既存関数を使う数式が複数結果を返せるわけです。これは動的配列の評価の働きであり、全関数の本体が一斉に作り直されたという意味ではありません。
一方、空いているG1に次の式を入力すると、結果は6の一つです。
=SUM(A1:A3)SUMは範囲の値を合計する役割を持っています。「複数セルを渡した」「スピル世代のExcelで使った」だけで、必ず複数結果になるわけではありません。
#と@は、参照と評価の手掛かり
C1#は、C1を起点とするスピル範囲全体への参照です。この例ならROWS(C1#)は3になります。結果の件数が変わっても、#を使うと展開された範囲を参照できます。
@は暗黙の交差を明示し、複数値から一つの値を選びます。範囲なら数式と同じ行または列の値、値の配列なら左上の値が対象です。たとえばO2の「=LEN(@B1:B3)」はB2のAAを使い、2を返します。合計を求める動作とは異なります。
スピルには展開先の空きが必要です。入力済みセルが妨げれば#SPILL!となり、スピル数式はExcelテーブルの外へ置きます。動的配列への対応と各関数の利用可否も、使用するExcelで確認してください。
出典
図解3|世代・役割・関数型の性質を分ける

一つの関数は、複数の分類に属せます。分類軸を一列に並べず、知りたいことに合わせて使い分けます。
解説3|「動的配列関数」「高階関数」「Helper」は同じ分類ではない
「スピル世代」とまとめたあとも、詳しい説明には複数の分類軸が必要です。世代はいつの計算モデルを前提にするか、役割は何をするか、関数型の性質は関数をどう扱うかを表します。これらを同じ分類表の枝として並べると、関数の位置が決まらなくなります。
見る軸 |
答えたいこと |
主な例 |
|---|---|---|
世代・計算モデル |
値をどう評価し展開するか |
CSE配列数式、動的配列数式 |
関数の役割 |
何を作り、どう加工するか |
配列生成、抽出・変換、集約 |
関数型の性質 |
関数を定義・受渡しするか |
LAMBDA、高階関数 |
役割で見ると、SEQUENCEやRANDARRAYは配列生成、FILTERやSORT、UNIQUEは抽出・変換、SUMやREDUCEは集約の例です。HSTACKやVSTACKは結合、TAKEやDROPは切り出し、TOCOLやTOROWは形の変更というように、目的から関数を探せます。
高階関数とは、関数を引数に取る、または関数を返す関数です。MAP、REDUCE、SCAN、BYROW、BYCOL、MAKEARRAYは、処理内容を表すLAMBDAを受け取ります。MAKEARRAYなら「配列を生成する」という役割と、「関数を受け取る」という性質を同時に持ちます。一つのカテゴリだけに押し込める必要はありません。
LAMBDA Helper Functionsは機能グループ
Microsoftが紹介したLAMBDA Helper Functionsは、MAP、REDUCE、SCAN、MAKEARRAY、BYROW、BYCOL、ISOMITTEDのグループです。このうちISOMITTEDは、LAMBDAへ渡す引数が省略されたかをTRUEまたはFALSEで返す補助関数です。関数を引数に取る高階関数とは、働きが異なります。
したがって「LAMBDA Helperだから高階関数」とは限りません。動的配列やスピルは計算モデルと動作、高階関数はプログラミング上の性質、HelperはMicrosoftの機能グループとして読み分けます。Microsoftの関数一覧にある「論理関数」などのカテゴリも、ここでの世代区分とは別の軸です。
出典
MicrosoftのLAMBDA Helper Functionsの発表、ISOMITTED、論理関数一覧を参照。
図解4|同じ計算でも、返すものが違う

スピルしない結果を返す式も、スピル世代の数式です。REDUCEとSCANは、見た目より「何を返すか」で比べます。
解説4|LET・LAMBDAから、REDUCEとSCANへ
LETは、数式の途中の値に名前を付けて、その式の中で再利用するための関数です。LAMBDAは、引数を受け取り結果を返す処理を、Excelの数式で定義する仕組みです。名前の管理と組み合わせれば、その処理を自作関数として繰り返し使えます。LETによる値の命名と、LAMBDAによる関数定義は、役割を分けて理解します。
関数を定義すると、「何を計算するか」を別の関数へ渡せます。MAPは要素ごと、BYROW・BYCOLは行・列ごとにLAMBDAを適用します。REDUCEとSCANでは、前の計算結果を次の処理へ渡しながら配列をたどります。この引き継ぐ値をaccumulator(累積値)と呼びます。
同じ入力と処理で比べる
A1:A3の1、2、3を、初期値0から足していきます。次の二つの式を、十分に空いている別々のセルに入力してください。
=REDUCE(0,A1:A3,LAMBDA(a_sum,a_value,a_sum+a_value))=SCAN(0,A1:A3,LAMBDA(a_sum,a_value,a_sum+a_value))a_sumは前回までの累積値、a_valueは今回取り出した値です。計算は0+1=1、1+2=3、3+3=6と進みます。REDUCEは最後の累積値6を返します。SCANは各段階の累積値を残し、1、3、6を縦に返します。SCANの結果には、処理前の初期値0は含みません。
REDUCEもLAMBDAを受け取る高階関数であり、スピル世代の新関数です。この加算例が一つの値を返すからといって、「スピルしないので対象外」とはなりません。またREDUCEの結果は累積値の作り方に左右されるため、単一値専用の関数と決めつけるのも避けます。
「スピル関数」へ縮めると失われるもの
スピルした見た目だけで仲間を決めると、LETやLAMBDAによる数式の構造化、REDUCEによる集約が地図から抜けてしまいます。「スピル世代」という呼び方なら、世代の特徴を残しながら、返す値の形が異なる関数も同じ体系の中で扱えます。個別の説明では、入力・処理・戻り値を確かめることが大切です。
出典
図解5|総称は世代、詳細は正確な機能名へ

全体を「スピル世代」と呼び、学んでいる場所を下位の用語で示す。呼びやすさと説明の正確さを両立させる用語地図です。
解説5|「スピル世代」で全体を呼び、必要なところから学ぶ
学習の入口では、動的配列とスピルの関係を押さえます。次にFILTERやUNIQUEなどで配列を取り出し、SORTで並べ替え、HSTACK・VSTACKなどで形を整えます。何を受け取り、どの形の結果を返すかが見えると、関数の暗記から数式の組み立てへ進めます。
その先では、LETで途中結果に名前を付け、LAMBDAで処理を関数として定義します。MAPなどへ関数を渡せることが分かると、高階関数という言葉も、具体的な働きと結び付きます。FILTERを使うだけなら、ここまでの全項目を先に学ぶ必要はありません。図の順序は、必要な知識を積み重ねるための目安です。
関数を返す関数から、応用技法へ
LAMBDAは、別の関数を返す処理にもつながります。条件を受け取り、その条件を使う関数を作るものは、関数ファクトリーと呼べます。そこで関数が外側の値を参照して保持する考え方がClosure(クロージャー)です。値や計算を引数なしの関数で包み、必要なときに呼び出して取り出す考え方がThunk(サンク)です。再帰は、関数が自分自身を呼び出す処理です。
これらはExcelの関数名ではなく、数式の設計を説明するプログラミングの用語や技法です。入れ子のLAMBDAや値の受渡しを理解してから進むと、どの問題を解くための技法なのかを見失いにくくなります。
本稿の呼び方を決める
広い総称として「モダンExcel数式」という整理を残し、世代を伝える日常の呼び方には「スピル世代」を採用します。数式の話なら「スピル世代数式」、関数の話なら「スピル世代関数」と短く言うこともできます。文章では「スピル世代の数式」「スピル世代の関数」と書くと、意味がさらに自然に伝わります。
その内訳を話すときは、「スピル世代の新関数」と「スピル世代で使う既存関数」を分けます。これならIFやLENも、一つの値を返す集約式も含めて捉えられます。詳細を説明するときは、動的配列数式、配列生成、高階関数、LAMBDA Helper Functionsなど、対象に合う正確な言葉へ戻ります。
「スピル世代」は本稿の説明用の呼称です。目立つスピルを世代の目印にしながら、一つ一つの関数については役割と戻り値を確かめる。この使い分けが、呼びやすく、学習にも使える用語地図になります。
利用について
Copyright © 2026 LWP 山中 一弘
本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。
