プロが教えるわが家の防犯対策術!

初心者です。

ビンゴゲームをつくりたいと思っています。
EXCELのVBAでつくりたいと思っていますが,最初の取りかかりで早くも困っています。

ボタンをクリックするごとに,数字が出てくるようにしたいのですが,その良い方法が思い当たりません。

「1~100までの数字をランダムに出したい。但し,一度出た数字は二度と出ないようにしたい。」

私の知恵では,EXCELのVBAだから,EXCELのシートで乱数を入れて,ソートをするか,又は大量のIF文を使うくらいしか思いつかないのいです。

良い方法があればどなたか教えてください。

よろしくお願いいたします。

A 回答 (5件)

作業用のワークシートを用いない方法の一例です。

xl2000用のコードですが、ご参考まで。
なお、実用上は問題ないと思いますが、試験の際に、ボタンのクリック間隔が短いと追従できない事がある様です。
ユーザーフォームにラベル1個と、コマンドボタン1個を置きます。
☆標準モジュール
Sub test()
'Application.Visible = False 'Excelを隠す
UserForm1.Show
'Application.Visible = True
End Sub


☆Userform1モジュール
Dim numCollection As Collection
Const maxNum As Long = 75

Private Sub CommandButton1_Click()
Dim num As Long

If numCollection.Count = 0 Then
Me.Label1.Caption = "終了"
Exit Sub
End If
num = Int(Rnd() * numCollection.Count) + 1
Me.Label1.Caption = numCollection.Item(num)
numCollection.Remove (num)
End Sub

Private Sub UserForm_Initialize()
Dim i As Long

Me.Label1.Caption = "BINGO"
Set numCollection = New Collection
Randomize Time
For i = 1 To maxNum
numCollection.Add Item:=CStr(i)
Next i
End Sub

collectionオブジェクトについては、Web検索しても上位に詳しい記事がヒットしないので、VBAのヘルプをご覧下さい。
    • good
    • 0
この回答へのお礼

 ありがとうございます。

大変参考になります。
やっぱり,OKwebは,いいですね。

どの方の解答も勉強になります。
1つの質問に,いくつもの方法をいろいろな方から
教えていただき,大変嬉しいです。

でも,ベストアンサーは,1つなんですね。

ありがとうございました。

お礼日時:2011/03/21 19:37

No.2です!



>できることならVBAコードではいい方法ないでしょうか?
「読みあげる方の数字」を。

とありましたので・・・
一例です。
↓の画像のように別Sheetに表を作成し、コントロールツールボックスからコマンドボタンを一つ挿入し、
コマンドボタンをクリックするとA1セルにランダムに数字を表示するようにしてみました。
(とりあえず1~60までの数値としています)

C1セルに
=RAND()
D1セルに
=RANK(C1,$C$1:$C$60)
としてC1・D1セルを範囲指定し、D1セルのフィルハンドルで60行目までオートフィルでコピー!

挿入したコマンドボタンをダブルクリック → VBE画面が出ますので、↓のコードをコピー&ペーストして
コマンドボタンをクリックしてみてください。
(クリックする直前のD1セルの値が表示されます。)

Private Sub CommandButton1_Click()
Range("A1") = Range("D1") 'コマンドボタンをダブルクリック後、この行のみ入力!
End Sub

上記の3行だけでOKなのですが、ダブルクリックすると1・3行目が表示されると思いますので、
実質2行目だけのコピー&ペーストでOKのはずです。

尚、余計なお世話かもしれませんが前回の方法でビンゴカードを作成した場合、当たりが出る回数が極端に少ないと思います。
実際のビンゴはもっと確立を上げているみたいです。

そこで、↓のURLを参考にしてみてはどうでしょうか?

http://vba.hmpage.jp/bingo.htm

参考になれば良いのですが。m(__)m
「VBAで,ビンゴゲームの数字の生成方法」の回答画像4
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

大変参考になります。
いろいろと勉強になり,
大変ありがたく思っています。

お礼日時:2011/03/21 19:35

ん~? 誰かが書いたマクロを読む方が簡単なのですか?



#できるだけ簡単に:
Sub macro1()
 Dim i
 Worksheets("Sheet1").Select
 Application.ScreenUpdating = False
 With Range("A11:E25")
 .Formula = "=ROW(A1)+(COLUMN(A1)-1)*15"
 .Value = .Value
 End With
 Range("F11:F25").Formula = "=RAND()"
 For i = 1 To 5
 Range(Cells(11, i), Range("F25")).Sort key1:=Range("F11"), header:=xlNo
 Next i
 Range("A1:E5").Value = Range("A11:E15").Value
 Range("C3").Value = "FREE"
 Range("A11:F25").ClearContents
 Range("A1:E5").HorizontalAlignment = xlCenter
 Application.ScreenUpdating = True
End Sub


Sub macro2()
 Worksheets("Sheet2").Select
 Range("A1:A15") = "B"
 Range("A16:A30") = "I"
 Range("A31:A45") = "N"
 Range("A46:A60") = "G"
 Range("A61:A75") = "O"
 Range("B1") = 1
 Range("B2") = 2
 Range("B1:B2").AutoFill Range("B1:B75")
 Range("C1:C75").Formula = "=RAND()"
 Range("A1:C75").Sort key1:=Range("C1"), header:=xlNo
 Range("C1:C75").ClearContents
 Range("A:B").HorizontalAlignment = xlCenter
End Sub
    • good
    • 0
この回答へのお礼

 ありがとうございます。

大変参考になります。
私にとっては,EXCELの関数も初心者なので,これから貴殿から教授いただいた数式を書籍といろいろなWEbページをたよりにして理解のための努力をします。

だいぶ分かってきました。

お礼日時:2011/03/21 19:33

こんばんは!


一例です。

とりあえず1~60までの数値を5マス×5マスに表示するとしています。

↓の画像でG1セルに
=RAND()
H1セルに
=RANK(G1,$G$1:$G$60)
I1セルに
=ROW()
として、G1~I1セルを範囲指定し、I1セルのフィルハンドルで60行目までオートフィルでコピー!
(表示させたい最大数値行までコピー)

そして、A1セルに
=INDEX($I$1:$I$60,MATCH(SMALL($H$1:$H$60,ROW(A1)+(COLUMN(A1)-1)*5),$H$1:$H$60,0))
という数式を入れ、列方向と行方向にオートフィルでコピーすると
画像のような感じになります。

F9キーを押すたびに数値配列が変わってくると思います。

他に良い方法があればごめんなさいね。m(__)m
「VBAで,ビンゴゲームの数字の生成方法」の回答画像2
    • good
    • 1
この回答へのお礼

 ありがとうございます。

大変参考になります。
十分に良い方法だと思います。

私にとっては,EXCELの関数も初心者なので,これから貴殿から教授いただいた数式を書籍といろいろなWEbページをたよりにして理解のための努力をします。

できることならVBAコードではいい方法ないでしょうか?
「読みあげる方の数字」を。

カードをVBAで記述することは,あきらめます。
貴殿や#1の方からのアドバイスを参考にして
シートで作成します。あまりにも難しそうなので。

お礼日時:2011/03/20 23:07

ちょこっと探してみると,既に親切な人が作ってくれたのをゲットできます。


http://pc.nikkeibp.co.jp/article/NPC/20070118/25 …



#余談ですがご参考まで
>1~100までの数字をランダムに出したい

実際のビンゴカードは,そういう風にはなっていません。
各列にだいたい幾つから幾つまでと範囲が決まっていて,出た目を探しやすく作ってあります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

初心者にとっては,このEXCEL自体を理解するのに
少々手こずっています。

カードを作る作業も大変なんですね。
安易に取りかかると,苦しいです。
でも,いい機会だと思って頑張ります。

お礼日時:2011/03/20 22:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!