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

エクセルで縦10×横10の計100マスで、1から100までの数字(数字の重複なし)で乱数表を作るにはどうすれば良いか。

A 回答 (12件中1~10件)

A列に行1から行100までに0の数字を入力しておく。



各マスには、1~100の乱数を発生させ、A列のその行の数字が0なら、その値を入れて、A列の数字を1にする。
A列の数字が1なら、もう一度乱数を発生させる。

最後の方は時間がかかりますが、これでできると思います。

もっと工夫をすることができますが・・・。
    • good
    • 0
この回答へのお礼

chokipar様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:06

こんにちは


すべてのセルに
=RAND()
を入力。これですべてのセルに0~1の乱数が入力されました。(ここではA1:J10としておきます。)
次に別の場所に
=RANK(A1,$A$1:$J$10)
と入力し、同じく10X10セル分ドラッグすればそのセルの順番が、1~100まで出せます。
注意点
1、理論的に数値が重複することがあるのかもしれないですが(よくわかりません)、100マス程度では問題ないかと思います。
2、ほかのセルを触るごとに数値が自動計算されるのがうっとうしい。(意味がわからないと思いますが、やってみればわかります)
    • good
    • 0
この回答へのお礼

POKIE様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:07

1. A1~A100に1~100の数字を入力


2. B1~B100に"=rand()"を入力
3. B1~B100をコピーしてC1~C100に「形式を選択して貼り付け」で値のみ貼り付け。
4. C列で並び替え

これでA列がランダムに並ぶ。あとは100x100の表に貼りつける。再計算すればB列の値が変わるのでふたたび3,4を行えばいくらでも表が作れる。3と4の手順をマクロで登録しておくと便利。

VBAが使えればもっとスマートになるけどね。
    • good
    • 0
この回答へのお礼

masapee様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事、完璧に、解決いたしました。さすがです。すばらしいです。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:10

A1:A100に1から100まで入力する。


B1:B100にはすべて0.01を入力する(発生確率です)
この準備をしてツール-分析ツール-乱数発生を使います。
分布のボックスで離散を選び、値と確率の範囲を先のA1:B100にすればいいです。
出力範囲はあなたの好きな10行10列の100個のセルを指定します。
    • good
    • 0
この回答へのお礼

tresbien様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:11

#3です。

間違いがありました。

> あとは100x100の表に貼りつける。
10x10の表でした。

ちなみに#3のやりかただと値が重複することはありません。
    • good
    • 0

No4です


ごめんなさい。上手くいかないですね。
値が重複します。
    • good
    • 0

エクセル 100マス計算


で検索してみました

http://www.google.com/search?sourceid=navclient& …
    • good
    • 0
この回答へのお礼

harukabcde様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:12

VBAでのソース例です。



Private Sub 乱数()
Dim rIdx As Integer
Dim cIdx As Integer
Dim rRnd As Integer
Dim cRnd As Integer
Dim pivN As Integer
For rIdx = 1 To 10: For cIdx = 1 To 10
Cells(rIdx, cIdx).Value = cIdx + (rIdx - 1) * 10
Next: Next
For rIdx = 1 To 10: For cIdx = 1 To 10
rRnd = Int(Rnd * 10) + 1
cRnd = Int(Rnd * 10) + 1
pivN = Cells(rIdx, cIdx).Value
Cells(rIdx, cIdx).Value = Cells(rRnd, cRnd).Value
Cells(rRnd, cRnd).Value = pivN
Next: Next
End Sub
    • good
    • 0
この回答へのお礼

kigoshi様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。

お礼日時:2005/02/27 18:14

VBAでやるのが簡単です。

以下は重複の無い乱数発生のVBAサンプルです。

【手順】
1. [Alt]+[F11]で Visual Basic Editor(以下VBE)起動
2. [挿入]-[標準モジュール]クリック
3. 下記VBAコードをコピー&ペースト
4. VBEを閉じる
5. [ツール]-[マクロ]-[マクロ]で実行

【VBAコード】(次行から終わりまで)

'10×10の重複しない乱数表
Sub Sample()

  Dim NumberBuf%(1 To 10, 1 To 10)
  Dim intNum%, i%, j%, ItemNum%
  Dim tmpBuf
  Dim Dic As Object

  'Dictionaryオブジェクト生成
  Set Dic = CreateObject("Scripting.Dictionary")
  'Dictionaryの登録数が100になるまでループ
  Do Until Dic.Count = 100
    '1~100までの整数で乱数発生
    intNum = Int((100 * Rnd) + 1)
    'Dictionaryに登録されているか?
    If Not Dic.Exists(intNum) Then
      '登録されていなければ追加
      Dic.Add Key:=intNum, Item:=Empty
    End If
  Loop
  tmpBuf = Dic.Keys
  '乱数を10×10の配列に代入
  ItemNum = 0
  For i = 1 To 10
    For j = 1 To 10
       NumberBuf(i, j) = tmpBuf(ItemNum)
       ItemNum = ItemNum + 1
    Next j
  Next i
  '転記先を変えるにはRange("A1")のA1の部分を変更
  '10×10のセル範囲左上角のセルになります
  Range("A1").Resize(10, 10).Value = NumberBuf

End Sub
    • good
    • 1
この回答へのお礼

KENKENSP様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事、完全に解決いたしました。さすがでございます。恐れ入りました。ご教授に心から深く深く感謝申し上げます。

お礼日時:2005/02/27 18:16

なんだかVBAが盛り上がってきたみたいなので自分も書いちゃいます。

考え方としては

1. 配列に1~100を順番に入れておく
順番に入れておくので重複はあり得ない。したがって重複チェックは必要ない。重複チェックをすると後にいくほどretryが増えるので時間がかかります。

2. 配列の2要素の値を入れ換える
配列のm番目とn番目の値を入れ換える。mとnはRnd関数で決める。たまたまmとnが同じでもエラーにはならない(同じ値を代入するだけなので)。

3. 配列の値をA1のセルから順番に入れていく

実際に書くとこんな感じ。でもExcel持ってないので確認できない。細かいところで間違ってるかも(考え方はいいと思う)。

Private Sub make_table()
 Dim numbers(100) As Integer
 Dim swapindex(2) As Integer
 Dim tmpval As Integer
 Dim i As Integer
 Const SHUFFLE_TIME = 1000 ' シャッフルする回数(この値は適当に決める)

 ' 配列numbersに1から100までの数値をいれる(この時点では順番どおり)
 For i = 0 to 99
  numbers(i) = i + 1
 Next

 ' 配列の値をSHUFFLE_TIMEの回数入れ換える
 For i = 1 to SHUFFLE_TIME_time
  swapindex(0) = numbers(Int(Rnd * 100))
  swapindex(1) = numbers(Int(Rnd * 100))
  tmpvalue = numbers(swapindex(0))
  numbers(swapindex(0)) = numbers(swapindex(1))
  numbers(swapindex(1)) = tmpvalue
 Next

 ' 配列の値を順番にセルに入れる(ここではA1から右に続くようにした)
 For i = 0 to 99
  Cells(((i \ 10) + 1), ((i mod 10) + 1)).Value = numbers(i)
 Next
End Sub
    • good
    • 0

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