変数 重複しない乱数取得

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][変数 重複しない乱数取得]
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






Production Japan Import Application. Since 1998