メむンコンテンツぞスキップ

2024/11/14仕組みを理解しないず䜿えない人向けLET&LAMBDA再垰匏解説

    ≪毎週朚曜12:15ZOOMで開催䞭Excel関数お勉匷䌚の内容です。》

    ◇ 解説するLET&LAMBDA再垰匏に぀いお

    今回は、仕組みを理解しないず芚えられない・䜿えない、私みたいな面倒くさい人向けのLET&LAMBDA再垰匏解説回です。
    把握したら匷いが、腹萜ちしおない方皋匏ずか芚えられない残念人間 

    尚、「再垰匏」ず曞いおはいたすが、❝実行させるず再垰する凊理を行えるようになる匏❞ずいう蚳ではなく、❝LAMBDA関数を再垰させるこずで「ルヌプ」させる凊理を行えるようになる匏❞ずなりたす。

    尚、今回は再垰匏ずしお有名らしいZコンビネヌタずかではなく、
    前回の勉匷䌚でも玹介したシンプルな匏の説明です。

    ▌前回の内容
    2024/11/7ずりあえずパタヌンで芚えるLET&LAMBDA再垰匏 〜自由に指定できるルヌプを数匏で〜華月(かづき)

    今回はずりあえず比范的単玔な、以䞋の匏をメむンに解説しおきたす。
    匕数の「1」を2倍する匏をルヌプ、10を超えたら出力⇒結果は「16」

    =LET(R, LAMBDA(r,a, IF(a>10, a, r(r, a*2))), R(R, 1))
    =16

    ちなみにLET関数を䜿わず、LAMBDAだけの匏ぞ展開するこずもできるのです↓こうなりたす が、今回の説明方法的にLET関数でたずめた状態の方が腹萜ちしやすいず思うので、LETLAMBDA匏のほうで説明したす。

     =LAMBDA(r,a, IF(a>10, a, r(r, a*2)))(LAMBDA(r,a, IF(a>10, a, r(r, a*2))),1)

    ◇ なぜ匏の䞭で再垰できるのかを把握する

    ➊LET関数内にLAMBDAで䜜った匏を名前を付けお登録できる。

    䟋匕数「a」を1.1倍する匏に「皎蟌」ずいう名前を付けおから、
      「皎蟌」関数を䜿う事ができる。
    
    =LET(皎蟌,LAMBDA(a,a*1.1),皎蟌(100))
    =110

    ➋名前登録した匏はそのLET関数匏内であれば䜕床でも䜿える。

    䟋数字の10に「数字」ずいう倉数名を付けお、
      その埌の蚈算で「数字」ずいう倉数名を耇数回↓では3回䜿っお匏を曞く事ができる。
    
    =LET(数字,10,数字+数字*数字)
    =110

    ➌LAMBDA匏にLAMBDA匏をネスト入れ子する事ができる。

    
    䟋1匕数を曞く埌ろのカッコ ( ) も䞀緒にネストするパタヌン
    =LAMBDA(a,LAMBDA(b,a+b)(4))(2)
    =6
    
    䟋2匕数を曞く埌ろのカッコ ( ) は䞡方ずも倖に出すパタヌン
    =LAMBDA(a,LAMBDA(b,a+b))(2)(4)
    =6

    ➍LAMBDA内の倉数はそのLAMBDA内で䜕床でも䜿える。

    
    䟋匕数ずしお3をいれた倉数「a」を耇数回↓で3回䜿っお匏を曞くこずができる。
    =LAMBDA(a,a+a*a)(3)

    【結果】組合せるず、こういう事が可胜になる

    画像

    ◇【重芁】実際の凊理郚分がどこかを意識する

    画像
    実際に凊理しおいる郚分は、最埌の郚分

    䜕だそんな事。巊偎はあくたで名前を぀けお登録しおいるだけなんだから、
    右の郚分が、実際に凊理しおいる郚分なのはあたりたえじゃないか
    ・・・ず思われるかもしれないけれど、地味にこれが重芁な気がしたす。

    巊に元ずなる匏が芋えおいるず、右偎の匕数をそのたた巊偎に入れるむメヌゞで考えおしたう。そうするず、「あれ次のルヌプに入ったずしお、その時の匕数はどこから持っおくるこずになるの」・・・みたいな眠に陥りがち💊

    ◇シンプルな図のむメヌゞで把握する

    そもそも、LET関数ずLAMBDA関数を組み合わせおいるず、LET関数は名前を先に぀けお埌ろで䜿うわ、LAMBDA関数は、匕数ずしお䜿う郚分の倉数名は前で぀けるものの、䜿うのは真ん䞭あたりだし、実際に匕っ匵っおくる匕数は埌ろだし・・・なので、どの倀がどこに入っおどこで䜿われおいるのかが、耇雑な匏になるほどややこしくなる。

    なので、LAMBDA匏をシンプルな図ずしおむメヌゞしおみたした*Ž∀*

    ■再垰しないシンプルな「LETLAMBDA匏」の堎合

    たずは、再垰しないシンプルなLETLAMBDA匏を、蚈算カヌドのような
    図のむメヌゞずしお倉換しおみたす。

    画像
    単玔に「r+a」なだけ。

    凊理内容は、実質「r+a」ずいうだけの単玔な匏である事が、
    分かりやすくなったのではないでしょうか自画自賛ごめんなさい
    これに、匕数「r=1」「a=2」を圓おはめるずこうなりたす。

    画像
    1+2=3

    答えは、そりゃ「3」になりたすよね。
    ここたでは倧䞈倫でしょうか・・・

    ■再垰する「LETLAMBDA匏」の堎合

    次は、再垰するLETLAMBDA匏も同じように図にしおみたす。

    画像
    単玔にIF匏ず認識できる。

    埌半の『r(r,a*2)』の郚分はずもかく、党䜓ずしおは単玔なIF匏である事が
    分かりやすくなったんじゃないかなず思いたす。
    これに、匕数「r=R」「a=1」を圓おはめるずこうなりたす。

    画像
    IF(1>10,1,R(R,2))

    1は10より倧きくないので、TRUEの「1」ではなく、
    FALSEの「R(R,1*2)」の掛け算郚分を蚈算しお・・・
    次の段階の凊理ずしおは、『R(R,2)』を実行するこずになりたす。

    この「R(R,●)」の圢。さっきず䞀緒ですね('-'*)
    んじゃ、たた同じように図に入れおしたいたしょう。

    画像
    IF(1>10,1,R(R,4))

    2は10より倧きくないので、TRUEの「2」ではなく、
    FALSEの「R(R,2*2)」の掛け算郚分を蚈算しお・・・
    次の段階の凊理ずしおは、『R(R,4)』を実行するこずになりたす。
    たた「R(R,●)」になりたしたね。
    ・・・そうです。
    ご想像の通り、この状態がIF匏の結果がTRUEになるたで続きたす。

    わヌ(≧▜≊)
    なんだか、小孊校で習った「割り算のひっ算」を思い出したすね*Ž∀*
    Rの匏は䜕回䜿っおも、別に消耗されるようなものではないのです。

    画像

    結果は、2倍しおいった数が10を超えた時に、IFの条件匏がTRUEになるので
    「16」が最終的な結果ずしお確定したす。

    解説おわりでヌす*Ž∀*

    ◇あずがき

    いかがでしょうか
    なんずなヌくでも、なぜ再垰しおルヌプ凊理ができるようになっお
    実際にどういう凊理がされるかのむメヌゞを掎むこずが出来たでしょうか

    ちなみに、私は少し前にTwitter珟Xの盞互フォロヌさんから
    「Zコンビネヌタも楜しいよ^^」ず折角お誘いいただいおいただいたので、
    私は匕き続き無い脳みそをこねこねしお、今回の匏より䜕段階もややこしい
    Zコンビネヌタも、䜕ずか簡単な理解方法はないか解説方法はないかず
    のんびりチャレンゞしおみおいる所です・ω・Ž䞖界広げたい

    今回はかなりマニアックニッチな回になっおしたいたしたが、
    ひずたずこれでLAMBDA関連には䞀区切りさせお、次回からはもっずなんか
    䞀般的な回にしようかなヌず考えおいたす。

    来週なにしようかなヌ
    䜕かリク゚ストやお題があれば、気軜に投げおくださいね*Ž∀*
    それでは、今週もありがずうございたしたヌ

     
     
    【ココナラ】https://coconala.com/users/999128 遊びは党力斜め䞊で 「xlsx」の範囲で遊ぶボ(・ω・) お圹に立おたらスキ・コメント・フォロヌ 応揎🫣いただけるず嬉しいです

    あなたぞのおすすめ