Rnd()
席替えの時や、クジを作成する場合、任意の数値間の値をランダムに並べたい事があります。そのような時に利用できるコードを紹介します。
・セル[A1]~[A…]に書き出します。
・紹介するコードは「1」「40」までの整数値をランダムに取得し、書き出します。
Sub Rand_1() '任意の最小値と最大値間の値をランダムに表示する。 Const conMin As Long = 1 '最小値(1以上、最大値以下の整数) Const conMax As Long = 40 '最大値(1以上、最小値以上の整数) '-------------------------- Dim lngRnd As Long Dim lngCount As Long Dim lngValue() As Long Dim bolFlg() As Boolean Dim varData As Variant Randomize lngCount = conMin ReDim bolFlg(conMin To conMax) ReDim lngValue(conMin To conMax) ReDim varData(conMin To conMax, 1 To 1) Do lngRnd = Int((conMax - conMin + 1) * Rnd()) + conMin '乱数取得 If bolFlg(lngRnd) = False Then bolFlg(lngRnd) = True lngValue(lngCount) = lngRnd lngCount = lngCount + 1 If conMax < lngCount Then Exit Do End If Loop For lngCount = conMin To conMax varData(lngCount, 1) = lngValue(lngCount) Next With Application .ScreenUpdating = False .Range(.Cells(1, 1), .Cells(conMax - conMin + 1, 1)).Value = varData .ScreenUpdating = True End With End Sub
「最小値」・・・任意の数値間の最小値。「1」以上で、最大値以下の整数を設定します。
「最大値」・・・任意の数値間の最大値。「1」以上で、最小値以上の整数を設定します。
ただ単に、任意の数値間のランダムな整数値を取得する時に利用するコードです。
・セル[A1]に、-10~10の間のランダムな整数値を書き出します。
Sub Get_Rnd() Const MaxNum As Long = 10 '最大値 Const MinNum As Long = -10 '最小値 Const conRange As String = "A1" '書き出しセル '--------------------------------------------------- If MaxNum < MinNum Then Exit Sub Randomize Range(conRange).Value = Int(Rnd() * (MaxNum - MinNum + 1) + MinNum) End Sub
「最小値」・・・任意の値の最小値。最大値以下の整数値。
「最大値」・・・任意の値の最大値。最小値以上の整数値。
「書き出しセル」・・・結果を書き出すセル
マイナスの値の設定も可能です。
最小値が最大値より大きい場合は、このコードは実行されません。