選択肢と選択回数で全パターンを出力する VBA
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
色々な事を考える上で、当たり前のことを言いますが、状況や条件によって結果は変わります。
『OK、NG』や『 A パターン、 B パターン』の繰り返しで、考慮しなければならないパターンはどんどん増加します。
選択肢、選択回数を入力したら、全パターンを出力する VBA を書き留めておきます。
だいぶハマったので、冗長でエレガントなソースコードではありませんので、ご容赦下さい。
プログラム
ソースコード
Sub 組合せ()
選択肢 = Array("同位相", "逆位相")
選択回数 = 5 ' 何回選択するかを設定する変数
選択数 = 1 ' 何回目の選択かをカウントする変数
ReDim arrパターン(1 To 選択回数)
For I1 = LBound(選択肢) To UBound(選択肢)
arrパターン(選択数) = 選択肢(I1)
If 選択数 < 選択回数 Then
選択数 = 選択数 + 1
Call 再帰(選択肢, arrパターン, 選択回数, 選択数)
Else
' 選択回数が 1 回の時は再帰は発生しないのでこの処理で出力する
Debug.Print Join(arrパターン, ", ")
End If
Next I1
End Sub
Function 再帰(ByRef 選択肢, ByRef arrパターン, ByRef 選択回数, ByRef 選択数)
For I1 = LBound(選択肢) To UBound(選択肢)
arrパターン(選択数) = 選択肢(I1)
If 選択数 < 選択回数 Then
選択数 = 選択数 + 1
Call 再帰(選択肢, arrパターン, 選択回数, 選択数)
Else
' 選択回数が 2 回以上の時はこの処理で出力する
Debug.Print Join(arrパターン, ", ")
End If
Next I1
選択数 = 選択数 - 1
End Function
コメント
このプログラムは組合せサブルーチンと再帰関数で構成されていて、中身に共通する部分が多いため、組合せサブルーチンの中身を再帰関数に組み込めるはずです。
選択肢と選択回数を目的に沿って変更すれば、組合せの全パターンを出力出来ます。
Debug.Print で出力しているところでサブルーチンなどをコールすれば組合せパターンを活用出来ます。
ファイル出力のサブルーチンなど。
ハードウェアの運用で生じる故障やトラブルを網羅的に検証したい時に使えそうなプログラムですね。
以上