• 締切済み

エクセルに関する質問です。、

エクセルマクロに関する質問なのですが例えば1~3の乱数を発生させ数字に応じて1、上 2、右 3、左のように設定しシート状に色をつけて軌跡を書くことはできますか?

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

x=0やy=0の時の「壁」への対処が必要と思って下記。 G25から始点とし、50回で打ち止め。 Sub Sample() Cells.Clear Dim i As Integer Dim x As Long Dim y As Long Range("G25").Activate Range("G25").Interior.Color = vbRed Randomize For j = 1 To 50 i = Int(Rnd() * 3 + 1) 'Cells(j, "B") = i x = ActiveCell.Row y = ActiveCell.Column Select Case i Case 1 x = x - 1 Case 2 y = y + 1 Case 3 y = y - 1 End Select 'MsgBox x & "=" & y & "=" & i If y = 0 Then y = y + 1 If x = 0 Then x = x + 1 Cells(x, y).Activate Cells(x, y).Interior.Color = vbRed Next j End Sub

rikitaparu
質問者

お礼

大変助かりました!本当にありが当ございます。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.3

以下の記述はエラー処理等を省略した簡易版です。 セルが移動した結果、シートをはみ出すような場合の 処理は適宜補ってください。 Sub Sample() Dim i As Integer Dim x As Long Dim y As Long i = Int(Rnd() * 3 + 1) x = ActiveCell.Row y = ActiveCell.Column Select Case i Case 1: y = y - 1 Case 2: x = x + 1 Case 3: x = x - 1 End Select Cells(x, y).Activate ActiveCell.Interior.Color = vbRed End Sub

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

修正です。 最初の「この部分は」は >1~3の乱数を発生させ の部分を指します。 >1~3の乱数を発生させ の部分は =INT(RAND()*3)+1 で出来ます。 RAND()が0以上、1未満の間の少数の乱数を発生させます。 それを3倍することで0以上3未満の乱数になります。 これをintで整数化(小数点以下切り捨て)することで0,1,2がランダムで出現するようにします。 最後に、+1することで、1,2,3がランダムで出現するようなります。

rikitaparu
質問者

補足

 回答していただき本当にありがとうございます。 1、上 2、右 3、左のように設定しシート状に色をつけて軌跡を書くことはできますか?  この文章の意味なんですが、乱数で1が出たら上、2が出たら右、3が出たら左に動くように設定し、例えばB5をスタートしてシートの上に通った後を赤色で示す方法を教えていただけますか?お願いします!

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

はじめまして この部分は =INT(RAND()*3)+1 で出来ます。 RAND()が0以上、1未満の間の少数の乱数を発生させます。 それを3倍することで0以上3未満の乱数になります。 これをintで整数化(小数点以下切り捨て)することで0,1,2がランダムで出現するようにします。 最後に、+1することで、1,2,3がランダムで出現するようなります。 >1、上 2、右 3、左のように設定しシート状に色をつけて軌跡を書くことはできますか? この部分の文章がよく分からないので、セルの名前(A1など)を添えて説明してください。

関連するQ&A