● モンテカルロ法のVBA

image3
 「ワークシート1」は、左にナンバリング用の「16マス」を、右にクリプトグラム「33」を作っておきます。

 VBAプログラムでやることは、


①重複しない4マスを乱数で発生させる。
②その4マスに入っているクリプトグラム「33」の和を求め、それぞれの和のときの発生回数を記録。
③和が「33」のときその4マスの場所を記録。


 ではさっそく、プログラムを見てみましょう。

 初めてのコードは、「乱数発生」に関わる「Randomize」「Rnd」ですが、「Randomize」は、これを書いておかないと、乱数なのに何回やっても同じ結果になることがあるので、乱数系列を最初にシャフルする命令です。

 「Rnd」は、「0」と「1」の間のランダムな数を発生します。
 今回は「1」から「16」までの整数を使いたいので、これは私のいつもの癖ですが、

として少し大きめに設定して乱数を発生させてから、必要な「1」から「16」までの数を使います。

 「If文」が少し複雑なのは、重複をチェックするアルゴリズムです。
 結果はワークシート上に表示されます。

 これによって、ワークシート上には、重複しない4つの数を取り出した総和ごとの出現回数を求めることができます。

 そして、総和が「33」になるときの4カ所のマスが、ワークシート上に一覧表で表示されます。試行回数と4つの数の和が「33」になった回数の表です。


試行回数 182 910 1820 18200 182000
33出現
回数 12 31 72 814 8304


 この後、4カ所のマスのデータをVBAで分析して重複を削れば、「クリプトグラム33」から4つの数を取り出して、総和が「33」になるマスのパターンがいくつあるのかを求めることができます。
 VBAが担うのは、すべて第1回でご紹介した「オールマイティーコード」一行を使った、ワークシート上のデータの移動のみなので、割愛します。

PDFダウンロード

『Excel VBA』作成講座[4]88パターン結果 (20.6 KiB, 76 downloads)

※個人使用目的以外の無断転載・無断配布はお断りします。


12