Excelのラムダ関数:完全ガイドと実践例

最終更新: 月16 2026
  • LAMBDA関数を使用すると、プログラミングやVBAを使わずに、数式のみでExcelにカスタム関数を作成できます。
  • BYROW、BYCOL、MAP、SCAN、REDUCE、MAKEARRAYなどの関連関数は、LAMBDA関数を適用して行列を走査および変換します。
  • セル内で最初にラムダ式をテストし、その後名前マネージャに保存することで、デバッグと再利用が容易になります。
  • LAMBDAと新しい動的行列関数は、高度な計算を簡素化し、これまでマクロで解決されていた多くの処理を置き換えます。

Excel の LAMBDA

Excelのラムダ関数は、Microsoftスプレッドシートにおける数式の扱い方を根本的に変革しました。VBAや従来のプログラミング言語を一切使わずに、Excelの数式言語だけで独自のカスタム関数を作成できます。まるで、プログラムに独自のネイティブ関数を組み込むことができるかのようです。

さらに、LAMBDA に関連する多くの関数が登場しました。例えば、BYROW、BYCOL、MAP、SCAN、REDUCE、MAKEARRAYなどがあり、これらは範囲や行列をより柔軟かつ強力に扱うように設計されています。これらの関数は、大まかに言えば、データを反復処理し、LAMBDA で定義された変換を適用する小さなループのように動作し、スプレッドシート上で直接高度な分析を行うための幅広い可能性を切り開きます。

Excelのラムダ関数とは何ですか?また、どのような用途に使用されますか?

ラムダ関数は、 Excelの数式のみを使用してカスタム関数を定義できるツールです。VBAでプログラミングしたりマクロに頼ったりする代わりに、複雑な計算を独自のパラメータと明確で簡潔な最終結果を持つ、再利用可能な単一の関数にカプセル化できます。

実際には、 LAMBDA関数はあらゆる数式を、何度でも再利用できる関数に変換します。その最大の利点は、Excelの計算エンジンとシームレスに統合され、標準関数、参照、定義名、動的配列と組み合わせることができる点です。

セル内で直接使用する場合の基本的な構文は次のとおりです。

=LAMBDA(parameter1; parameter2; …; parameterN; calculation)(value1; value2; …; valueN)

この構造において、parameter1、parameter2、…、parameterNは関数内の変数に付ける名前であり、calculationはそれらのパラメータを使用して結果を生成する式です。最後に、2番目の括弧内には、関数実行時にこれらのパラメータが取る実際の値を渡します。

Excel の名前マネージャーを使用して永続的なラムダ関数を作成する場合、関数はそこで定義しますが、まだ呼び出していないため、構文が若干変わります。その場合の形式は次のようになります。

=LAMBDA(var1; var2; …; varN; 計算)

後で、名前マネージャで指定した名前を使ってその関数を呼び出すことができます。SUM、AVERAGE、またはその他の標準関数を呼び出すのと同じように、名前と引数を入力するだけです。

Lambda関数の作成とテストにおけるベストプラクティス

Lambda関数を使い始める際には、期待どおりに動作し、複雑なエラーのデバッグに時間を浪費しないように、いくつかのガイドラインに従うことが重要です。最も実践的な方法の1つは、セル内でLambda関数を直接作成してテストすることです。

通常の手順としては、まずラムダ式の定義と呼び出しを同じ式の中に記述し、結果が期待どおりかどうかをすぐに確認します。こうすることで、名前付き関数として保存する前に、構文エラーや論理エラーを検出できます。

例えば、非常に典型的なテスト構造は次のようになります。

=LAMBDA(); 計算)(test_values)

数値に1を加えるといった非常に単純なことを確認するには、次の方法を使用できます。

=LAMBDA(数値; 数値 + 1)(1)

この場合、関数は値2を返します。これは非常に単純な例ですが、仕組みを説明するのに役立ちます。まず、パラメータと計算式を定義し、次に、対応する引数を渡してその関数を呼び出します。

#CALC!エラーを回避するための重要な推奨事項は、ラムダ関数が必ず結果を返すようにすることです。これは、必要に応じて単一の値または配列を生成する式を最後に明確に記述することで実現できます。テスト中に #CALC! エラーが表示された場合は、数式が実際に Excel が表示できる結果を生成しているかどうかを確認してください。

セル内でラムダ関数をテストして正しく動作することを確認したら、そのロジックを名前マネージャに移動して、シートまたはワークブック全体で再利用可能なカスタム関数に変換するのが良いでしょう。

ラムダと新しい行列関数との関係

LAMBDA を中心に、 BYROW、BYCOL、MAP、SCAN、REDUCE、MAKEARRAY (後者はバージョンによっては ARCHIVOMAKEARRAY と表記される)など、一連の高度な関数が登場しており、これらは LAMBDA を利用して範囲への変換や行列の完成を行います。

  スマートフォンソフトウェアに関する高度なヒント

基本的な考え方としては、これらの関数はデータの範囲(行、列、または要素ごと)を反復処理し、各要素または要素のグループに対して、定義したラムダ関数を実行します。つまり、ループのように動作しますが、Excelの数式言語に統合されています。

これにより、従来は補助列、中間テーブル、あるいはマクロを必要としていた操作を、単一の配列数式で直接実行できるようになります。この数式は、範囲全体を一度に展開して結果を返します。

LAMBDAに関連する関数の中でも、REDUCE、MAP、SCAN、BYCOL、BYROW、MAKEARRAYは特に注目に値し、それぞれ行の走査、列ごとの変換の適用、結果の累積、ゼロから計算された行列の作成など、特定の目的を持っています。これらの関数に共通しているのは、内部の「エンジン」としてLAMBDAを使用し、行列を走査する際に値やアキュムレータをLAMBDAに渡す点です。

BYROW関数:行を反復処理し、結果を行ごとに返します。

BYROW関数は、指定した範囲の各行にラムダ関数を適用し、処理された各行に対応する値を含む配列を返します。数式を縦方向にコピーすることなく、行ごとに小計や統計情報を効率的に計算できる優れた方法です。

一般的な構文は次のとおりです。

=BYROW(行列; LAMBDA(行; 式))

最初の引数は、反復処理を行う配列または範囲(例:B2:D7)で、2番目の引数は、その範囲内の各行を1つずつ引数として受け取るラムダ関数です。ラムダ関数は、その行に関連付けたい値(合計、平均、論理チェックなど)を返します。

B2:D7の範囲にデータテーブルがあり、各行の小計を取得したいとします。セルE2に次のようなコードを入力できます。

=BYROW(B2:D7; LAMBDA(row; SUM(row)))

結果として、行列B2:D7の各行に対応する値を持つ出力ベクトルが得られます。各値は、その行の要素の合計を表します。このように、SUM関数を行ごとに記述する必要はありません。BYROW関数が自動的に処理し、結果を出力します。

BYCOL関数:列ごとにラムダ式を適用する

BYROW 関数と非常によく似たBYCOL関数は、配列を行ではなく列ごとに反復処理するように設計されています。この関数は、範囲内の各列にラムダ関数を適用し、各要素が列に対応する結果の配列を返します。

その典型的な構文は次のとおりです。

=BYCOL(配列; LAMBDA(列; 式))

この場合、LAMBDA関数が受け取るパラメータは、各ステップで処理される行列の列全体です。BYROW関数と同様に、この関数もベクトルを返しますが、こちらは列ごとの合計値や指標を扱うように設計されています。

前の例に引き続き、セルB2:D7の各列の平均を計算したい場合は、セルB8に次のような数式を入力できます。

=BYCOL(B2:D7; LAMBDA(column; AVERAGE(column)))

結果として、B2:D7と同じ列数の行列が生成され、各位置にはその列の平均値が格納されます。このようにすれば、数式をドラッグアンドドロップしたり、相対参照を気にしたりすることなく、すべての平均値を一度に取得できます。

MAKEARRAY関数(MAKEARRAYFILE):計算済み配列を作成する

MAKEARRAY関数(ARCHIVOMAKEARRAYと表記される場合もあります)を使用すると、行数と列数を指定し、ラムダ関数を使用して各要素を計算することで、まったく新しい配列を生成できます。既存の範囲から開始するのではなく、配列をゼロから構築します。

一般的な構文は次のとおりです。

=MAKEARRAY(行; 列; LAMBDA(行; 列; 式))

`rows`引数は出力行列の行数を指定し、`columns`は列数を定義します。また、LAMBDA関数は各反復処理で計算される行と列のインデックスをパラメータとして受け取ります。これらの情報を用いることで、事実上あらゆる数値パターンやテキストパターンを構築できます。

非常に分かりやすい例として、各要素が自身の位置を示す行列を作成する方法があります。どのセルにも、次のようなコードを記述できます。

=MAKEARRAYFILE(3; 2; LAMBDA(row; col; -(row & col)))

結果として、 3行2列の行列が生成されます。各値は、入力した計算式(この場合は、行と列の連結に適用される負の符号)に従って変換された行と列の組み合わせ(例えば、11、12、21、22、31、32)を表します。

MAKEARRAY のもう 1 つの興味深い使い方は、要素の数を制御しながらベクトルを配列に変換することです。たとえば、垂直方向の範囲の最初の 6 つの値を持つ配列を作成したいとします。まず、MAKEARRAYFILE を使用して位置の配列を作成し、k 個の最小の位置値を取得し、最後に INDEX を使用して元の範囲から実際の要素を取得できます。

複数の関数を組み合わせた数式の例としては、次のような構造が考えられます。

  iPhoneにClaudeを統合し、Androidでも使用する方法

=LET(arrPos; MAKEARRAYFILE(3; 2; LAMBDA(row; col; -(row & col))); arrPosF; MATCH(arrPos; LeastK(arrPos; SEQUENCE(6))); INDEX(G8:G13; arrPosF))

ここでは、LET 関数を使用して中間名(arrPos、arrPosF) を定義し、ARCHIVOMAKEARRAY (3×2) を使用して位置の配列を構築し、SMALLEST 関数と SEQUENCE 関数を使用して最小の 6 つの位置を選択し、最後に INDEX 関数を使用して G8:G13 の範囲から対応する値を返します。これは、マクロを使用せずに複雑な変換を実行するために、LAMBDA 関数と動的配列関数を組み合わせる方法を示す強力な例です。

MAP関数:要素ごとの変換

MAP関数は、1つまたは複数の配列を同時に反復処理し、各出力要素が対応する入力要素にラムダ関数を適用して計算された新しい配列を返すために使用されます。これは、関数型プログラミングにおける古典的な「map」関数に相当します。

基本的な構文は次のとおりです。

=MAP(行列1; ラムダ数またはそれ以上の行列)

最もシンプルな形式では、単一の配列と、その配列から各値を受け取るラムダ関数を受け取ります。このラムダ関数は値を変換し、出力配列の一部となる新しいバージョンを返します。この新しいバージョンは、元の配列と同じ次元を維持します。

例えば、セル範囲A21:A26を反復処理し、偶数の場合は元の数値をそのまま残し、奇数の場合はハイフンを挿入したい場合は、次のようなコードを使用できます。

=MAP($A$21:$A$26; LAMBDA(param1; IF(ES.PAR(param1); param1; «-«)))

この場合、MAPはA21:A26の各要素を分析します。LAMBDAはIS.EVENを使用して数値が偶数かどうかを確認します。偶数であればその数値を返し、そうでなければハイフンを返します。結果として得られるのは、元の範囲と同じサイズの配列ですが、各要素に変換処理が適用されています。

この方法は、条件付きロジック、テキスト変換、値の正規化、またはその他の単純な操作を適用したい場合に非常に便利で、補助列や繰り返し数式を回避できます。

SCAN機能:累積結果と中間結果

SCAN関数は、配列の各値にラムダ関数を適用し、累積処理の中間値をすべて示す出力配列を生成することで、配列を検査するために使用されます。REDUCE関数と非常によく似ていますが、最終結果のみを返すのではなく、各ステップを保持します。

一般的な構文は次のとおりです。

=SCAN(; 配列; LAMBDA(アキュムレータ; 値))

最初の引数は省略可能で、アキュムレータの初期値です(例えば、加算の場合は0)。2番目の引数は、反復処理を行う配列または範囲です。最後に、ラムダ関数は2つのパラメータを受け取ります。1つはアキュムレータ(その時点までの部分的な結果)、もう1つは処理中の配列の現在の値です。

SCANは各ステップでLAMBDA値を評価し、アキュムレータを更新し、結果の値を用いて出力行列に新しい要素を生成します。このようにして、累積値のシーケンス、すなわち段階的な変換が得られます。

典型的な例としては、一連の値に対する累積合計(累計)を計算し、そこから相対累積度数も求める場合が挙げられます。A31:A36にデータがあり、絶対累積合計を求めたい場合を考えてみましょう。

=SCAN(0; A31:A36; LAMBDA(accum; param1; accum + param1))

この数式はA31:A36の範囲を順に処理し、各値を前の値に加算していきます。結果として得られる配列は、元の範囲と同じ数の要素を持ちますが、各位置にはその時点までの累積合計値が表示されます。

その累積合計から、各累積合計を全体の合計で割ることで、累積百分率頻度を簡単に計算できます。たとえば、まずSUMを使用して合計を定義し、次にSCANを再度適用することができます。

=LET(合計; SUM(A31:A36); SCAN(0; A31:A36; LAMBDA(accum; param1; (accum + param1)))/total)

この場合、LETは範囲A31:A36の合計をtotalに割り当てます。次に、SCANは累積値のシーケンスを生成し、それをtotalで割ることによって、各ステップの相対累積頻度を単一の行列式で取得します。

REDUCE関数:単一の累積値への削減

REDUCE関数も、各要素にラムダ関数を適用することで配列を反復処理しますが、SCANとは異なり、ここでは累積処理の最終結果のみを取得します。つまり、SCANと同じタイプの反復処理を実行しますが、アキュムレータの最後の値のみを返します。

その構文は次のとおりです。

=REDUCE(; 配列; LAMBDA(アキュムレータ; 値))

SCANと同様に、initial_valueはアキュムレータの開始点を設定し、matrixは処理対象の範囲であり、LAMBDAは現在のアキュムレータと、その時点で読み取られている値をパラメータとして受け取ります。

非常に典型的な使用例としては、最終結果のみに関心がある累積和や累積演算を計算する場合が挙げられます。たとえば、REDUCE を使用して A1:A6 を合計するには、次のように記述できます。

=REDUCE(0; A1:A6; LAMBDA(accum; param1; accum + param1))

ここでは、REDUCE関数はA1からA6までを順に処理し、各ステップで現在のセルの値(param1)を加算して累積値を更新します。最後に、合計値という単一の値を返します。概念的にはSUM関数と似ていますが、REDUCE関数では単純な合計だけでなく、より複雑な累積ロジックを定義できます。

  Databricks を使用した AI エージェントの実装: 完全な実践ガイド

REDUCEの強みは、各ステップで前の結果を基に処理を進め、プロセスが完了するまで演算を継続できる点にあります。これにより、従来マクロのループ処理で行っていたような高度なカスタム計算を実装することが可能になります。

LAMBDAとネームマネージャーを使用してカスタム関数を作成する

LAMBDAの最も強力な機能の一つは、 Excelの「名前管理」機能を使って、あらゆる数式をユーザー定義関数に変換できることです。これにより、関数に独自の名前を付け、プログラム内の他のネイティブ関数と同様に使用できるようになります。

一般的なワークフローは次のとおりです。まず、定義と引数例を含む呼び出しの両方をセルに記述して、LAMBDA関数をテストします。正しく動作し、期待どおりの結果が返されることを確認したら、LAMBDA定義に対応する部分(最後の呼び出しを除く)をコピーして、名前マネージャに貼り付けます。

名前マネージャーで新しい名前(例:MyVATFunction、MyDiscount、MyWeightedAverageなど)を作成し、「参照先」フィールドに以下を入力します。

=LAMBDA(var1; var2; …; varN; 計算)

その時点から、ワークブックのどのセルでも、組み込み関数であるかのように関数名を記述して関数を呼び出すことができ、定義した順序と同じ順序でパラメータ値を渡すことができます。

これには2つの明確な利点があります。まず、スプレッドシートの可読性が向上します(長い数式ではなく、分かりやすい名前の関数が表示されます)。次に、ロジックが1か所に集約されます。後で計算式を変更したい場合は、名前マネージャーで定義を変更するだけで、それを使用しているすべての数式が自動的に更新されます。

実務上の側面とその他の考慮事項

LAMBDA関数とその関連関数を最大限に活用するには、それらの動作と要件に関する実践的な側面を理解しておくことが役立ちます。まず、これらの関数は最新のExcel機能の一部であるため、動的配列と新しいLAMBDA、BYROW、BYCOLなどの関数が既に含まれているバージョンが必要です。これらは通常、Microsoft 365の最新版で利用できます。

もう一つ重要な問題はパフォーマンスです。LAMBDA関数やトラバーサル関数は非常に強力ですが、非常に複雑なロジックを持つ広大な範囲に適用すると、再計算に時間がかかる場合があります。LAMBDA関数は効率性を考慮して設計し、冗長な計算を避け、LETなどの構造体を活用して再利用可能な中間値を定義することをお勧めします。

パラメーターと関数には、一貫した命名規則を維持することが非常に重要です。分かりやすい名前を使用することで、数か月後にファイルを開いたときや、他の人がワークブックを操作する必要があるときに、ロジックを理解しやすくなります。amount、rate、dataRow、valuesColといったパラメーター名は、単にxやyoaといった名前よりもずっと分かりやすいでしょう。

#CALC !エラーは、通常、Excel が配列式を計算できない場合、または LAMBDA 関数が有効な結果を返さない場合に発生します。数式の出力が適切に定義されていることを常に確認し、配列関数を使用している場合は、次元が一致していることを確認してください (たとえば、適切な変換を行わずに互換性のないサイズ範囲を結合していないこと)。

最後に、LAMBDAは多くの場合VBAの必要性をなくしますが、完全に置き換えるわけではありません。マクロによる自動化が最適な選択肢となる状況もありますが、膨大な数のカスタム計算やデータ変換においては、LAMBDAとその関連関数を使用することで、Excelの従来の数式環境内で全ての作業を行うことができます。

こうした機能のおかげで、スプレッドシートを日常的に使用するユーザーは、使い慣れた数式言語から離れることなく、独自の計算式を設計したり、行や列ごとに情報を集計したり、行列を完全にまたは部分的に走査したり、詳細な合計値を生成したり、その場で計算された新しい行列を作成したりするための、はるかに柔軟なツールを利用できるようになりました。

プログラミングスキル
関連記事:
最も需要のあるプログラミングスキルトップ10