VBAの再帰関数(再帰呼び出し)について

Excel
スポンサーリンク

皆さん、こんにちは。2021年4月よりVBAを勉強し始めて、現在8ヶ月目となりました。(現在、2021年11月30日)

今回は私が学習していく中で、よくつまづいていた「再帰関数(再帰呼び出し)」について備忘録的に記していきたいと思います。

正直、学習中は数時間考え込んでもアルゴリズムを理解できなかったですし、未だに使いこなせる自信はありません。しかし、それを逆手に取り、超素人が超素人目線で解説しておりますので、
是非、参考にしてください。

まずは、再帰関数とは・・・

『あるプロシージャの処理内部で再びそのプロシージャ自身を呼び出す処理』

実際、このブログ記事をお読みのあなたは、上記の内容自体はわかっていると思いますが、そのコードの動きを理解できなくてサイト検索していることだと思います。

スポンサーリンク

基本的な再帰関数のコードの動きを検証してみる

再帰呼び出し解説

  1. Sub test()
  2. func (0)
  3. End Sub

  4. Private Function func(ByVal r As Long) As Long
  5. If r < 5 Then
  6. func (r + 1)
  7. End If
  8. End Function

上記、コードについては、引数0の値で、ファンクション関数を呼び出しています。funcプロシージャ内で、func(r+1)が呼び出し元となり、再帰関数が発動しています。引数r+1で1が加わっていき、rが5になるとプロシージャが終了します。

「画像:再帰呼び出し解説」の④については、未処理の4~0が順番に処理されていきプロシージャ終了となります。

再帰関数基本

これらの引数の動きについては、Debug.Printやローカルウィンドウで丁寧に確認することをお勧めします。データが積み上げ順と反対に取り出されていくんですね。

階乗計算

これについては定番問題です。

階乗計算 プロシージャ
階乗計算2

理解のポイント

  1. コードの動きとして、積み上げ順序と取り出し順序を理解することが必要
  2. 呼び出し元について、saikiがたくさん出てきているのでどれが呼び出し元であるかを理解することが必要です。あくまで、このコードの再帰呼び出し元はelse以降のsaiki(n-1)です。引数のあるsaikiはこれしかないです。
  3. 引数の取り出しが終わった時点で、プロシージャは終了します。よって、saiki=1が解と思いがちですが、あくまで引数5の取り出しが終わった時点がプロシージャの終了で解は120となります。

上記3点を押さえれば、理解が進むと思います。

筆者おすすめ!!「たった1日で即戦力になるExcelマスター講座」受講体験談        (VBAマスター講座もあります)はこちら↓↓

すごい改善「たった1日で即戦力になるExcelマスター講座」受講体験談(レビュー)
「たった1日で即戦力になるExcelマスター講座」の受講レビューと受講内容の詳細、受講することで得られるメリットを端的にお伝えしています。

まとめ

いかがだったでしょうか。コードの動きを正確に理解できないと、なかなか再帰呼び出しを使いこなすのは難しいかもしれないですね。

最後にサイト「エクセルの神髄」より良問のリンクを貼らせていただきます。

練習問題24(再帰呼出し)|VBA練習問題
マクロVBA練習問題 ・以下の表の全組み合わせを作成して下さい。サンプルデータでは、組み合わせの数は、8*3*6*5=720通りです。・各項目はカンマ(,)で区切って下さい。・出力先は、新規シートを追加し、1行目に見出しとして"組み合わせ文字"と入れ、2行目より出力して下さい。

次回以降、VBA学習の中で気になったことをサイトアップしていきますので、楽しみにお待ちください。

コメント

タイトルとURLをコピーしました