• ベストアンサー

1から9までの乱数

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

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

>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を押すと数字が変更します

papabeatles
質問者

お礼

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

その他の回答 (6)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.7

文字列のまま入れ替えをすると遅いので、数値配列の入れ替えに変更してみた。 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

papabeatles
質問者

お礼

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

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.5

次のいずれかの方法でできます。 その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がランダム順で並べ変わります 工夫次第で色々できますので、これでは思っていたものと違うという場合には またご質問ください

papabeatles
質問者

お礼

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

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

標準モジュールに以下の関数を作る。 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の乱数が欲しい」と言っている訳じゃない。

papabeatles
質問者

お礼

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

回答No.3

「乱数」はかなり本当にランダムなので、質問のように重複せずに 並べることは出来ません。こういうときは乱数をキーにした順位を 使います。X1:X9の範囲に=rand()で乱数を生成し、実際に使用する 場所では A1: =rank(X1,$X$1:$X$9) のようにするわけ。これならよほど運が悪くて全く同じ数値が生成 されない限り、重複した結果は出てきません。

papabeatles
質問者

お礼

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

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

=INT(RAND()*9)+1

papabeatles
質問者

お礼

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

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

RNAD関数を使います。以下RAND関数のHelpです。 0 以上で 1 より小さい乱数を発生させます。ワークシートが再計算されるたびに、新しい乱数が返されます。 書式 RAND() 解説 a と b の範囲で乱数を発生させるには、次の数式を使います。 RAND()*(b-a)+a RAND 関数で乱数を発生させた後、ワークシートが再計算されるたびに乱数の値が変更されないようにするには、数式バーに「=RAND()」という数式を入力して F9 キーを押し、数式を計算結果の乱数に置き換えます。 1から9の乱数であれば RAND()*(9-1)+1 でよろしいかと思います。

papabeatles
質問者

お礼

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

関連するQ&A

  • 乱数みたいに

    1から40までの数を順不同で出したいのです。 RAND関数だと重なりができてしまいますよね。 それなしで、なにかよい関数・方法はございますでしょうか。 かつ、それを40通り作りたいのです。 きっとIF関数とかを使うのでしょうが、私は思い浮かばないのです。 お願いいたします!

  • (EXCEL関数)特定範囲内の最大値

    いろいろと調べてみましたが、思うようなものがないため質問させていただきます。 EXCELのA列に順不同で5桁の数字がならんでいます。     A 1  (関数) 2  00001 3  90124 4  12452     : 「A1」にA列の最大値を求める関数を入れたいのですが、60400以下の最大値を求めたいのです。 =MAX(A2:A10)<=60400 だと、「False」になってしまいます。 すいませんがよろしくお願いします。

  • エクセルで「1~15」の乱数表を作りたい。

    エクセルで、「1」から「15」までの15種類の数字を使ってランダムの数列表を作りたいのですが、どのようにすればできますか? その際、各数字はそれぞれ1個ずつ、一つのセルに入れるものとします。重複しても構いません。 例えば「7」「2」「9」「13」「2」「4」「1」「9」・・・でもOKです。 また、同じ数字が連続するケースの発生もOKです。 例えば、「3」「8」「14」「6」「6」「5」「7」・・・でもOKです。2連続だけでなく、3連続もOKです。 要は「1~15の数字のランダムな出現による乱数表」が作成できればいいのです。 表の範囲は「A7~IV200」までです。 PCの初心者ですので、詳しく丁寧に教えて頂ければ有り難いです。 例えば次のように・・・。 1.・・・・・・・・・ 2.・・・・・・・・・・・・ 3.・・・・・・・・ 4.・・・・・・・・・・・・・・ 5.・・・・・・・・・ と、いう風に、順を追ってウィザード風に書いて頂ければ・・・と思います。 PCやエクセルや関数に詳しい方、宜しくお願いいたします。

  • Excelで文字列を独自の二進数で表したい。

    A,B,C,D,Eのいずれかを含む文字が順不同でセルに入っているものから、 A=10000 B=1000 C=100 D=10 E=1 と置換して足した、二進数であらわしたり、逆にその二進数から文字列に戻したりしたいです。 (例:DAなら10010、EBCなら1101) VBAの自作関数を含めてExcelの関数でできる方法があればお教えくださると助かります。

  • Excelで 同じ数を二つの列から探す

    こんにちは。 二つの列にそれぞれ、順不同で数字がならんでいます。 片方からもう片方の列に同じ数字があるかどうかをチェックしたいのですが、良い関数はないでしょうか? 一対一対応ではないので、いくつかエラーがでるかもしれませんが、目視で見直します。全部を目視確認すると大変なので、良い方法があったら教えてください。 よろしくお願いします。

  • 乱数って・・・

     乱数は毎回同じ数字がでるようですが・・・どのように決めているのですか? ※Randomize をいれると毎回変わることは知っています

  • エクセルで3ケタの乱数

    今度くじ引き大会をするのに3ケタの数字を250名ほどに配りたいのですが、それぞれの数字が重複なくかつ各桁数の数字が重複しないで乱数をエクセルで生成する方法を教えてください。(例えば、101,221,199などは除外したいです) RAND,RANDBETWEEN関数を使ってみましたが、重複してしまうし、221などのような各桁で数字が重複してしまうものができてしまうのでうまくいきません。 よろしくお願いします。

  • エクセルの乱数発生についてお尋ねします。

    rand()のような関数のファミリーを使うと乱数が発生できます。 そこで、ある程度広がりを持ったシート内に乱数を発生させました。 それは満足していますが、マウスで処理をしたり、何かをアクティブにしたり非アクティブにしたりする操作をすると、乱数が毎回発生してしまいます。シートの数字がパッと変わるのです。 乱数を発生させるタイミングがコントロールできていないわけですが、どのように考えたらいいでしょうか。1回乱数を発生させたら固定したままで、”では、ここで乱数を発生させる”というコマンドの出し方なのですが。エクセルではどうしたらいいでしょうか。

  • エクセル関数=INFO("numfile")

    エクセル・シート数をカウントする関数=INFO("numfile")について。 エクセルで1book内にsheetが複数あり、1式の書類なので、ページ数を●/○という形にしています。 ●・・・シート名を表示させる関数、 ○・・・シート数をカウントする関数=INFO("numfile") を使用していますが、 シートの数は全部で6枚しかないのに、 ●には6ではない数字が返ってきます。 なぜ起こるのか謎の解明はできませんでしたが、 =INFO("numfile")-△ といった具合で対応してみたところ、 毎回、エクセルを立ち上げると●で返ってくる数字は可変しているようで、 毎回-△ を打ち直さないといけない状態で、困っています。 この現象は何で起こるのか、対処方法等ご存知の方がいらっしゃいましたら 教えてください>< 使用OS:win7 エクセルver:2010

  • エクセルで、乱数の関数 同じ数が無いように

    乱数を発生させる関数で、RAND関数は、小数点(0~1の間)で、RANDBETWEEN関数は整数で出るとのことですが、RANDBETWEEN関数は同じ数字がいくつか重複して出ます。整数で同じ数が出ないようにする関数はないでしょうか?

専門家に質問してみよう