指定した桁数でパスワードをランダム自動生成「passwordGet」の解説

前回の「郵便番号をランダムで自動取得」で郵便番号を自動取得しましたが、今回はパスワードをランダム自動生成する方法について解説します。こちらも何かしらのアカウントを新規作成する場合などで利用されることが多いので、非常に便利なプログラムです。

目次

スポンサー リンク

指定した桁数でパスワードをランダム自動生成する処理の流れ

以下が今回の処理の流れになります。

利用する関数・サブルーチンについて

今回利用するサブルーチンは以下になります。

Chr関数とは

Chr関数指定したASCIIコードに対応する文字列を返す関数です。
※ASCIIコードの0~31の範囲の文字は表示できません。

Chr(ASCIIコード)
構文Chr(num)
引数省略説明
NumASCIIコード。

Int関数とは

Int関数小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11

Int(倍精度浮動小数点数型の数値または任意の数式)
構文Int(Num)
引数省略説明
Num倍精度浮動小数点数型の数値または任意の数式。

Rnd関数とは

Rnd関数0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。

Rnd[乱数作成方法の指定]
構文Rnd[(Number)]
引数省略説明
Number乱数作成方法の指定。
number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。
number > 0 ・・・乱数系列の次の乱数を返します。
number = 0 ・・・直前に生成した乱数を返します。
省略した場合 ・・・乱数系列の次の乱数を返します。

Randomizeステートメントとは

Randomizeステートメント乱数ジェネレータを初期化 (乱数系列を再設定) します。Randomizeステートメントを使用しない場合、引数を指定しないでRnd関数を呼び出すと、最初にRnd 関数を呼び出したときのシード値(乱数ジェネレータの状態変数)と同じ値が使用されてしまいます。それ以降も直前に生成された数がシード値として使用されますので、Rnd関数を利用する場合は、必ず初期化させます。

Randomize[乱数のシード値]
構文Randomize[number]
引数省略説明
NumberRnd関数で使用される乱数のシード値を設定。

makeRndIntとは

makeRndIntは指定した範囲でランダム(乱数)の整数を取得するマクロです。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。

makeRndInt(取得する整数の最小値, 取得する整数の最大値)
構文makeRndInt(minInt, maxInt)
引数名データ型内容値の事例初期値省略
minIntInteger取得する整数の最小値0×
maxIntInteger取得する整数の最大値100×

「minInt」「maxInt」は必須項目です。「minInt」には取得する整数の最小値を設定します。「maxInt」には取得する整数の最大値を設定します。

指定した桁数でパスワードをランダム自動生成するサンプルコード

今回のサンプルコードは指定した桁数で数字のみ・英字のみのパスワードを自動生成するマクロになります。

Sub sample()

    Dim str1 As String, str2 As String
    
    For i = 1 To 5

        '乱数ジェネレータを初期化
         Randomize
        
        '数字(0~9)のみ
        str1 = str1 & makeRndInt(0, 9)
        
         '英字(a~z:ASCII文字コード)のみ
        str2 = str2 & Chr(Int(Rnd * 26) + 97)

    Next i
    
    Debug.Print "数字のみのパスワード:" & str1
    Debug.Print "英字のみのパスワード:" & str2
    
End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

ASCII文字コード表

10進16進文字10進16進文字10進16進文字10進16進文字
00NUL3220SP6440@9660`
11SOH3321!6541A9761a
22STX3422"6642B9862b
33ETX3523#6743C9963c
44EOT3624$6844D10064d
55ENQ3725%6945E10165e
66ACK3826&7046F10266f
77BEL3927'7147G10367g
88BS4028(7248H10468h
99HT4129)7349I10569i
100aLF422a*744aJ1066aj
110bVT432b+754bK1076bk
120cFF442c,764cL1086cl
130dCR452d-774dM1096dm
140eSO462e.784eN1106en
150fSI472f/794fO1116fo
1610DLE483008050P11270p
1711DC1493118151Q11371q
1812DC2503228252R11472r
1913DC3513338353S11573s
2014DC4523448454T11674t
2115NAK533558555U11775u
2216SYN543668656V11876v
2317ETB553778757W11977w
2418CAN563888858X12078x
2519EM573998959Y12179y
261aSUB583a:905aZ1227az
271bESC593b;915b[1237b{
281cFS603c<</td>925c\\1247c|
291dGS613d=935d]1257d}
301eRS623e945e^1267e~
311fUS633f?955f_1277fDEL

実行結果

ランダムで数字のみ・英字のみのパスワードが生成される。
数字のみのパスワード:91545
英字のみのパスワード:rwfmw

解説


Dim str1 As String, str2 As String

※ドラッグ(スワイプ)すると全体を確認できます。

型をを宣言します。


For i = 1 To 5
(省略)
Next

※ドラッグ(スワイプ)すると全体を確認できます。

For~Nextステートメントを利用して、5桁のパスワードを生成するためにループ処理をしています。


'乱数ジェネレータを初期化
Randomize

※ドラッグ(スワイプ)すると全体を確認できます。

Randomizeステートメントを利用して、乱数をする際に乱数ジェネレータを初期化させます。


'数字(0~9)のみ
str1 = str1 & makeRndInt(0, 9)

※ドラッグ(スワイプ)すると全体を確認できます。

makeRndIntを利用して、0~9の中から1文字ランダムで数字を抽出します。また、ループ処理をさせているので、5回数字を結合します。


'英字(a~z:ASCII文字コード)のみ
str2 = str2 & Chr(Int(Rnd * 26) + 97)

※ドラッグ(スワイプ)すると全体を確認できます。

Chr関数・Int関数・Rnd関数を利用して、a~z9の中から1文字ランダムで英字を抽出します。Int(Rnd * 26) + 97は、ASCII文字コードの97が英字の小文字「a」で英字は26文字あるので、97~122のASCII文字コードの中からランダムで1文字抽出しています。また、ループ処理をさせているので、5回英字を結合します。


Debug.Print "数字のみのパスワード:" & str1
Debug.Print "英字のみのパスワード:" & str2

※ドラッグ(スワイプ)すると全体を確認できます。

数字のみ・英字のみのパスワードをそれぞれ抽出しています。ここでは、数字のみ・英字のみで指定した桁数でランダム生成しましたが、中には英数字を混ぜてパスワードを作成する場合もあります。今度は、こちらも踏まえたサブルーチンを作成していきましょう。

パスワードをランダム自動生成するサブルーチン「passwordGet」の解説


Function passwordGet(cnt As Integer, Optional chrType As String) As String

    Dim i As Integer, n As Integer
    
    For i = 1 To cnt
    
        n = makeRndInt(1, 2)
        
        '乱数ジェネレータを初期化
         Randomize
        
        If chrType = "0-9" Then
            '数字(0~9)
            passwordGet = passwordGet & makeRndInt(0, 9)
        ElseIf n = 1 Or chrType = "a-z" Then
            '英字(a~z:ASCII文字コード)
            passwordGet = passwordGet & Chr(Int(Rnd * 26) + 97)
        Else
            '数字(0~9)
            passwordGet = passwordGet & makeRndInt(0, 9)
        End If
    
    Next i

End Function

※ドラッグ(スワイプ)すると全体を確認できます。

こちらが「指定した桁数のパスワードをランダム自動生成するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「パスワード桁数」「パスワードタイプ」の2つが設定されています。以下が引数の詳細になります。

passwordGet(桁数,["パスワードタイプ文字列"])
構文passwordGet(cnt, [chrType])
引数名データ型内容値の事例初期値省略
cntIntegerパスワード桁数5,8,10×
chrTypeStringパスワードタイプ"0-9"・・・数字のみ,
"a-z"・・・英字のみ

「cnt」は必須項目です。「cnt」には、パスワードの桁数を設定します。「chrType」には、パスワードのタイプを設定します。「0-9」を指定した場合は、数字のみのパスワードを、「a-z」を指定した場合は英字のみのパスワードを設定します。また、何も指定しない場合は、英数字混合のパスワードを生成します。

「passwordGet」を利用してランダムでパスワードを自動生成するサンプルコード

Sub sample()

  Debug.Print "桁数10桁の英数字パスワード:" & passwordGet(10)
  Debug.Print "桁数8桁の数字パスワード:" & passwordGet(8, "0-9")
  Debug.Print "桁数5桁の英字パスワード:" & passwordGet(5, "a-z")

End Sub

※ドラッグ(スワイプ)すると全体を確認できます。

実行結果

桁数10桁の英数字パスワード:i71p206ml2
桁数8桁の数字パスワード:21358937
桁数5桁の英字パスワード:kwoaz

解説

今回は、3つのパスワードを設定しています。パスワードタイプを設定していない場合は英数字パスワードが自動生成されているのが、分かるかとおもいます。

まとめ

今回は、passwordGetサブルーチンを利用して指定した桁数でパスワードを自動生成する方法について解説しました。パスワードを生成してアカウント作成する場合は、必ずパスワードはエクセルシートに保存するようにしましょう。

次の記事: VBAでIE操作に役立つ指定した桁数で文字列をランダム自動生成 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。

ExcelのVBA初心者入門

↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。

目次

IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作のVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作のステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。