解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

選択肢と選択回数で全パターンを出力する VBA



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


色々な事を考える上で、当たり前のことを言いますが、状況や条件によって結果は変わります。

『OK、NG』や『 A パターン、 B パターン』の繰り返しで、考慮しなければならないパターンはどんどん増加します。

選択肢、選択回数を入力したら、全パターンを出力する VBA を書き留めておきます。

だいぶハマったので、冗長でエレガントなソースコードではありませんので、ご容赦下さい。



動作環境


Windows 7
Excel 2007



プログラム

ソースコード


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



結果

VBE のイミディエイトウィンドウに出力した結果です。

図1 図 組合せ出力結果



コメント

このプログラムは組合せサブルーチンと再帰関数で構成されていて、中身に共通する部分が多いため、組合せサブルーチンの中身を再帰関数に組み込めるはずです。

選択肢と選択回数を目的に沿って変更すれば、組合せの全パターンを出力出来ます。

Debug.Print で出力しているところでサブルーチンなどをコールすれば組合せパターンを活用出来ます。
ファイル出力のサブルーチンなど。

ハードウェアの運用で生じる故障やトラブルを網羅的に検証したい時に使えそうなプログラムですね。



以上