dポイントプレゼントキャンペーン実施中!

 エクセルで1から9までの数を順不同に毎回取り出せる関数はどうしたらいいのでしょう。たとえば
 135624897や987456123の様に数字を並べたいと思います。

A 回答 (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を押すと数字が変更します
    • good
    • 0
この回答へのお礼

 すばらしいです。簡単に出来ました。ありがとうございました。
RANK関数について勉強したいと思います。

お礼日時:2008/08/11 16:03

文字列のまま入れ替えをすると遅いので、数値配列の入れ替えに変更してみた。



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

 ありがとうございます。しかし、ベーッシクでは私には難しすぎる様です。

お礼日時:2008/08/11 16:18

次のいずれかの方法でできます。



その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がランダム順で並べ変わります

工夫次第で色々できますので、これでは思っていたものと違うという場合には
またご質問ください
    • good
    • 0
この回答へのお礼

ありがとうございました。私には少し難しすぎるようです。:-)

お礼日時:2008/08/11 16:19

標準モジュールに以下の関数を作る。



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の乱数が欲しい」と言っている訳じゃない。
    • good
    • 0
この回答へのお礼

ありがとうございます。しかし、ベーッシクでは私には難しすぎる様です。

お礼日時:2008/08/11 16:20

「乱数」はかなり本当にランダムなので、質問のように重複せずに


並べることは出来ません。こういうときは乱数をキーにした順位を
使います。X1:X9の範囲に=rand()で乱数を生成し、実際に使用する
場所では

A1: =rank(X1,$X$1:$X$9)

のようにするわけ。これならよほど運が悪くて全く同じ数値が生成
されない限り、重複した結果は出てきません。
    • good
    • 0
この回答へのお礼

 ありがとうございました。なかなか難しいですね。

お礼日時:2008/08/11 16:21

=INT(RAND()*9)+1

    • good
    • 0
この回答へのお礼

 この乱数では同じ数が何回か出てくるのです。以前はこうしていました。

お礼日時:2008/08/11 16:22

RNAD関数を使います。

以下RAND関数のHelpです。

0 以上で 1 より小さい乱数を発生させます。ワークシートが再計算されるたびに、新しい乱数が返されます。
書式
RAND()
解説
a と b の範囲で乱数を発生させるには、次の数式を使います。
RAND()*(b-a)+a

RAND 関数で乱数を発生させた後、ワークシートが再計算されるたびに乱数の値が変更されないようにするには、数式バーに「=RAND()」という数式を入力して F9 キーを押し、数式を計算結果の乱数に置き換えます。

1から9の乱数であれば
RAND()*(9-1)+1 でよろしいかと思います。
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/08/11 16:23

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