- ベストアンサー
指定した範囲の乱数を指定した数だけ発生させたい
5×10のマス計算問題を作りたいのですが、たての5マスには0から9の範囲でダブりのない5つの整数を入れ、よこの10マスには10から19の範囲でだぶりのない10の整数を入れたいとおもいます。 どのようなマクロになりますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
夜遅くに何度もごめんなさい。 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
その他の回答 (5)
(画面幅を広くして読んでください) 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)
お礼
うまくいきました。たいへんありがとうございます。
- hige_082
- ベストアンサー率50% (379/747)
出力先が分らんので、適当に 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
お礼
どういう意味なのかは分かりませんが、バッチリでした。感謝申し上げます。
- tom04
- ベストアンサー率49% (2537/5117)
No.2です! 先ほどの回答では縦が1~5までしか表示されないので 参考にならないと思います。 読み流してください。 どうもごめんなさい!m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか判りませんが・・・ ↓の画像のような感じでいいかと思い、回答します。 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)
http://okwave.jp/qa4926287.html ここの 'Dictionaryの登録数が100になるまでループ 以下で 0~9のうちだぶらない5個と、10~19のうちだぶらない10個を 導くようにすればいいのではないかと? ・・・違うかな。
お礼
どうもありがとうございました。
お礼
素人にも分かりやすく、バッチリ働きます。感謝申し上げます。