- ベストアンサー
1から9までの乱数
エクセルで1から9までの数を順不同に毎回取り出せる関数はどうしたらいいのでしょう。たとえば 135624897や987456123の様に数字を並べたいと思います。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>1から9までの数を順不同に毎回取り出せる関数はどうしたらいいのでしょう ◆補助列を使いますが .....................A.....................B 1..........0.443929945..........7 2..........0.673226283..........4 3..........0.606785989..........5 4..........0.684520785..........3 5..........0.282434013..........9 6..........0.892145097..........1 7..........0.844990705..........2 8..........0.443858791..........8 9..........0.471973758..........6 A1=RAND() ★A9まで下にコピー B1=RANK(A1,$A$1:$A$9) ★B9まで下にコピー ★F9を押すと数字が変更します
その他の回答 (6)
- chie65536
- ベストアンサー率41% (2512/6032)
文字列のまま入れ替えをすると遅いので、数値配列の入れ替えに変更してみた。 Function rand123() As String Dim ans As String Dim sa(9), st, i, e, a, b As Integer For i = 0 To 8 sa(i) = i + 1 Next e = Int(Rnd() * 50) + 50 For i = 1 To e a = Int(Rnd() * 9) b = Int(Rnd() * 9) st = sa(a) sa(a) = sa(b) sa(b) = st Next ans = "" For i = 0 To 8 ans = ans & Mid("123456789", sa(i), 1) Next rand123 = ans End Function
お礼
ありがとうございます。しかし、ベーッシクでは私には難しすぎる様です。
- Caryo_t
- ベストアンサー率45% (112/246)
次のいずれかの方法でできます。 その1 まず、Aの列に乱数を9こ並べます。 つまり、A1からA9のセル全部に =rand() を入れることになります。 次に、B1のセルに =RANK(A1,$A$1:$A$10) と入れて、これを オートフィルで9個並べます。 この結果、B1には =RANK(A1,$A$1:$A$10) 、B2には =RANK(A2,$A$1:$A$10) ・・・B9には =RANK(A9,$A$1:$A$10) となります。 こうすれば、1~9の数字が重複しないランダム順で取り出せます その2 まず、A1からA9まで =rand() を入れるのは同じです。 次に、B1からB9のセルに、1~9までの数字を入れます。 最後に、A1からB9までを選択して、ツールバーから「データ」->「並び替え」を選び、 「最優先されるキー」でA列を選んでOKすれば1~9がランダム順で並べ変わります 工夫次第で色々できますので、これでは思っていたものと違うという場合には またご質問ください
お礼
ありがとうございました。私には少し難しすぎるようです。:-)
- chie65536
- ベストアンサー率41% (2512/6032)
標準モジュールに以下の関数を作る。 Function rand123() As String Dim str As String Dim i, e, s, l As Integer e = Int(Rnd() * 50) + 50 str = "123456789" For i = 1 To e s = Int(Rnd() * 8) + 1 l = Int(Rnd() * (8 - s)) + 1 str = Mid(str, s, l) & Left(str, s - 1) & Mid(str, s + l, 9) str = Mid(str, s + l, 9) & Mid(str, s, l) & Left(str, s - 1) str = Mid(str, s, l) & Mid(str, s + l, 9) & Left(str, s - 1) Next rand123 = str End Function セルに =rand123() と書けばOK。 そのまま単純に考えると「1~9を1桁づつ重複しないように乱数で出せばよい」と思うが、重複チェックは遅いし難しい。 しかし「1~9が重複しないように並んでいる時に、乱数で順番を入れ替える」のは簡単。 元が「重複してない」なら、どう並び替えた所で「重複してない」のは変わらない。 発想の転換が重要。 他の回答者さんも質問文を良く読んで。質問者さんは、単に「1~9の乱数が欲しい」と言っている訳じゃない。
お礼
ありがとうございます。しかし、ベーッシクでは私には難しすぎる様です。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
「乱数」はかなり本当にランダムなので、質問のように重複せずに 並べることは出来ません。こういうときは乱数をキーにした順位を 使います。X1:X9の範囲に=rand()で乱数を生成し、実際に使用する 場所では A1: =rank(X1,$X$1:$X$9) のようにするわけ。これならよほど運が悪くて全く同じ数値が生成 されない限り、重複した結果は出てきません。
お礼
ありがとうございました。なかなか難しいですね。
- hana-hana3
- ベストアンサー率31% (4940/15541)
=INT(RAND()*9)+1
お礼
この乱数では同じ数が何回か出てくるのです。以前はこうしていました。
- hallo-2007
- ベストアンサー率41% (888/2115)
RNAD関数を使います。以下RAND関数のHelpです。 0 以上で 1 より小さい乱数を発生させます。ワークシートが再計算されるたびに、新しい乱数が返されます。 書式 RAND() 解説 a と b の範囲で乱数を発生させるには、次の数式を使います。 RAND()*(b-a)+a RAND 関数で乱数を発生させた後、ワークシートが再計算されるたびに乱数の値が変更されないようにするには、数式バーに「=RAND()」という数式を入力して F9 キーを押し、数式を計算結果の乱数に置き換えます。 1から9の乱数であれば RAND()*(9-1)+1 でよろしいかと思います。
お礼
ありがとうございました。
お礼
すばらしいです。簡単に出来ました。ありがとうございました。 RANK関数について勉強したいと思います。