エクセル LAMBDA 関数:関数を作成して引数を渡して呼び出す

はじめに

エクセルの LAMBDA 関数の使い方を紹介します。

LAMBDA 関数は関数を作成して、それに引数を渡して呼び出します。

=LAMBDA(x,y,x+y) のようにして、x+y の処理をする関数を作成できます。ただし、これだけだとエラーになります。

=LAMBDA(x,y,x+y)(1,2) のようにして、x に 1、y に 2 を設定して 1+2 の計算ができます。

主に次のような使い方をします。

  • 数式に引数を渡す:「名前の定義」を使って数式に引数を渡せます。
  • 再帰呼び出し:「名前の定義」を使って LAMBDA 関数を再帰呼び出しできます。
  • ループ:「REDUCE 関数」などから LAMBDA 関数を引数にしてセルの範囲をループできます。
ループする方法は「セルや文字列をループする」をご覧ください。
この関数は 365 で使用できます。
  • 目次
    • LAMBDA 関数の引数
    • 使い方、単独で使用する
    • 使い方、数式に引数を渡す
    • 使い方、再帰呼び出し
    • 使い方、ループ
    • 解説

LAMBDA 関数の引数

LAMBDA(名前1, 計算)
LAMBDA(名前1, 名前2, … 計算)
受け取る引数の名前を作成し、それを使用して計算した結果を返します。

引数「名前」省略できます。
この関数に渡す引数の名前を指定します。
引数「計算」返す値を指定します。引数「名前」、数値、文字列、セル参照、関数などを指定できます。スピル化

スピル化:セルの範囲や配列を指定すると結果が「スピル」します。

使い方、単独で使用する

数式に LAMBDA 関数だけを使用しても意味はありません。あくまで使用方法として紹介します。

引数なし

引数がない LAMBDA 関数を使用する意味はないので、通常は使用しません。

=1 の数式を LAMBDA 関数にします。

=LAMBDA(1)()

() が 2 つあります。

1 つ目の () は LAMBDA 関数を作成する括弧です。引数「名前」と引数「計算」を作成します。引数「計算」に入力された結果を返します。

2 つ目の () は LAMBDA 関数を呼び出す括弧です。引数「名前」に渡す値を指定します。引数はないので何も入力しません。

1

引数が 1 つ

引数「名前」に 1 を足し算します。名前にはセル「B3」を設定します。B3+1 と同じ式です。

=LAMBDA(x,x+1)(B3)
2

引数が 2 つ

引数「名前1」と引数「名前2」を掛け算します。セル「B3」と「C3」を引数「名前」に設定します。B3*C3 と同じ式です。

=LAMBDA(x,y,x*y)(B3,C3)
3

関数に名前を渡す

SUM 関数」を使用して引数「名前」の合計を求めます。セルの範囲を引数「名前」に設定します。SUM(B4:B6) と同じ式です。

=LAMBDA(範囲,SUM(範囲))(B3:B5)
14

LAMBDA 関数に名前を付ける

LET 関数」を使用して、LAMBDA 関数に名前を付けて数式内で何度も使用できます。LAMBDA 関数に Func という名前を付けます。

=LET(
Func,LAMBDA(x,x+1),
Func(0)+Func(0))

Func(0) なら、LAMBDA 関数の引数「名前」に 0 を設定します。0+1 と同じ式になります。

5

使い方、数式に引数を渡す

LAMBDA 関数の数式に引数を渡す使い方を紹介します。

IF 関数の結果に引数を渡す

IF 関数」や「LET 関数」のように、数式をそのまま返す関数から LAMBDA 関数を返すと次のように呼び出せます。

=IF(TRUE,LAMBDA(x,y,x+y))(1,2)
=LET(arg,1,LAMBDA(x,arg+x))(2)

このように関数と組み合わせることで高度な数式を作成できますが、複雑になり後から何をしている数式なのか理解できなくなる恐れもあります。

名前を定義して引数を渡す

名前の定義の使い方」から LAMBDA 関数に名前を付けて、その名前に引数を渡せます。これで数式に引数を渡せるようになります。

例として日曜日かどうかを判定する数式を作成します。

=IF(WEEKDAY(B3)=1,TRUE,FALSE)
6

これを LAMBDA 関数にします。

=LAMBDA(d, IF(WEEKDAY(d)=1,TRUE,FALSE))

それに 日曜日判定 という名前を定義します。

7

日付を定義した名前の引数に渡して LAMBDA 関数を呼び出します。

=日曜日判定(B3)

LAMBDA 関数は次のように処理されます。

=LAMBDA(d, IF(WEEKDAY(d)=1,TRUE,FALSE))(B3)
8

使い方、再帰呼び出し

LAMBDA 関数の再帰呼び出しする使い方を紹介します。

名前の定義の使い方」から LAMBDA 関数に名前を付けて、LAMBDA 関数から自身の名前を呼び出して再帰的に LAMBDA 関数を呼び出せます。どこかで終了しないといけないので「IF 関数」に終了条件を入力します。

再帰呼び出しするときの引数「計算」は、概ね次のような式になります。終了条件を満たしたら結果を返します。そうでないなら再帰呼び出しします。

IF(終了条件,
結果,
名前(引数))

例として「級数」という 1 から指定した値までの合計を求める数式を作成します。5 を指定したら 1 + 2 + 3 + 4 + 5 を計算します。

級数 という名前を定義します。

9

引数 合計 は、結果を返すための値です。

引数 数値 はいくつまでの合計を求めるかです。合計に加えたら 1 引いて 0 になるまで再帰呼び出しします。

=LAMBDA(
合計,数値,
IF(数値=0,
合計,
級数(合計+数値, 数値-1)))

級数(0, 5) を入力したら、LAMBDA 関数は次のように処理されます。

級数(0+5, 5-1))
級数(5+4, 4-1))
級数(9+3, 3-1))
級数(12+2, 2-1))
級数(14+1, 1-1))
15
10

使い方、ループ

LAMBDA 関数が引数の関数を使用してループができます。

ループする方法は「セルや文字列をループする」をご覧ください。
セルの範囲をループして LAMBDA で処理した合計を求めるには「REDUCE 関数」を使用します。
セルの範囲をループして LAMBDA で処理した過程の配列を作成するには「SCAN 関数」を使用します。
セルの範囲をループして行単位に計算した配列を作成するには「BYROW 関数」を使用します。
セルの範囲をループして列単位に計算した配列を作成するには「BYCOL 関数」を使用します。

解説

通常は「名前の定義の使い方」から名前を付けて、ブック全体で数式を再利用するために使用します。

または「REDUCE 関数」などの LAMBDA 関数が引数の関数に渡してループします。

=LAMBDA(x,y,x+y)(1,2) なら、x=1, y=2 になり 1+2 の計算結果を返します。

LAMBDA 関数を呼び出すときの 2 つ目の () がないとエラー #CALC! になります。

引数「名前」の先頭の文字には英字 (アルファベット)、日本語、アンダーバー _ 、エクセルで意味のない記号などを使用できます。ABC なまえ 漢字 _

引数「名前」の先頭以外の文字には加えて数字、絵文字を使用できます。ただし、最後の文字を数字にはできません。A1B 名前A 絵😀

引数「名前」に使用できる値は、「名前の定義」で使用できるものとほぼ同じです。

引数「名前」の大文字と小文字は区別しません。

引数「名前」に文字列 ( "" で囲まれているもの) やスペース、数値、セル名、シート名など、エクセルで意味のある値は使用できません。「R1C1 参照形式」を使用しているときは Rc を使用できません。

引数「計算」には、引数「名前」を使用できます。

引数「計算」に作成していない引数「名前」を入力したときはエラー #NAME? になります。

呼び出すときの引数の数が引数「名前」の数と一致していないときはエラー #VALUE! になります。

再帰呼び出しが終わらないときはエラーメッセージが表示されます。

引数を省略する

省略可能な引数は作成できませんが、引数に値を指定しなかったときの初期値を設定できます。

詳しくは「ISOMITTED 関数」をご覧ください。

Advanced formula environment

名前の定義より入力しやすいアドインを紹介します。Microsoft 公式です。

[挿入] タブをクリックして、アドイングループにある [アドインを入手] をクリックします。

11

Advanced formula environment で検索して [Advanced formula environment] の [追加] をクリックします。

12

[続行] をクリックしてインストールできます。

インストールが終わったら [ホーム] タブから [Advanced Formula Environment] をクリックします。

13

名前の定義より入力しやすい画面が表示されます。

[個人用のアドイン] からアンインストールできます。