[VBA] ランダムウォークで平面格子点上を動き回ります

 VBA 数学マクロ入門講座です。今回は平面上にジグザグな痕跡を描く ランダムウォーク を VBA で実装します。

[VBA] ランダムウォーク

 方角を無作為に決定しながら移動するアルゴリズムのことを ランダムウォーク (random walk) とよびます。ひと口にランダムウォークといっても色々あるのですが、今回はその中で一番単純な平面格子点上を動き回るアルゴリズムを VBA で実装してみましょう。具体的には動点が座標 (x, y) にあるときに、その隣(東西南北)にある格子点

  (x + 1, y), (x – 1, y), (x, y + 1), (x, y – 1)

のいずれかを 1/4 の確率で選択して移動するというものです。
 
 空白のワークシートを開いた状態で、以下のマクロを実行してください。

'[VBA] 平面格子点ランダムウォーク

Sub Random_Walk()

  Dim x As Integer, y As Integer
  Dim i As Integer, rd As Integer

  '乱数を初期化します
  Randomize

  '出発点の座標を設定します
  x = 0
  y = 0

  '1000 ステップで実行
  For i = 1 To 1000

    '1 から 4 までの乱数を得ます
    rd = Int(4 * RND + 1)

    '乱数にもとづいて点を移動させます
    Select Case rd
      Case 1
      x = x + 1
      Case 2
      x = x - 1
      Case 3
      y = y + 1
      Case 4
      y = y - 1
    End Select

    Cells(i, 1).Value = x
    Cells(i, 2).Value = y

  Next i

End Sub

 Random_Walk() を実行すると、ワークシートの A 列と B 列にデータが入力されるので、 A 列と B 列を選択し、グラフウィザードから [散布図 (直線)] を選択して、軸の目盛などを適当に調整してください。次のような図が表示されるはずです。

 VBAランダムウォーク試行1
 
 Random_Walk() を実行するたびに、異なったグラフが表示されます。

 VBAランダムウォーク試行2
 
 もっと複雑な法則を組込んで動かすこともできますので、基本アルゴリズムをベースに皆さんで工夫して色々な ランダムウォーク を作ってみてください。面白いものができたら、コメントしてくださいね。ついでにコードも教えてください(← 図々しい)。

【次の記事】≫ AddChartメソッドでグラフを作成します

エクセルや数学に関するコメントをお寄せください