ランダムな文字列を作成

指定した文字数でランダムな文字列を作成する。

数字、英字(大文字・小文字)、記号から指定した文字数のランダムな文字列を作成します。

ランダムな文字列の作成には主に以下の関数、ステートメントを利用しています。
 ・Rnd関数:擬似乱数を含む単精度浮動小数点型 の値を取得します。
 ・Randomizeステートメント:乱数ジェネレーターを初期化します。
 ・Chr関数:指定した文字コードに対応する文字を取得します。

ランダムな1文字の取得にはChr関数の引数に取得した乱数を指定して取得しています。発生させる文字は数字、英字(大文字・小文字)、記号を利用するのでChr関数の引数には48~122の範囲の数字を使うことになります。
この数値はランダムな文字列を作成するパターンによって利用する範囲が変わります。
※数値だけでランダムな文字列を作成したい場合は、48~57の範囲で乱数を発生させることになります。
指定の範囲の数値でランダムな整数の取得には下記の式を使用しています。
  式: Int( (指定範囲の最大値 – 指定範囲の最小値 + 1) *Rnd() + 指定範囲の最小値)

サンプルコードでは下記のパターンで30文字のランダムな文字列を作成しています。
 ・数字のみ
 ・英字(大・小文字)のみ
 ・数字+英字(大文字のみ)
 ・数字+英字(大・小文字)
 ・数字+英字(大・小文字)+記号

'******************************************************************
' ランダムな文字列の作成
'******************************************************************
Sub Main_RandomStrings()
    
    '生成する文字列の長さを指定する
    Dim iLength As Integer
    iLength = 30   '30文字を指定

    Dim iChr As Integer
    Dim sRtn As String
    '----------------------------------------
    '数字のみ
    sRtn = ""
    Do Until Len(sRtn) >= iLength
        iChr = getRndScope(48, 57)
        sRtn = sRtn & Chr(iChr)
    Loop

    Debug.Print "[数字のみ]"
    Debug.Print sRtn

    '----------------------------------------
    '英字(大・小文字)のみ
    sRtn = ""
    Do Until Len(sRtn) >= iLength
        iChr = getRndScope(65, 122)
        Select Case iChr
        Case 65 To 90, 97 To 122
            sRtn = sRtn & Chr(iChr)
        End Select
    Loop
    Debug.Print
    Debug.Print "[英字(大・小文字)のみ]"
    Debug.Print sRtn
    
    '----------------------------------------
    '数字+英字(大文字のみ)
    sRtn = ""
    Do Until Len(sRtn) >= iLength
        iChr = getRndScope(48, 90)
        Select Case iChr
        Case 48 To 57, 65 To 90
            sRtn = sRtn & Chr(iChr)
        End Select
    Loop
    Debug.Print
    Debug.Print "[数字+英字(大文字のみ)]"
    Debug.Print sRtn

    '----------------------------------------
    '数字+英字(大・小文字)
    sRtn = ""
    Do Until Len(sRtn) >= iLength
        iChr = getRndScope(48, 122)
        Select Case iChr
        Case 48 To 57, 65 To 90, 97 To 122
            sRtn = sRtn & Chr(iChr)
        End Select
    Loop
    
    Debug.Print
    Debug.Print "[数字+英字(大・小文字)]"
    Debug.Print sRtn

    '----------------------------------------
    '数字+英字(大・小文字)+記号
    sRtn = ""
    Do Until Len(sRtn) >= iLength
        iChr = getRndScope(48, 122)
        sRtn = sRtn & Chr(iChr)
    Loop
    
    Debug.Print
    Debug.Print "[数字+英字(大・小文字)+記号]"
    Debug.Print sRtn
    
End Sub
 
'******************************************************************
' 指定した範囲の数値を乱数で作成
'------------------------------------------------------------------
'  第1引数:乱数を発生させる範囲の最小値
'  第2引数:乱数を発生させる範囲の最大値
'------------------------------------------------------------------
'  戻り値 :乱数値
'******************************************************************
Function getRndScope(lMinNum As Long, lMaxNum As Long) As Integer
    Dim iRtn As Integer
    Randomize
    iRtn = Int((lMaxNum - lMinNum + 1) * Rnd() + lMinNum)
    getRndScope = iRtn
End Function

 ■実行結果