• ベストアンサー

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をそれぞれ表示する方法は、ないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • jun9031
  • ベストアンサー率42% (51/120)
回答No.3

例えばA1~A10にRAND()をいれ、 B1にRANK(A1,A$1:A$10)-1 と言うようにB10までいれれば、 0~9までの数値をランダムに表せます。 RANDで同じ数値が出た場合は、同じ数字が2つになりますが・・・

taka508
質問者

補足

上記を参考にさせていただきできました。 つまり、別シートに多き目の数値乱数を作成し、その乱数表から本来のシートに必要なRANK関数で指定しました。ただ、0がでず、10になってしまうので、全体にif関数を使用してRANKが10になる時のみ、0に指定しました。 本当にありがとうございました。

その他の回答 (8)

  • sakenomo
  • ベストアンサー率52% (35/67)
回答No.9

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

taka508
質問者

お礼

VBAまで、作っていただ本当にありがとうございます。とても、参考になりました。

回答No.8

思いっきりシンプルなモノを。 まず、0から9までの数値をA列にでも用意します。 B列に乱数を発生させ、B列をキーにしてA列を並べ替えます。 おしまい。

taka508
質問者

お礼

なるほど、このような方法もあるのですね。 ありがとうございます。

  • jun9031
  • ベストアンサー率42% (51/120)
回答No.7

#3です。 いろいろ考えてみましたが、なかなかしっくりくるのが思い浮かびませんでした・・・。 とりあえずrand()*rand()ぐらいで桁数を増やせば、 同じ数字がでることは確率的にはほとんどなくなりますが・・・。 1シートで利用するセルだけで0~9を振り分けるのはちょっと難しそうです。(VBAを使えばできそうですが・・・15パズルを作るのと同じ要領ですので。) やはり別シートで乱数を発生させてrank()-1で計算させるのが楽そうです。 あ、rank()のあとの-1が重要ですよ。 これがないと1~10のランクになってしまうので、 -1で0~9の数値に変換しています。 ご希望に添えず、すいません。

taka508
質問者

お礼

いろいろ考えていただきありがとうございます。

  • Seiryo
  • ベストアンサー率13% (27/203)
回答No.6

#5さんのやり方はvbaで可能でしょうね。 ifで10の時って言うのもいいですけど、 -1でもいいですね

taka508
質問者

お礼

ありがとうございます。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.5

EXCELでできるかどうか判りませんが、一般に使う方法です。 いろんなのがありますが手っ取り早いのを。 最初に0~9を入れておき乱数2つ引いてその順序に相当する2つを入れ替える。 これを20~30回もやれば完全にばらばらになりますよ。

taka508
質問者

お礼

いろいろな方法があるのですね。 本当にありがとうございます。

  • jun9031
  • ベストアンサー率42% (51/120)
回答No.4

#3です。 すいません。回答を打ってる時にもろに#2の方とかぶってしまった上に、補足で言われていることにヒットしてしまっています・・・(笑) ちょっと考えてみます。

taka508
質問者

補足

ありがとうございます。 乱数のけた数を大きめにすると、何とかできそうです。 本当にありがとうございます。

  • paspas
  • ベストアンサー率52% (47/90)
回答No.2

乱数で適当な値を10個発生させ、rank関数で順位をつけ、その結果を応用したらどうでしょうか?

taka508
質問者

補足

ご指導ありがとうございます。 rank関数で順位をつけた時、同じ数字がでてきた時、ランクが同じになることと、0から9の乱数内に同じ数字がでない状態のセル位置をそのまま使用したいのです。いい方法は、ないでしょうか。

  • Hageoyadi
  • ベストアンサー率40% (3145/7860)
回答No.1

=INT(RAND()*10) では >二度と使用しないようにする ことが出来ませんので、分析ツールを使います。 参考URLへ。

参考URL:
http://deisuitei.pinky.ne.jp/excel/excel10a.htm
taka508
質問者

補足

早速のご返事誠にありがとうございます。 上記サイトを見て、自分で試してきました。 上記サイト通りに実施したのですが、「乱数発生離散確率の列の合計は、1になります。」とヘルプがでてしまいます。 上記、方法で、0から9の乱数がかならず、二回使用しないように、同時に表示できるのでしょうか。

関連するQ&A