dポイントプレゼントキャンペーン実施中!

初心者です。宜しくお願いいたします。

エクセルでくじを作りたいと思います。

エクセルのシートに、あみだくじというボタンを押すと
1~15までの数字及び、「あなたはこの数字です」というメッセージが乱数として
重ならないで出ると言うものを作りたいのです。
(15回より多くクリックできないという事もしたいと思います。)

何か良い知恵はありませんか。宜しくお願いいたします。

A 回答 (2件)

こんばんは!


一例です。

↓の画像のようにSheet2に1~15の数値を表示させ、それを利用してSheet1のA1セルに表示させるようにしてみました。

Sheet1にコマンドボタンを挿入 → 挿入したコマンドボタン上でダブルクリック → VBE画面が出ますので、
↓のコードをコピー&ペーストしてコマンドボタンをクリックしてみてください。
(Sheet2の表は作る必要はありません)

Private Sub CommandButton1_Click() 'この行から
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
If ws2.Range("C1") = "" Then
処理1:
ws2.Range("A1").FormulaR1C1 = "=rand()"
ws2.Range("A1").AutoFill Destination:=ws2.Range("A1:A15")
ws2.Range("A1:A15").Copy
ws2.Range("A1").PasteSpecial xlPasteValues
ws2.Range("B1").FormulaR1C1 = "=rank(RC[-1],R1C1:R15C1)"
ws2.Range("B1").AutoFill Destination:=ws2.Range("B1:B15")
ws2.Range("C1") = ws2.Range("B1")
ws1.Range("A1") = "あなたの番号は、" & ws2.Range("C1") & "番です。"
Else
Dim i As Long
i = WorksheetFunction.Match(ws2.Range("C1"), ws2.Range("B1:B15"), False)
ws2.Range("C1") = ws2.Range("B" & i + 1)
ws1.Range("A1") = "あなたの番号は、" & ws2.Range("C1") & "番です。"
End If
If ws2.Range("C1") = ws2.Range("B15") Then
If MsgBox("これ以上クリックできません。" & vbCrLf & "「クジ」を新しくしますか?" _
, vbYesNo) = vbYes Then
GoTo 処理1
Else
Exit Sub
End If
End If
End Sub 'この行まで

こんな感じではどうでしょうか?m(__)m
「エクセルマクロ、VBAにてあみだくじ」の回答画像2
    • good
    • 0
この回答へのお礼

細かくご指示を頂きありがとうございました。何とか形になりました。

お礼日時:2011/08/04 05:25

方法はこんなもん↓でいいのでは?


1.どこかのシートに1~15までの数字を1列に入れておく。
2.ボタンを押すとマクロで上記の数字の文字数内でランダムに数字を発生させる(ランダム数)
3.発生させたランダム数に相当するセルにある数字を"あなたの数字"として表示させる。
4.表示させた数字を削除して、その分後ろの数字を詰める。
5.上記の2.に戻り繰り返す。
6.1.の数字がなくなったらマクロを起動させないようにする。
技術的にどうしたらいいかはしっかり考えてみて、判らない点はそこにポイントを絞った質問をすればいいでしょう。
    • good
    • 0
この回答へのお礼

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

できれば、構文なんかを載せていただくとありがたく存じます。
すみません。初心者ですので、宜しくお願いいたします。

お礼日時:2011/03/11 13:14

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