【Excel VBA】ランダムな英数記号の文字列を作成する方法

スポンサーリンク

Excelでパスワードジェネレータのように、ランダムなパスワードを生成したいと思ったことはありませんか?

Excel VBAでランダムな英数記号の文字列を作成する方法を説明していきます。

コード

関数コード

ランダムな英数記号を作成する関数です。

引数に応じて出力する文字を数字、大文字英字、小文字英字、記号から設定可能です。何も指定しない場合は全文字が指定されます。

仕組みとしては、RandBetween関数を利用してランダムなASCIIコードを生成し、Chr関数で文字に変換することで実現しています。

''' <summary>
''' ランダムな英数記号の文字列を作成する
''' </summary>
''' <param name="strLen">文字数</param>
''' <param name="numFlag">数値有無</param>
''' <param name="upperFlag">大文字英字有無</param>
''' <param name="lowerFlag">小文字英字有無</param>
''' <param name="symFlag">記号有無</param>
''' <returns>文字列</returns>
Public Function RandStr(ByVal strLen As Long, Optional numFlag As Boolean = True, _
Optional upperFlag As Boolean = True, Optional lowerFlag As Boolean = True, Optional symFlag As Boolean = True)
    Dim rtn() As String: ReDim rtn(strLen - 1)
    Dim i As Long
    For i = 0 To UBound(rtn)
        With WorksheetFunction
Retry:
            Select Case .RandBetween(0, 3)
            Case 0
                '数字
                If Not numFlag Then GoTo Retry
                rtn(i) = Chr(.RandBetween(48, 57))
            Case 1
                '大文字英字
                If Not upperFlag Then GoTo Retry
                rtn(i) = Chr(.RandBetween(65, 90))
            Case 2
                '子文字英字
                 If Not lowerFlag Then GoTo Retry
                 rtn(i) = Chr(.RandBetween(97, 122))
             Case 3
                 '記号
                If Not symFlag Then GoTo Retry
                Select Case .RandBetween(0, 4)
                Case 0
                    '記号("!"~” /”)
                    rtn(i) = Chr(.RandBetween(33, 47))
                Case 1
                    '記号(":"~”@”)
                    rtn(i) = Chr(.RandBetween(58, 64))
                Case 2
                    '記号("["~”`”)
                    rtn(i) = Chr(.RandBetween(91, 96))
                Case 3
                    '記号("{"~”~”)
                    rtn(i) = Chr(.RandBetween(123, 126))
                Case 4
                    '記号("{"。”・”)
                    rtn(i) = Chr(.RandBetween(161, 165))
                End Select
            End Select
        End With
    Next
    '返却
    RandStr = Join(rtn, "")
End Function

サンプルコード

上記の関数を呼び出して10文字のランダムな文字列を生成するコードです。

英数記号、英数、数字の順でイミディエイトウィンドウに出力します。

Public Sub Sample()
    Debug.Print RandStr(10)
    Debug.Print RandStr(10, symFlag:=False)
    Debug.Print RandStr(10, upperFlag:=False, lowerFlag:=False, symFlag:=False)
End Sub
タイトルとURLをコピーしました