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

子供の算数の問題を作成するために考えているのですが、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をそれぞれ表示する方法は、ないでしょうか。
よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 08:48

思いっきりシンプルなモノを。



まず、0から9までの数値をA列にでも用意します。
B列に乱数を発生させ、B列をキーにしてA列を並べ替えます。
おしまい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 08:47

#3です。



いろいろ考えてみましたが、なかなかしっくりくるのが思い浮かびませんでした・・・。

とりあえずrand()*rand()ぐらいで桁数を増やせば、
同じ数字がでることは確率的にはほとんどなくなりますが・・・。

1シートで利用するセルだけで0~9を振り分けるのはちょっと難しそうです。(VBAを使えばできそうですが・・・15パズルを作るのと同じ要領ですので。)

やはり別シートで乱数を発生させてrank()-1で計算させるのが楽そうです。
あ、rank()のあとの-1が重要ですよ。
これがないと1~10のランクになってしまうので、
-1で0~9の数値に変換しています。

ご希望に添えず、すいません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 08:45

#5さんのやり方はvbaで可能でしょうね。


ifで10の時って言うのもいいですけど、
-1でもいいですね
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2003/06/19 00:48

EXCELでできるかどうか判りませんが、一般に使う方法です。


いろんなのがありますが手っ取り早いのを。

最初に0~9を入れておき乱数2つ引いてその順序に相当する2つを入れ替える。
これを20~30回もやれば完全にばらばらになりますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/19 00:50

#3です。


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

ちょっと考えてみます。

この回答への補足

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

補足日時:2003/06/19 00:19
    • good
    • 0

例えばA1~A10にRAND()をいれ、


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

この回答への補足

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

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

補足日時:2003/06/19 00:04
    • good
    • 1

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

この回答への補足

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

補足日時:2003/06/18 23:49
    • good
    • 0

=INT(RAND()*10)


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

参考URL:http://deisuitei.pinky.ne.jp/excel/excel10a.htm

この回答への補足

早速のご返事誠にありがとうございます。
上記サイトを見て、自分で試してきました。
上記サイト通りに実施したのですが、「乱数発生離散確率の列の合計は、1になります。」とヘルプがでてしまいます。

上記、方法で、0から9の乱数がかならず、二回使用しないように、同時に表示できるのでしょうか。

補足日時:2003/06/18 23:44
    • good
    • 0

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