投稿

【Excel関数】再帰LAMBDA

イメージ
【Excel関数】ローカルのLAMBDA関数を再帰呼び出しする 作成:2024年04月02日 等差数列の和を、再帰関数で求める例で解説します。 「10」だったら、10+9+・・・+2+1=55、というやつです。 VBAだったら 名前の定義で再帰関数を作る セル内で再帰関数を定義して使う(その1) セル内で再帰関数を定義して使う(その2) 1. VBAだったら まぁ、プログラミング言語だったら、こんなもんでしょう。 Function func(引数 As Integer) As Integer If 1 <= 引数 Then func = 引数 + func(引数 - 1) End If End Function 2. 名前の定義で再帰関数を作る 「名前の定義」の場合、VBAと同じ感じで再帰呼び出しができます。 =LAMBDA(引数,IF(1<=引数,引数+func(引数-1))) funcという名前を作成し、参照範囲は「自分自身を呼び出すLAMBDA関数」を設定します。 3. セル内で再帰関数を定義して使う(その1) 本題のローカル関数です。VBAと同じ感じで書くとエラーになります。 =LET( func, LAMBDA(引数, IF(1<=引数, 引数+ func (引数-1))), ← エラー func(10) ) LAMBDA内で func は未だ定義されていないので使えません。 なので、funcを定義した後で、funcの引数にfuncを渡してみましょう。 =LET( fOuter, LAMBDA(fInner,引数, IF(1<=引数, 引数+fInner(fInner,引数-1))), fOuter(fOuter,10) ) LAMBDAの引数に自身のLAMBDAを渡して再帰させることができました。 ちなみに、VBAではLAMBDAは作れませんし、ユーザー定義関数にLAMBDAを渡すこともできません。 「fOuter(fOuter,10)」ではなく「fOuter(10)」という呼び出し方にしましょう。 =LET( fOuter, LAMBDA(fInner,引数, IF(1<=引数, 引数+fInner(f