- ベストアンサー
Excel で 10個のセルに、0から9を一つ一つランダムに表示したい
子供の算数の問題を作成するために考えているのですが、Excel で10個のセルに、0から9を一つ一つランダムに表示したいのです。ただ、一度使用した数字は、二度と使用しないようにするためにいい方法はないでしょうか。 例1 2.5.8.6.3.9.7.4.1.0 例2 1.4.7.2.0.5.8.3.6.9 など、乱数等を使用した方がいいと思うのですが、if関数は、最大7つまでしか、判断だきないそうです。 ランダムであり、一度使用した数字は、使用せず、0から9をそれぞれ表示する方法は、ないでしょうか。 よろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
例えばA1~A10にRAND()をいれ、 B1にRANK(A1,A$1:A$10)-1 と言うようにB10までいれれば、 0~9までの数値をランダムに表せます。 RANDで同じ数値が出た場合は、同じ数字が2つになりますが・・・
その他の回答 (8)
- sakenomo
- ベストアンサー率52% (35/67)
0から9までの数字を作るだけですが、VBAでやってみました。A1から10行分を作ります。 サイコロを振ってでた目で、一つ一つのセルを埋めていく方式です。 最後のほうの、 Loop Until p = 10 の、10を他の数字に変えれば、その数字分の行数を埋めることができます。32767まで指定できます。 Sub Saikoro() Dim i As Byte, c As Range, myRange As Range Dim b As Byte, p As Integer Set myRange = Range("A1", "J1") Do myRange.Value = 10 i = 1 Do b = Int((9 - 0 + 1) * Rnd + 0) For Each c In myRange If c.Value = b Then Exit For End If If c.Column = i Then c.Value = b i = i + 1 Exit For End If Next c Loop Until i = 11 Set myRange = myRange.Offset(1, 0) p = p + 1 Loop Until p = 10 End Sub
お礼
VBAまで、作っていただ本当にありがとうございます。とても、参考になりました。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
思いっきりシンプルなモノを。 まず、0から9までの数値をA列にでも用意します。 B列に乱数を発生させ、B列をキーにしてA列を並べ替えます。 おしまい。
お礼
なるほど、このような方法もあるのですね。 ありがとうございます。
- jun9031
- ベストアンサー率42% (51/120)
#3です。 いろいろ考えてみましたが、なかなかしっくりくるのが思い浮かびませんでした・・・。 とりあえずrand()*rand()ぐらいで桁数を増やせば、 同じ数字がでることは確率的にはほとんどなくなりますが・・・。 1シートで利用するセルだけで0~9を振り分けるのはちょっと難しそうです。(VBAを使えばできそうですが・・・15パズルを作るのと同じ要領ですので。) やはり別シートで乱数を発生させてrank()-1で計算させるのが楽そうです。 あ、rank()のあとの-1が重要ですよ。 これがないと1~10のランクになってしまうので、 -1で0~9の数値に変換しています。 ご希望に添えず、すいません。
お礼
いろいろ考えていただきありがとうございます。
- Seiryo
- ベストアンサー率13% (27/203)
#5さんのやり方はvbaで可能でしょうね。 ifで10の時って言うのもいいですけど、 -1でもいいですね
お礼
ありがとうございます。
- ymmasayan
- ベストアンサー率30% (2593/8599)
EXCELでできるかどうか判りませんが、一般に使う方法です。 いろんなのがありますが手っ取り早いのを。 最初に0~9を入れておき乱数2つ引いてその順序に相当する2つを入れ替える。 これを20~30回もやれば完全にばらばらになりますよ。
お礼
いろいろな方法があるのですね。 本当にありがとうございます。
- jun9031
- ベストアンサー率42% (51/120)
#3です。 すいません。回答を打ってる時にもろに#2の方とかぶってしまった上に、補足で言われていることにヒットしてしまっています・・・(笑) ちょっと考えてみます。
補足
ありがとうございます。 乱数のけた数を大きめにすると、何とかできそうです。 本当にありがとうございます。
- paspas
- ベストアンサー率52% (47/90)
乱数で適当な値を10個発生させ、rank関数で順位をつけ、その結果を応用したらどうでしょうか?
補足
ご指導ありがとうございます。 rank関数で順位をつけた時、同じ数字がでてきた時、ランクが同じになることと、0から9の乱数内に同じ数字がでない状態のセル位置をそのまま使用したいのです。いい方法は、ないでしょうか。
- Hageoyadi
- ベストアンサー率40% (3145/7860)
=INT(RAND()*10) では >二度と使用しないようにする ことが出来ませんので、分析ツールを使います。 参考URLへ。
補足
早速のご返事誠にありがとうございます。 上記サイトを見て、自分で試してきました。 上記サイト通りに実施したのですが、「乱数発生離散確率の列の合計は、1になります。」とヘルプがでてしまいます。 上記、方法で、0から9の乱数がかならず、二回使用しないように、同時に表示できるのでしょうか。
補足
上記を参考にさせていただきできました。 つまり、別シートに多き目の数値乱数を作成し、その乱数表から本来のシートに必要なRANK関数で指定しました。ただ、0がでず、10になってしまうので、全体にif関数を使用してRANKが10になる時のみ、0に指定しました。 本当にありがとうございました。