
1,2,3,4,5の数列から3の数の組合せをワークシートに表示するプログラムを作っています。
このソースは以前他の質問に載っていたものを自分用に多少アレンジしたものです。構造は再帰呼び出しを使って、123、124、125、134、135、145、234、235…345という形で結果を出力します。いろいろと試してみて、計算結果は正しいとわかったのですが、デバックをしていて1つどうしても理解できないことがありました。計算結果が145から234になるとき、カーソルがSub combiPrのEnd subを指したあと直前のEnd ifに移ります。その後Forに移って234以降の計算を始めます。どうしてEnd Subからこのような動作をするのかわかる方いらっしゃいましたら是非ワケを教えてください。よろしくお願いしますm(_ _)m
Const m As Integer = 3 '←取り出す個数
Const n As Integer = 5 '←サンプル数
Dim rStr As String
Dim mRow As Integer
Dim Nest As Integer
Dim A(10) As Variant
Sub combi()
Cells.ClearContents
mRow = 0
Nest = 0
combiPr (0)
End Sub
Sub combiPr(n1)
Dim mCol As Integer
For nn = n1 + 1 To n - m + Nest + 1
Nest = Nest + 1
A(Nest) = nn
If Nest = m Then
mRow = mRow + 1
For mCol = 1 To m
Worksheets(1).Cells(mRow, mCol).Value = A(mCol)
Next
Else
Call combiPr(nn)
End If
Nest = Nest - 1
Next nn
End sub

No.2ベストアンサー
- 回答日時:
p1(プログラム1)がp2を呼び出し、p2がp3を呼び出し、という再帰呼び出しをビジュアルで書くと下。
p1始
p2始
p3始
p3終
p2終
p1終
提示されたソースでいうと下(だと思う)。
組み合わせの1桁目をセットするプログラム(プロシージャ)をcombiPr1と書くことにする。
combiPr2が、combiPr3を呼び出しcombiPr3が答えを出力して終了(End Sub)、combiPr2のcombiPr3呼び出し行に戻る。
なるほど!わかりやすい御説明ありがとうございました。私の再帰呼び出し文の理解が不十分だったようです。呼び出す前のプロシージャが生きていることを忘れていました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
変化させるセルが変化しない
-
VBAで関数をつくる
-
引き放し法による除算アルゴリ...
-
C言語についてです。 再帰を使...
-
排他的論理和 BCC(水平パリテ...
-
三菱シーケンサー works2 の日...
-
入射角反射角
-
数値計算の高速化 (cos, sin, exp)
-
EXCELなどで「返す」という表現
-
階乗のマクロ
-
MATLABの積分について
-
C言語について 下の画像は do-w...
-
Date型の範囲を超える数値について
-
エクセル 再計算とVBA の...
-
なぜオーバーフローになるので...
-
C++ でファイルを消す関数(??)
-
ExcelのVBAで複素数は扱えない...
-
Javaと他言語比較について
-
コマンドプロンプト内で右揃え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
VBAで関数をつくる
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
C言語についての質問です。 ル...
-
切り上げたい
-
DLL(VC++で作った)で稼動中の...
-
CとFORTRANの計算速度はどちら...
-
趣味で「乗換案内」みたいなソ...
-
CGIの実行権限(ディスク容...
-
エクセルで特定のセルのみを任...
-
functionを含んだプログラムを...
-
時間差を求める
おすすめ情報