• ベストアンサー

指定した範囲の乱数を指定した数だけ発生させたい

5×10のマス計算問題を作りたいのですが、たての5マスには0から9の範囲でダブりのない5つの整数を入れ、よこの10マスには10から19の範囲でだぶりのない10の整数を入れたいとおもいます。 どのようなマクロになりますか?

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

夜遅くに何度もごめんなさい。 No.2・3です。 縦の数値0~9までの訂正です。 No.2の表で A3セルに =RAND() として、A12までオートフィルでコピーしてください。 次にB3セル=RANK(A3,$A$3:$A$12)-1 として、B7セルまでオートフィル これで何とか0~9までの数字がランダムに表示されると思います。 尚、作業列のA列と1行目はドラッグして見えなくした方がいいかもしれません。 どうも何度も何度も失礼しました。m(__)m

tarokawa20
質問者

お礼

素人にも分かりやすく、バッチリ働きます。感謝申し上げます。

その他の回答 (5)

noname#204879
noname#204879
回答No.6

(画面幅を広くして読んでください) 0.9794  0  何処かの空いた範囲に左に示す表を作成して、左上隅のセルに 0.7414  1  (例えば)origin という名前を付けておきます。なお、当該 0.8854  2  セルには式 =RAND() を入力して、此れを下方にズズーッとドラッ 0.1497  3  グ&ペーストします。 0.6622  4 0.1535  5  任意のセルに式1を入力して、此れを下方の4セルにドラッグ& 0.9752  6  ペーストすれば、「たての5マスには0から9の範囲でダブりの 0.7109  7  ない5つの整数」が表示されます。 0.2802  8 0.8413  9  任意のセルに式2を入力して、此れを右方の9セルにドラッグ& 0.5487 10  ペーストすれば、「よこの10マスには10から19の範囲でだ 0.4236 11  ぶりのない10の整数」が表示されます。 0.6299 12 0.3820 13  「どのようなマクロになりますか?」と仰る貴方なら、此れをマク 0.6589 14  ロ化するのは“お茶の子”かと。 0.5494 15 0.6504 16 0.8930 17 0.6976 18 0.1771 19 式1: =VLOOKUP(SMALL(OFFSET(origin,,,10),ROW(A1)),OFFSET(origin,,,10,2),2,FALSE) 式2: =VLOOKUP(SMALL(OFFSET(origin,10,,10),COLUMN(A1)),OFFSET(origin,10,,10,2),2,FALSE)

tarokawa20
質問者

お礼

うまくいきました。たいへんありがとうございます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

出力先が分らんので、適当に Sub test() Dim h As Variant, h_t As Variant Dim v As Variant, v_t As Variant Dim i As Integer Dim iNum As Integer i = 0 Do Until i = 5 iNum = Int((9 + 1) * Rnd) If InStr(h_t, iNum) = 0 Then i = i + 1 If h_t = "" Then h_t = iNum Else h_t = h_t & " " & iNum End If End If Loop i = 0 Do Until i = 10 iNum = Int((9 + 1) * Rnd + 10) If InStr(v_t, iNum) = 0 Then i = i + 1 If v_t = "" Then v_t = iNum Else v_t = v_t & " " & iNum End If End If Loop h = Split(h_t) v = Split(v_t) Range("b1:k1") = v Range("a2:a6") = WorksheetFunction.Transpose(h) End Sub

tarokawa20
質問者

お礼

どういう意味なのかは分かりませんが、バッチリでした。感謝申し上げます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 先ほどの回答では縦が1~5までしか表示されないので 参考にならないと思います。 読み流してください。 どうもごめんなさい!m(__)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 参考になるかどうか判りませんが・・・ ↓の画像のような感じでいいかと思い、回答します。 A3セルに=RAND() と入力してA7までオートフィルでコピー (この場合小数点表示桁上げで小数点以下を4~5桁くらいにしておいた方がいいかもしれません) 同様にC1セルも=RAND() としてL1までオートフィル 次にB3セル=RANK(A3,$A$3:$A$7) として同じB7までオートフィルでコピー (この場合も小数点以下4~5桁を表示させておきます) C2セルに=RANK(C1,$C$1:$L$1)+9 でL2までオートフィル (多分####となるかと思いますので、小数点表示桁下げで整数の表示にすればOKかと) 確認の意味でF9キーを何度か押してみてください。 多分重複はしないと思いますが・・・ 以上、無理矢理って感じの回答ですが、参考になれば幸いです。 尚、的外れの回答なら読み流してください。m(__)m

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

http://okwave.jp/qa4926287.html ここの 'Dictionaryの登録数が100になるまでループ 以下で 0~9のうちだぶらない5個と、10~19のうちだぶらない10個を 導くようにすればいいのではないかと? ・・・違うかな。

tarokawa20
質問者

お礼

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

関連するQ&A