エクセル LAMBDA 関数:数式に引数を渡したり関数を作成する

はじめに

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

LAMBDA 関数は引数を受け取る数式を作成したり、関数の処理を作成します。

=LAMBDA(x,y,x+y) のようにして、足し算する数式を作成できます。

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

  • 数式に引数を渡す:「名前の定義」を使って数式に引数を渡せます。
  • 再帰呼び出し:「名前の定義」を使って LAMBDA 関数を再帰呼び出しできます。
  • ループ:「REDUCE 関数」など LAMBDA 関数を引数にとる関数を使用してループできます。
この関数は 365 で使用できます。
  • 目次
    • LAMBDA 関数
    • 使用例
    • 解説

LAMBDA 関数

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

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

使用例

単独で呼び出す

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

引数なし

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

=LAMBDA(1)()

() が 2 つあります。

1 つ目の () に、引数「名前」と引数「計算」を指定します。引数「計算」に数式を入力します。その結果を返します。

2 つ目の () に、この LAMBDA 関数を呼び出すための引数を指定します。引数はないので何も入力しません。

1

引数が 1 つ

セル「B3」を引数「名前」に指定して、それに 1 を加えます。B3+1 と同じ式です。

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

引数が 2 つ

セル「B3」と「C3」を引数「名前」に指定して、それを掛け算します。B3*C3 と同じ式です。

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

引数を関数に渡す

引数「計算」の中の「SUM 関数」に引数を渡します。SUM(B4:B6) と同じ式です。

=LAMBDA(数値,SUM(数値))(B4:B6)
4

LAMBDA に一時的な名前を付ける

LET 関数」を使用して、一時的に LAMBDA 関数に名前を付けて、数式内で何度も使用できます。

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

LAMBDA 関数に Func という名前を付けています。

5

数式に引数を渡す

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

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

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

これを LAMBDA 関数にします。

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

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

7

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

=日曜日判定(B3)
8

再帰呼び出し

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

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

級数 という名前を定義します。引数の合計は、結果を返すための値です。引数の数値はいくつまでの合計を求めるかです。

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

再帰呼び出しするときの引数「計算」は、概ね次のような式になります。

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

ループ

LAMBDA 関数を引数にとる関数を使用してループができます。詳しくはそれぞれの関数のページをご覧ください。

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

解説

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

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

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

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

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

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

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

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

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

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

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

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

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

引数を省略する

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

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

LAMBDA 関数を返す

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

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

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

Advanced formula environment

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

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

11

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

12

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

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

13

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

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