• ベストアンサー
  • すぐに回答を!

エクセルVBAでこのプログラムの作るには

  • 質問No.5437595
  • 閲覧数389
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 83% (1150/1380)

最近エクセルVBAを勉強し始めた初心者です。

エクセル上でコマンドボタンを押すとF12~H12にそれぞれ0~9の数字を一定時間回転させF12、H12、G12の順(左、右、真ん中の順)に時間差で0~9の乱数を発生させ表示させるには(パチンコのリーチみたいな感じ?)どのようなプログラムを組めばよろしいでしょうか?

数字を回転させ乱数を表示させるプログラムは
For = i = 0 To 100
 Range("●●").Value = Int(Rnd * 10)
Next i
です。

よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 50% (379/747)

また授業ですか?
1日をまた無駄に過ごしたの?
http://okwave.jp/qa5388388.html
前回の回答は理解できなかったようで残念です
前回より簡単な気がします

'サンプル
Sub test()
Dim rng As Range
Dim i As Integer
Dim flg As Integer
'一定時間、数字を回転させる
For i = 1 To 10000
For Each rng In Range("f12:h12")
flg = 0
If rng.Column = 6 And i > 3000 Then flg = 1
If rng.Column = 8 And i > 6000 Then flg = 1
If flg = 0 Then rng.Value = Int(Rnd * 10)
Next rng
Next i
End Sub

人に聞いたら身になりませんよ~
補足コメント
shorinji36

お礼率 83% (1150/1380)

物はついでに教えて欲しいのですがF12とH12には必ず同じ数字(5,●,5)、(7,●,7)を出現させるにはどうすればよろしいのでしょうか?
投稿日時:2009/11/11 01:01
お礼コメント
shorinji36

お礼率 83% (1150/1380)

いつもお世話になっております。今回もわかりやすいプログラムありがとうございます。回答を見てああ、そういう視点で組むのかと勉強させられる日々でございます。
投稿日時:2009/11/11 00:57

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 50% (379/747)

>物はついでに教えて欲しいのですが・・・
ついでなので、#2の回答に追加のみ

'サンプル
Sub test()
Dim rng As Range
Dim i As Integer
Dim flg As Integer
'一定時間、数字を回転させる
For i = 1 To 10000
For Each rng In Range("f12:h12")
flg = 0
If rng.Column = 6 And i > 3000 Then flg = 1
If rng.Column = 8 And i > 6000 Then flg = 1
If rng.Column = 6 And i = 3001 Then rng.Value = IIf(rng.Value > 4, 7, 5)
If rng.Column = 8 And i = 6001 Then rng.Value = Cells(12, 6).Value
If flg = 0 Then rng.Value = Int(Rnd * 10)
Next rng
Next i
End Sub
お礼コメント
shorinji36

お礼率 83% (1150/1380)

有難うございます、助かります。
投稿日時:2009/11/12 01:05
  • 回答No.3

ベストアンサー率 59% (574/965)

最近RaiseEventを覚えたので、試みに作ってみました。それらしい動きをすると思います。当方XL2000ですので、他のバージョンで動かなかったらご容赦下さい。PCの仕様によらず速度が一定(たぶん)で、CPUを100%占有しないところがメリットですかね。(2~4%位でした)
☆シートモジュール
シートにコマンドボタン(コントロール)を一個おきます。
Private WithEvents myTimer As myTimerClass

Private Sub CommandButton1_Click()
Randomize (Now)
Set myTimer = New myTimerClass
myTimer.TimerTask (10)
DoEvents
End Sub

Private Sub myTimer_UpdateTime1(ByVal counter As Long)
If counter > 600 Then
Range("A1").Value = Int(Rnd * 10)
End If
End Sub

Private Sub myTimer_UpdateTime2(ByVal counter As Long)
If counter > 300 Then
Range("B1").Value = Int(Rnd * 10)
End If
End Sub

Private Sub myTimer_UpdateTime3(ByVal counter As Long)
If counter > 0 Then
Range("C1").Value = Int(Rnd * 10)
End If
End Sub
☆クラスモジュール myTimerClass
Public Event UpdateTime1(ByVal counter As Long)
Public Event UpdateTime2(ByVal counter As Long)
Public Event UpdateTime3(ByVal counter As Long)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private myCounter As Long

Public Sub TimerTask(ByVal Duration As Long)
Sleep Duration
Select Case (myCounter Mod 3)
Case 0
RaiseEvent UpdateTime1(myCounter)
Case 1
RaiseEvent UpdateTime2(myCounter)
Case 2
RaiseEvent UpdateTime3(myCounter)
End Select
myCounter = myCounter - 1
Loop
End Sub

Private Sub Class_Initialize()
myCounter = 1000
End Sub
お礼コメント
shorinji36

お礼率 83% (1150/1380)

回答有難うございます。
難しすぎてよくわかりませんでした。ごめんなさい。
なぜコンパイルエラーがでるのかもわかりませんでした。
投稿日時:2009/11/11 01:20
  • 回答No.1

ベストアンサー率 28% (4489/15985)

エクセル(表計算ソフト)は、仕事の数字(金額、個数、人数など)を扱うのに適したものと思います。ゲームや遊興のソフト作成に使うためには、適したもの(メソッドなど)が少なく、却って普通のエクセルVBAの本に解説されている課題より、難しいと思います。時間(差)の問題なども難しい。下手にやると、一瞬に終わって何がなんだか判らなくなったりする。
上記のエクセルVBAの普通の解説書にあるエクセルVBAを少し判って、多分エクセルVBAを捨ててから、他のもの(VBなど)でやることになるでしょう。ゲーム的なものは特有の技術(サブプログラムの集積)が要ると思います。
>エクセルVBAを勉強し始めた初心者です。がやるべき課題ではないと思う。
両者で進むべき方向が違う。
それにこの課題は丸投げです。回答者にたよらっず、自分で必要なコード群を1つづ勉強してください。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ