プロが教える店舗&オフィスのセキュリティ対策術

偶数のみと奇数のみの番号の2種類のビンゴカードを作りたいです。
エクセルで作ろうと試みましたが、重複しないランダムの数字を偶数と奇数に分けることができません。作り方を教えて頂きたいです。

宜しくお願いします。

質問者からの補足コメント

  • すいません。言い忘れました。ビンゴカードに使う番号は1から50までの番号です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/02/03 22:20

A 回答 (4件)

重複しないランダムの数字を連続して発生させるのは不可能です。

そもそも、それってランダムじゃないので、当然、重複する数字も発生してしまいます。
そこで、すでに入力されている1~50までの奇数、または偶数の数字をランダムに並べ替えたらいかがでしょうか?

下記のマクロは、A1:E5に入力されている数値をランダムに並べ替えます。

Sub sample()
Dim myRng As Range
Dim i As Long
Dim r As Long
Dim s As Long
Randomize
Set myRng = Range("A1:E5")
For i = 1 To 25
r = Int((25 * Rnd) + 1)
s = myRng(1).Value
myRng(1).Value = myRng(r).Value
myRng(r).Value = s
Next i
End Sub
    • good
    • 0

1~25の範囲で乱数を発生させればよいだけでしょ?


質問文からはすでに「重複しないランダムな数字」は得られていると読み取れます。
質問は偶数と奇数に分ける方法を訪ねていると読み取れます。

…間違いないでしょうか
    • good
    • 1

もう少し詳しく条件を教えてください。



ビンゴということですので、5*5で中央外した24個の重複しない奇数のみのもの及び偶数のみのものを作りたいわけですね?
その24個の数字はどういったものですか?
例えば1以上50以下
例えば1以上100以下
例えば左側の5つは1~15、左から二列目の5つは16~30、中央の列は31~45、右から2列目は46~60、右端は61~75の範囲にする。

条件を何も提示してもらえないと、極端な話123456789という9桁の数字でもいいのか?ということになります。
恐らく2桁か多くて3桁を想定していると思いますが…
ビンゴカードも5*5が一般的というだけで、今回それが該当しているのかどうかは恐らくそうだろうとこちらが勝手に解釈する他ありません。

とりあえずエクセルにランダムな数値を取得する関数RANDというものがあります。
指定した範囲内でランダムな整数を取得する関数RANDBETWEENというものもあります。
好きな方を利用しましょう

奇数とは2k+1で、偶数とは2kで、表すことができます。
(kは整数)
なので奇数のみ、偶数のみの乱数とすることは簡単ですが、
重複させないというのが難しいのだと思われます。

例えば、各枠(24個?)に入る数字を決めてしまいます。
1つ目の枠には1~4(奇数なら1か3、偶数なら2か4と言う意味です)
2つ目の枠には5~8

24つ目の枠には93~96
と指定してしまうことで、重複する可能性を0にできます。
この場合だと1つの枠に2つの選択肢しかないので、他の人と同じカードになってしまいそうですが、2^24=16777216通りの組み合わせがあります。
とはいえ、4つでビンゴとなる列だけに注目した場合、2^4=16通りの組み合わせなので、やはり他の人とビンゴのタイミングが重なり易いかもしれません。
1つ目の枠を1~6で考えれば、3つずつの選択肢なので3^4=81通りにはなりますね。
24つ目の枠は139~144となります。

これでも問題ないようには思いますね。

枠の位置と数字の範囲を固定したくないのであれば、
とりあえず1~49の奇数での例を示します。

①A1~A25に
=ROW()*2-1
を入れます。これは1~49の奇数を小さい順に表示させたものです。

②B1に
=IF(27-COLUMN()>ROW(),IF(A1<A$27,A1,A2),"")
を入れます。これは「(27-そのセルの列番号)>そのセルの行番号」の時に「その左のセルの数字が、その左の列の27行目のセルに表示されたものよりも小さい場合は左のセルの数字、違う場合は左下のセルの数字」を表示し、違う場合は空白を表示します。
つまり、左の列でランダムに選ばれた数字を除いて、上詰めで小さい順に並べて表示させます。

③B1をB1~X25の範囲にコピーします。

④A27~X27に
=INDIRECT(LEFT(ADDRESS(ROW(),COLUMN(),4),1)&RANDBETWEEN(1,26-COLUMN()))
を入れます。これは同じ列の1~(26-その列の番号)行目の中でランダムに1つの数字を表示します。
つまり、A列であればA1~A25の中から、B列であればB1~B24の中から、…X列であればX1~X2の中からランダムに選びます。

これにより、A27~X27に49以下の奇数をランダムに重複なく並べています。(25個の中から24個並べているので、1個だけ表示されてないものがあります)

あとはビンゴの形に合わせて5*5の枡を作り、「=」でA27~X27をその枠の中で好きなように配置してください。
既にランダムになっているので、左上から縦に順番に並べるのでも、渦巻状に並べるのでも、思いつきでランダムに並べるのでもいいですが、
この時点でセル選択をミスして重複させてしまうと何の意味もなくなります。確実に重複するものができてしまいます。注意してください。

こんなもんでどうでしょうか
    • good
    • 0

(´・ω・`)?


重複しないランダムな数字を2倍すれば偶数、その2倍した数から1引けば奇数になるんだけど…。
偶数用と奇数用でそれぞれ作ればいいだけの事ではないだろうか。
もうひと手間かけるだけなのに何が分からないのか自分には理解ができない。
この回答への補足あり
    • good
    • 0

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