変数 重複しない乱数取得

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Private Sub 重複しない乱数取得()
'*************************************
'重複しない乱数取得
'英字を付加したい場合及び数値のみ対応
'数値の範囲指定可能
'任意作成数
'*************************************

Dim RNDADD() As String '←出来た格納変数(グローバル変数へ)

Dim 乱数最低値 As Long, 乱数最高値 As Long
Dim 作成数 As Long
Dim MyValue, a As Long, b As Long, i As Long

乱数最低値 = 1000000: 乱数最高値 = 9999999
作成数 = 10

'英字をつけない場合のエラー回避
If (乱数最高値 - 乱数最低値) + 1 < 作成数 Then
    MsgBox "作成範囲", 0, "ERROR"
Exit Sub
End If

For a = 1 To 作成数
    ReDim Preserve RNDADD(i)
再試行:
    MyValue = Int((乱数最高値 * Rnd) + 乱数最低値)
    '*英字を付加したい場合は↓を追加
    MyValue = ランダム英字取得 & ランダム英字取得 & ランダム英字取得 & MyValue
        For b = LBound(RNDADD) To UBound(RNDADD)
            '作成済みと重複していたら
            If RNDADD(b) = MyValue Then GoTo 再試行:
        Next b
    RNDADD(i) = MyValue
    MsgBox RNDADD(i) '確認用MSG(削除)

    i = i + 1
Next a

End Sub


Private Function ランダム英字取得() As String
'*********************************************
'ランダム英字取得関数
'*********************************************
Dim MyValue, str(26) As String
MyValue = Int((26 * Rnd) + 1)
    str(1) = "a":  str(9) = "i": str(17) = "q": str(25) = "y"
    str(2) = "b": str(10) = "j": str(18) = "r": str(26) = "z"
    str(3) = "c": str(11) = "k": str(19) = "s"
    str(4) = "d": str(12) = "l": str(20) = "t"
    str(5) = "e": str(13) = "m": str(21) = "u"
    str(6) = "f": str(14) = "n": str(22) = "v"
    str(7) = "g": str(15) = "o": str(23) = "w"
    str(8) = "h": str(16) = "p": str(24) = "x"
ランダム英字取得 = str(MyValue)
End Function


Private Sub test1()
    MsgBox ランダム英字取得
End Sub

 

 

 

2000年01月01日|[VBサンプルコード]:[変数]