• ベストアンサー

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

最近エクセルVBAを勉強し始めた初心者です。 エクセル上でコマンドボタンを押すとF12~H12にそれぞれ0~9の数字を一定時間回転させF12、H12、G12の順(左、右、真ん中の順)に時間差で0~9の乱数を発生させ表示させるには(パチンコのリーチみたいな感じ?)どのようなプログラムを組めばよろしいでしょうか? 数字を回転させ乱数を表示させるプログラムは For = i = 0 To 100  Range("●●").Value = Int(Rnd * 10) Next i です。 よろしくお願いします。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

また授業ですか? 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
質問者

お礼

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

shorinji36
質問者

補足

物はついでに教えて欲しいのですがF12とH12には必ず同じ数字(5,●,5)、(7,●,7)を出現させるにはどうすればよろしいのでしょうか?

その他の回答 (3)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

>物はついでに教えて欲しいのですが・・・ ついでなので、#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
質問者

お礼

有難うございます、助かります。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

最近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
質問者

お礼

回答有難うございます。 難しすぎてよくわかりませんでした。ごめんなさい。 なぜコンパイルエラーがでるのかもわかりませんでした。

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

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

関連するQ&A

専門家に質問してみよう