VBAのIE(InternetExplorer)制御で役立つ指定した桁数でパスワードをランダム自動生成する制御方法について解説しています。
前回の「郵便番号をランダムで自動取得」で郵便番号を自動取得しましたが、今回はパスワードをランダム自動生成する方法について解説します。こちらも何かしらのアカウントを新規作成する場合などで利用されることが多いので、非常に便利なプログラムです。
以下が今回の処理の流れになります。
Chr関数は指定したASCIIコードに対応する文字列を返す関数です。
※ASCIIコードの0~31の範囲の文字は表示できません。
構文 | Chr(num) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Num | ● | ASCIIコード。 |
Int関数は小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11
構文 | Int(Num) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Num | ● | 倍精度浮動小数点数型の数値または任意の数式。 |
Rnd関数は0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。
構文 | Rnd[(Number)] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | 乱数作成方法の指定。 number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。 number > 0 ・・・乱数系列の次の乱数を返します。 number = 0 ・・・直前に生成した乱数を返します。 省略した場合 ・・・乱数系列の次の乱数を返します。 |
Randomizeステートメントは乱数ジェネレータを初期化 (乱数系列を再設定) します。Randomizeステートメントを使用しない場合、引数を指定しないでRnd関数を呼び出すと、最初にRnd 関数を呼び出したときのシード値(乱数ジェネレータの状態変数)と同じ値が使用されてしまいます。それ以降も直前に生成された数がシード値として使用されますので、Rnd関数を利用する場合は、必ず初期化させます。
構文 | Randomize[number] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | Rnd関数で使用される乱数のシード値を設定。 |
makeRndIntは指定した範囲でランダム(乱数)の整数を取得するマクロです。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には取得する整数の「最小値」「最大値」の2つが設定されています。以下が引数の詳細になります。
構文 | makeRndInt(minInt, maxInt) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
minInt | Integer | 取得する整数の最小値 | 0 | × | |
maxInt | Integer | 取得する整数の最大値 | 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
※ドラッグ(スワイプ)すると全体を確認できます。
10進 | 16進 | 文字 | 10進 | 16進 | 文字 | 10進 | 16進 | 文字 | 10進 | 16進 | 文字 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | NUL | 32 | 20 | SP | 64 | 40 | @ | 96 | 60 | ` |
1 | 1 | SOH | 33 | 21 | ! | 65 | 41 | A | 97 | 61 | a |
2 | 2 | STX | 34 | 22 | " | 66 | 42 | B | 98 | 62 | b |
3 | 3 | ETX | 35 | 23 | # | 67 | 43 | C | 99 | 63 | c |
4 | 4 | EOT | 36 | 24 | $ | 68 | 44 | D | 100 | 64 | d |
5 | 5 | ENQ | 37 | 25 | % | 69 | 45 | E | 101 | 65 | e |
6 | 6 | ACK | 38 | 26 | & | 70 | 46 | F | 102 | 66 | f |
7 | 7 | BEL | 39 | 27 | ' | 71 | 47 | G | 103 | 67 | g |
8 | 8 | BS | 40 | 28 | ( | 72 | 48 | H | 104 | 68 | h |
9 | 9 | HT | 41 | 29 | ) | 73 | 49 | I | 105 | 69 | i |
10 | 0a | LF | 42 | 2a | * | 74 | 4a | J | 106 | 6a | j |
11 | 0b | VT | 43 | 2b | + | 75 | 4b | K | 107 | 6b | k |
12 | 0c | FF | 44 | 2c | , | 76 | 4c | L | 108 | 6c | l |
13 | 0d | CR | 45 | 2d | - | 77 | 4d | M | 109 | 6d | m |
14 | 0e | SO | 46 | 2e | . | 78 | 4e | N | 110 | 6e | n |
15 | 0f | SI | 47 | 2f | / | 79 | 4f | O | 111 | 6f | o |
16 | 10 | DLE | 48 | 30 | 0 | 80 | 50 | P | 112 | 70 | p |
17 | 11 | DC1 | 49 | 31 | 1 | 81 | 51 | Q | 113 | 71 | q |
18 | 12 | DC2 | 50 | 32 | 2 | 82 | 52 | R | 114 | 72 | r |
19 | 13 | DC3 | 51 | 33 | 3 | 83 | 53 | S | 115 | 73 | s |
20 | 14 | DC4 | 52 | 34 | 4 | 84 | 54 | T | 116 | 74 | t |
21 | 15 | NAK | 53 | 35 | 5 | 85 | 55 | U | 117 | 75 | u |
22 | 16 | SYN | 54 | 36 | 6 | 86 | 56 | V | 118 | 76 | v |
23 | 17 | ETB | 55 | 37 | 7 | 87 | 57 | W | 119 | 77 | w |
24 | 18 | CAN | 56 | 38 | 8 | 88 | 58 | X | 120 | 78 | x |
25 | 19 | EM | 57 | 39 | 9 | 89 | 59 | Y | 121 | 79 | y |
26 | 1a | SUB | 58 | 3a | : | 90 | 5a | Z | 122 | 7a | z |
27 | 1b | ESC | 59 | 3b | ; | 91 | 5b | [ | 123 | 7b | { |
28 | 1c | FS | 60 | 3c | <</td> | 92 | 5c | \\ | 124 | 7c | | |
29 | 1d | GS | 61 | 3d | = | 93 | 5d | ] | 125 | 7d | } |
30 | 1e | RS | 62 | 3e | 94 | 5e | ^ | 126 | 7e | ~ | |
31 | 1f | US | 63 | 3f | ? | 95 | 5f | _ | 127 | 7f | DEL |
ランダムで数字のみ・英字のみのパスワードが生成される。
数字のみのパスワード: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
※ドラッグ(スワイプ)すると全体を確認できます。
数字のみ・英字のみのパスワードをそれぞれ抽出しています。ここでは、数字のみ・英字のみで指定した桁数でランダム生成しましたが、中には英数字を混ぜてパスワードを作成する場合もあります。今度は、こちらも踏まえたサブルーチンを作成していきましょう。
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(cnt, [chrType]) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
cnt | Integer | パスワード桁数 | 5,8,10 | × | |
chrType | String | パスワードタイプ | "0-9"・・・数字のみ, "a-z"・・・英字のみ | ● |
「cnt」は必須項目です。「cnt」には、パスワードの桁数を設定します。「chrType」には、パスワードのタイプを設定します。「0-9」を指定した場合は、数字のみのパスワードを、「a-z」を指定した場合は英字のみのパスワードを設定します。また、何も指定しない場合は、英数字混合のパスワードを生成します。
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操作に役立つ指定した桁数で文字列をランダム自動生成 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。