
No.8ベストアンサー
- 回答日時:
お望みの特定範囲内の「重複しない」乱数を生成するコードを書きます。
Dim A,B,AA,BB
A:発生させた特定範囲内の乱数
B:目的成果品の数
AA:発生させた特定範囲内の乱数の全て
BB:発生させた特定範囲内の乱数の内、重複していないものの集合(成果品)
AA=""
BB=""
B=0
Do
A=Int(101*Rnd+100)
AA=AA & "\" & A & "/"
IF Instr(AA,"\" & A & "/")=0 Then
BB=BB & "\" & A & "/"
B=B+1
Endif
Loop Until B=10
BBから成果品を取り出す方法又は、成果品の表示方法等はご自身でお考え下さい。
"\""/"はどんな文字列でもOK
No.6
- 回答日時:
回答1の方法がいちばん確実に素早くコタエを引き出せます
簡単な応用:
sub macro1()
worksheets.add
range("B1:B101").formula = "=RAND()"
with range("A1:A10")
.formula = "=RANK(B1,B:B)+99"
.value = .value
end with
range("B:B").clearcontents
end sub
バリエーション:
sub macro2()
worksheets.add
with range("A1:A101")
.formula = "=ROW(A100)"
.value = .value
end with
range("B1:B101").formula = "=RAND()"
range("A:B").sort key1:=range("B1"), header:=xlno
range("A11:A101,B1:B101").clearcontents
end sub
参考:こういうのは条件を厳しくしていくとどんどん脱出できなくなる
sub macro3()
range("A1:A10").formula = "=RANDBETWEEN(100,200)"
range("B1").formula = "=COUNT(1/FREQUENCY(A:A,A:A))"
do until range("B1") = 10
activesheet.calculate
loop
range("A1:A10").value = range("A1:A10").value
end sub
No.5
- 回答日時:
Do
intNum <- ランダムに生成した整数値
If strNum に inuNum が含まれない then
strNum <- sytNum & "," & intNum & ","
N <- N + 1
If N > 9 Then
Exit Do
End If
End If
Loop Until (0)
私ならば、",1,9,8,"と生成した整数を文字列として記憶します。
比較では replace を使い、取り出しにはCutStr関数の類を利用します。
? CutStr(",1,9,8,", ",", 2)
1
? CutStr(",1,9,8,", ",", 3)
9
? CutStr(",1,9,8,", ",", 4)
8
Private Function CutStr(ByVal Text As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim strDatas() As String
strDatas = Split("" & Separator & Text, Separator, , 0)
CutStr = strDatas(N * Abs(N <= UBound(strDatas))))
End Function
No.4
- 回答日時:
No.3
- 回答日時:
No.2は重複しないって条件が抜けてますね。
まあ、重複したら再度でいいと思うのですけどそんなにめんどくさいですかね。
Forじゃなくてwhileでやればあまり悩まないと思いますけど。
どうしてもというなら乱数の範囲を100から99と毎回減らして、既に出た乱数を元にマッピングすればいいと思いますけど、多重ループになってかえってめんどくさいですね。
この回答への補足
乱数の範囲を減らすのではなく、指定範囲の整数でデータベースを作成し、一つとって消す、という方が簡単かもしれませんね(範囲が少なければ、ですが)。
whileとuntilではほぼ同じことができますが、どちらの方が安定性がいいでしょうか。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(UWSC)エクセルのセルの値を読...
-
【マクロ】実行時エラー '424':...
-
エクセルで離れた列を選択して...
-
「段」と「行」の違いがよくわ...
-
マクロの「SaveAs」でエラーが...
-
【Excel関数】UNIQUE関数で"0"...
-
Excelで、あるセルの値に応じて...
-
別ブックをダイアログボックス...
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA シートをコピーする際に Co...
-
IIF関数の使い方
-
Worksheets メソッドは失敗しま...
-
マクロ実行後に別シートの残像...
-
Excel VBAでのWorksheet_Change...
-
VLOOKUPの列番号の最大は?
-
エクセル マクロで数値が変っ...
-
A1に入力された文字列と同じ文...
-
エクセルで昨日までの日付デー...
-
特定の文字がある行以外を削除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(UWSC)エクセルのセルの値を読...
-
MATLABによる整定時間の求め方
-
マクロをご教授お願いします
-
初心者ですがセルの変更につい...
-
DHCPサーバで複数のレンジを指...
-
最大値 最小値
-
VBA-指定した範囲で重複しない...
-
ExcelのVBAで教えてください。 ...
-
エクセルVBAでsheet1!B2:B10ま...
-
IPアドレスを検査する関数
-
VBAでオートフィルができません
-
【Excel2002VBA】Destinationを...
-
【マクロ】実行時エラー '424':...
-
複数のエクセルファイルとシー...
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
Excelで、あるセルの値に応じて...
-
特定の文字がある行以外を削除...
-
Excel UserForm の表示位置
-
【Excel関数】UNIQUE関数で"0"...
おすすめ情報