EXCEL VBA パスワードの自動生成・ランダムパスワードの生成(テクニック)

EXCEL VBA パスワードの自動生成・ランダムパスワードの生成(テクニック)

 

●はじめに

会社の業務で色々なアプリケーションソフトなどを利用すると思いますが、その時に、アプリケーションソフト毎に、パスワードを作成すると思いますが、作成するパスワードが数名(1~10名)程度なら、自分で作成すれば良いが、数十・数百人程度、パスワードを作成するとなると、手動作成では、大変なのでVBAプログラムを利用してパスワードを自動生成すると簡単かつ効率よく作成する事ができます。今回は、サンプルプログラムとして3パターン作成しました。8文字以上・英文字(大文字・小文字)数値の組み合わせで作成できるサンプルプログラムも下記に作成してありますので、会社でも利用できると思います。それでは、順番に説明いたします。

 

EXCEL VBA パスワードの自動生成・ランダムパスワードの生成(数値のみ:パスワードの桁数設定)

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、各ユーザーに指定した桁数での数値でのパスワードを自動作成するサンプルプログラムです。

 

Sub Password01()  '指定する桁数の数値でパスワードを作成
    
    Dim I, lRow, Keta, Hani, Pass_int As Long
    Dim SetZero As String
        
    Keta = Application.InputBox(Prompt:="数値で入力", Title:="パスワードの桁数を入力", Default:=1, Left:=100, Top:=200, Type:=1)
      '自動設定するパスワードの桁数を数値で設定します。 InputBoxメゾット設定します。(戻り値をType:=1 数値に設定)
    
    lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得(パスワード作成する件数を把握する)
    

    For I = 1 To Keta    'パスワードを数値化する時に使用する”0 ”の桁数を作成します。
            SetZero = SetZero & "0"
    Next I
    
    
    Hani = 10 ^ Keta  '生成するパスワード範囲を桁数に応じて計算します。
    

    For I = 2 To lRow  'A列の最終行の件数分パスワードを生成する。
        Do
            Pass_int = WorksheetFunction.RandBetween(1, Hani)    'パスワードの数値を生成する
        Loop While Pass_int >= Hani  '生成したパスワードの数値が範囲内か判定します。(範囲外なら再度パスワード生成)
    
        Range("D" & I).Value = Format(Pass_int, SetZero) '数値のパスワードを文字列化して、指定したパスワードの桁数を併せる。
    
    Next

    MsgBox lRow - 1 & "名分のパスワードを作成しました。"

End Sub

 

 

●実行前~実行後 ※プログラム実行後、InputBoxで指定した桁数に応じで各ユーザーに数値パスワードが自動生成されました。

 

 

EXCEL VBA パスワードの自動生成・ランダムパスワードの生成(文字列4+数値4:合計8文字パスワードの生成)

 

●プログラム説明  (サンプル②)

下記のサンプルプログラムは、各ユーザーにランダムパスワードを生成しますが、生成パスワードは、文字列4文字+数値4文字:合計8文字のパスワードを自動生成します。(8文字以上3種類文字列の組み合わせにより、強固なパスワードが作成されます。)

 

 

Sub Password02()  '文字列との組み合わせのパスワード(文字列4+数値4)
    
    Dim I, L, lRow, Mojisuu, Hani, Pass_int As Long
    Dim Pass_Moji, Pass_Str, Pass_Set As String
    
    lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得(パスワード作成する件数を把握する)
    
    Pass_Moji = "ABCDEFGIHJKLMNOPQRSTUVXXYZabcdefghijklmnopqrstuvwxyz"
    
    Mojisuu = Len(Pass_Moji) 'Pass_Mojiの文字列数をカウント
    
    
    For I = 2 To lRow '最終行までループ(全員分)
        
        '-----------文字列4桁パスワード生成
        
        Pass_Str = "" '文字列クリアー
    
        For L = 1 To 4  'パスワードの文字列4文字分生成(英文字)
        
            Pass_int = WorksheetFunction.RandBetween(1, Mojisuu) '文字列の範囲をランダム生成
            Pass_Set = Mid(Pass_Moji, Pass_int, 1) 'ランダムの文字列を1文字抜き出す
            
            Pass_Str = Pass_Str + Pass_Set  'ランダムで抜き出した文字を1文字結合する。
        
        Next L
        
        
        '------------数値4桁パスワード生成
        
        Pass_int = WorksheetFunction.RandBetween(1, 9999)    'パスワードの数値を生成する(1~9999)の範囲
    
        Range("D" & I).NumberFormatLocal = "@" 'パスワードを記入するセルを文字列書式に設定
        Range("D" & I).Value = Pass_Str & Format(Pass_int, "0000") '文字列パスワードと数値のパスワードを結合してセルに転記する。
                                                                    '数値は文字列4桁にする0001~9999)
    Next I
      
    MsgBox lRow - 1 & "名分のパスワードを作成しました。"

End Sub


 

 

●実行前~実行後 ※プログラム実行後、英文字(大文字・小文字)4文字+数値4文字の組み合わせのパスワードが生成されました。

 

EXCEL VBA パスワードの自動生成・ランダムパスワードの生成(8文字パスワードの読み方も生成)

 

●プログラム説明 (サンプル③)

下記のサンプルプログラムは、サンプル②を応用したサンプルプログラムになります。各ユーザーにランダムパスワードを生成しますが、パスワード生成しパスワードの読み方も一緒に表示されます。パスワードは、ランダムで作成されていますので、文字を見間違える事がありますので、各ユーザーにパスワードを配布する際に、パスワードと一緒に読み方付けると分かり易くなります。

 

 

Sub Password03() '文字列との組み合わせのパスワード(文字列4+数値4) 読み方を追加

    
    Dim I, L, E, lRow, Mojisuu, Hani, Pass_int As Long
    Dim Pass_Moji, Pass_Str, Pass_Set As String
    
    lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得(パスワード作成する件数を把握する)
    
    Pass_Moji = "ABCDEFGIHJKLMNOPQRSTUVXXYZabcdefghijklmnopqrstuvwxyz"
    
    Mojisuu = Len(Pass_Moji) 'Pass_Mojiの文字列数をカウント
    
    
    For I = 2 To lRow '最終行までループ(全員分)
        
        '-----------文字列4桁パスワード生成
        
        Pass_Str = "" '文字列クリアー
    
        For L = 1 To 4  'パスワードの文字列4文字分生成(英文字)
        
            Pass_int = WorksheetFunction.RandBetween(1, Mojisuu) '文字列の範囲をランダム生成
            Pass_Set = Mid(Pass_Moji, Pass_int, 1) 'ランダムの文字列を1文字抜き出す
            
            Pass_Str = Pass_Str + Pass_Set  'ランダムで抜き出した文字を1文字結合する。
        
        Next L
        
        
        '------------数値4桁パスワード生成
        
        Pass_int = WorksheetFunction.RandBetween(1, 9999)    'パスワードの数値を生成する(1~9999)の範囲
    
        Range("D" & I).NumberFormatLocal = "@" 'パスワードを記入するセルを文字列書式に設定
        Range("D" & I).Value = Pass_Str & Format(Pass_int, "0000") '文字列パスワードと数値のパスワードを結合してセルに転記する。
                                                                    '数値は文字列4桁にする0001~9999)
    Next I
      
        '-----------生成したパスワードの読み方を作成します。
      
     For I = 2 To lRow '最終行までループ(全員分)
      
        Pass_Set = ""  '生成する読み方(文字列)をクリアー
        
        E = Len(Range("D" & I)) '生成された文字列の文字数をEに代入
        

        For L = 1 To E  'パスワードの文字列分ループ(8回)

            Pass_Str = Mid(Range("D" & I), L, 1)  'パスワード文字の左側から1文字分取り出します。
            
            Select Case Pass_Str  '取り出した1文字分を該当文字と検索します。
                Case "a": Pass_Str = "えー"
                Case "b": Pass_Str = "びー"
                Case "c": Pass_Str = "しー"
                Case "d": Pass_Str = "でぃー"
                Case "e": Pass_Str = "いー"
                Case "f": Pass_Str = "えふ"
                Case "g": Pass_Str = "じー"
                Case "h": Pass_Str = "えっち"
                Case "i": Pass_Str = "あい"
                Case "j": Pass_Str = "じぇい"
                Case "k": Pass_Str = "けー"
                Case "l": Pass_Str = "える"
                Case "m": Pass_Str = "えむ"
                Case "n": Pass_Str = "えぬ"
                Case "o": Pass_Str = "おー"
                Case "p": Pass_Str = "ぴー"
                Case "q": Pass_Str = "きゅー"
                Case "r": Pass_Str = "あーる"
                Case "s": Pass_Str = "えす"
                Case "t": Pass_Str = "てぃー"
                Case "u": Pass_Str = "ゆー"
                Case "v": Pass_Str = "ぶい"
                Case "w": Pass_Str = "だぶりゅー"
                Case "x": Pass_Str = "えっくす"
                Case "y": Pass_Str = "わい"
                Case "z": Pass_Str = "ぜっと"
                Case "A": Pass_Str = "(大)えー"
                Case "B": Pass_Str = "(大)びー"
                Case "C": Pass_Str = "(大)しー"
                Case "D": Pass_Str = "(大)でぃー"
                Case "E": Pass_Str = "(大)いー"
                Case "F": Pass_Str = "(大)えふ"
                Case "G": Pass_Str = "(大)じー"
                Case "H": Pass_Str = "(大)えっち"
                Case "I": Pass_Str = "(大)あい"
                Case "J": Pass_Str = "(大)じぇい"
                Case "K": Pass_Str = "(大)けー"
                Case "L": Pass_Str = "(大)える"
                Case "M": Pass_Str = "(大)えむ"
                Case "N": Pass_Str = "(大)えぬ"
                Case "O": Pass_Str = "(大)おー"
                Case "P": Pass_Str = "(大)ぴー"
                Case "Q": Pass_Str = "(大)きゅー"
                Case "R": Pass_Str = "(大)あーる"
                Case "S": Pass_Str = "(大)えす"
                Case "T": Pass_Str = "(大)てぃー"
                Case "U": Pass_Str = "(大)ゆー"
                Case "V": Pass_Str = "(大)ぶい"
                Case "W": Pass_Str = "(大)だぶりゅー"
                Case "X": Pass_Str = "(大)えっくす"
                Case "Y": Pass_Str = "(大)わい"
                Case "Z": Pass_Str = "(大)ぜっと"
                Case "0": Pass_Str = "ゼロ"
                Case "1": Pass_Str = "イチ"
                Case "2": Pass_Str = "ニ"
                Case "3": Pass_Str = "サン"
                Case "4": Pass_Str = "ヨン"
                Case "5": Pass_Str = "ゴ"
                Case "6": Pass_Str = "ロク"
                Case "7": Pass_Str = "ナナ"
                Case "8": Pass_Str = "ハチ"
                Case "9": Pass_Str = "キュウ"
            End Select
        
            If L <> E Then  '文字列の後に“,”区切り文字(カンマ)をつけるか付けないがを判定
                    Pass_Set = Pass_Set & Pass_Str & ","  '区切り文字(カンマ)をつける。
                Else
                    Pass_Set = Pass_Set & Pass_Str  '区切り文字(カンマ)を付けない。
            End If
    
        Next L
        
     Range("E" & I) = Pass_Set  'E列に作成したパスワードの読み方を代入します。
     
     Next I

End Sub


 

 

●実行前~実行後 ※プログラム実行後、英文字(大文字・小文字)4文字+数値4文字の組み合わせのパスワードが生成されました。今回のプログラムは、更にパスワードの読み方も一緒に表示されました。

 

 

 

最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA