
No.9ベストアンサー
- 回答日時:
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
KENKENSP様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事、完全に解決いたしました。さすがでございます。恐れ入りました。ご教授に心から深く深く感謝申し上げます。
No.12
- 回答日時:
乱数を作る方法で、(重複する値を最初から排除するために)よく値を交換する方法がでてくるけど、
一般的には、交換する方法では均等な乱数が得られない。
例えば、
A,B,Cという3つの値が有った時に、
交換元の値をランダムに3つから1つ選び
交換先の値をランダムに3つから1つ選んだとすると
交換される組み合わせは全てで9通りある。
ところが、A,B,C3つを並べる組み合わせは6通りだから交換の結果は均等な結果にならない。
参考までに。
BLUEPIXY様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。
No.10
- 回答日時:
なんだか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
No.8
- 回答日時:
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
kigoshi様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。
No.7
- 回答日時:
harukabcde様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事解決いたしました。ご教授に深く感謝申し上げます。
No.3
- 回答日時:
1. A1~A100に1~100の数字を入力
2. B1~B100に"=rand()"を入力
3. B1~B100をコピーしてC1~C100に「形式を選択して貼り付け」で値のみ貼り付け。
4. C列で並び替え
これでA列がランダムに並ぶ。あとは100x100の表に貼りつける。再計算すればB列の値が変わるのでふたたび3,4を行えばいくらでも表が作れる。3と4の手順をマクロで登録しておくと便利。
VBAが使えればもっとスマートになるけどね。
masapee様、このたびは愚問にもかかわらずご丁寧にご返答頂きまことにありがとうございました。おかげ様で問題は無事、完璧に、解決いたしました。さすがです。すばらしいです。ご教授に深く感謝申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
風俗店へ行く前のご飯
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
血液検査の結果が悪くefgrの値...
-
2つの数値のうち、数値が小さい...
-
勃起する時って痛いんですか? ...
-
男性に質問 お尻の穴を見せた...
-
汚い話ですみません。 検便って...
-
イタリアから帰国する際、肉製...
-
ラブホってバスタオルが2枚ある...
-
excel関数で TRUEやFALSEについて
-
精液の落とし方を教えてください
-
この赤い斑点は何でしょうか。 ...
-
足がまだら模様になります。ど...
-
エクセルでθを求めたい。
-
病院側から早く来てくださいと...
-
excelでsin二乗のやり方を教え...
-
透亮像について。 先日会社の健...
-
中学三年 ちんこが小さいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報