もう、なにがなんやらで・・・
このマクロの繰り返しを入れ子で出来ないでしょうか?
加算しながら増やしていくので、わけわからなくなりそうです。
Option Explicit
Sub hiat()
Cells.Clear
Dim s As Long, a As Long, b As Long, c As Long, d As Long, e As Long
For a = 1 To 31
s = Rnd * 4
Cells(a, 1) = s
If s >= 4 Then Exit For '4がでたら終わり。
Next
For b = 2 To 31
s = Rnd * 4
Cells(a, b) = s
If s >= 4 Then Exit For '4がでたら終わり。
Next
Cells(a + 1, b).Select 'セルの移動
Cells(a + 1, b).Activate
For c = 1 To 31 - a
s = Rnd * 4
ActiveCell(c) = s
If s >= 4 Then Exit For '4がでたら終わり。
Next
Cells(a + c, b + 1).Select 'セルの移動
Cells(a + c, b + 1).Activate
For d = 1 To 31 - a - c
s = Rnd * 4
ActiveCell(d) = s
If s >= 4 Then Exit For '4がでたら終わり。
Next
Cells(a + c + d - 1, b + 2).Select 'セルの移動
Cells(a + c + d - 1, b + 2).Activate
For e = 1 To 31 - a - b - c - d
s = Rnd * 4
ActiveCell(e) = s
If s >= 4 Then Exit For '4がでたら終わり。
Next
Cells(a + c + e - 1, b - 1 + d + 1).Select 'セルの移動
Cells(a + c + e - 1, b - 1 + d + 1).Activate
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは。
KenKen_SP です。▼乱数について
> Dim s As Long
> s = Rnd * 4
Rnd は単精度浮動小数点数型 (Single) の乱数を返します。それを Long
型の変数 s で受ける場合、小数が丸められた整数で代入されます。
したがって、0~4の範囲の整数で乱数を発生させる、、と解釈しました。
▼移動について
移動量は1で固定だから、アクティブのセルを移動させてしまえば、座標
計算しなくて済みます(手抜き)。
まあ、OFFSETにつかう値を変数で保持しておくだけですが、、
進行方向は blnDEST フラグで決めるようにし、4がでたら
blnDEST = Not blnDEST
で値を逆転させてます。
ご提示頂いたコードの解釈が間違っていたら、スルーして下さい。
では。
Option Explicit
Sub Sample()
'【仕様?】
'0~4の範囲で発生させた整数の乱数をセルに書き込み、行または列方向に移動
'4なら縦横の進行方向を逆転させる
Const cnsMAXMOVE As Long = 31 '最大移動量 31? いくつでもOKだけどエラー処理必須
Const cnsUPPER As Long = 4 '乱数の最大値
Const cnsLOWER As Long = 0 '乱数の最小値
Const cnsCHANGE As Long = 4 '進行方向逆転トリガー値
Dim i As Long
Dim lngVAL As Long
Dim blnDEST As Boolean
'初期化
Cells.Clear 'セルクリア
Cells(1, 1).Select '基点
'最初の進行は行方向
blnDEST = True
'カウンタ i が最大移動量になるまでループ
For i = 1 To cnsMAXMOVE
'抽選
Randomize
lngVAL = CLng(Int((cnsUPPER - cnsLOWER + 1) * Rnd + cnsLOWER))
'抽選結果の乱数を書き込み
ActiveCell.Value = lngVAL
'抽選結果から進行方向を決める
If lngVAL = cnsCHANGE Then blnDEST = Not blnDEST
'進行方向別の移動処理
If blnDEST Then
ActiveCell.Offset(1, 0).Select '行方向へ移動
Else
ActiveCell.Offset(0, 1).Select '列方向へ移動
End If
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excel UserForm の表示位置
-
入力規則のリスト選択
-
DataGridViewのフォーカス遷移...
-
DataGridViewで指定したセルの...
-
エクセルのカーソルを非表示に...
-
Excelで空白セル直前のセルデー...
-
【VBA】【ユーザーフォーム_Lis...
-
セルの半透明着色処理
-
Excel VBA IF文がうまく動作し...
-
特定の色のついたセルを削除
-
EXCEL VBA 文中の書式ごと複写...
-
EXCEL 2010 VBAでピボットで複...
-
pukiwikiのテーブル拡張書式
-
Excel2003 VBA 「*」を含む文字...
-
エクセルの合計を自動で表示さ...
-
csvファイルの特定のセルから読...
-
複数指定セルの可視セルのみを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
Excelで空白セル直前のセルデー...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
【Excel VBA】一番右端セルまで...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
EXCEL VBA 文中の書式ごと複写...
-
下記のマクロの説明(意味)を...
-
Excel VBAでCheckboxの名前を変...
-
【VBA】写真の貼り付けコードが...
-
特定の色のついたセルを削除
-
VBA:日付を配列に入れ別セルに...
-
VBA にて、条件付き書式で背景...
-
DataGridViewのフォーカス遷移...
-
関数の引数でrangeを指定したとき
-
入力規則のリスト選択
-
DataGridViewで指定したセルの...
-
VBAでユーザーフォームにセル値...
-
複数指定セルの可視セルのみを...
おすすめ情報