指定した桁数で文字列をランダム自動生成「strGet」の解説
前回の「指定した桁数でパスワードをランダム自動生成」ではパスワード用に自動生成しましたが、今回は文字列をランダム自動生成する方法について解説します。こちらもよくある「秘密の質問と答え」といった答え部分がわずらわしい場合に自動生成するプログラムです。
目次
- 指定した桁数で文字列をランダム自動生成する処理の流れ
- 利用する関数・ステートメントについて
- 指定した桁数で文字列をランダム自動生成するサンプルコード
- 文字列をランダム自動生成するサブルーチン「strGet」の解説
- 「strGet」を利用してランダムで文字列を自動生成するサンプルコード
- まとめ
指定した桁数で文字列をランダム自動生成する処理の流れ
以下が今回の処理の流れになります。
- ①変数宣言
- ②変数kanaに「ひらがな」の文字列を格納
- ③「For~Nextステートメント」を利用して、指定した桁数回ループ処理
- ④「Randomizeステートメント」を利用して、乱数ジェネレータを初期化
- ⑤Int関数とRnd関数を利用して、1~71(かな文字数)の数字をランダム取得
- ⑥Mid関数を利用して、⑤で取得した数字の文字を抽出し文字結合
利用する関数・ステートメントについて
今回利用する関数・ステートメントは以下になります。- Int関数とは
- Rnd関数とは
- Randomizeステートメントとは
- Mid関数とは
- StrConv関数とは
Int関数とは
Int関数は小数点以下を切り捨てて整数にする関数です。
※マイナス値の場合は、小さいほうに丸めます。(Int(-10.52) → -11
構文 | Int(Num) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Num | ● | 倍精度浮動小数点数型の数値または任意の数式。 |
Rnd関数とは
Rnd関数は0以上1未満の乱数を発生させる関数です。戻り値は、単精度浮動小数点数型 (Single) の乱数を返します。また、引数Numberによって、どのような乱数を返すかを指定することもできます。
構文 | Rnd[(Number)] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | 乱数作成方法の指定。 number < 0 ・・・常に、Number のシード値によって決まる同じ数値を返します。 number > 0 ・・・乱数系列の次の乱数を返します。 number = 0 ・・・直前に生成した乱数を返します。 省略した場合 ・・・乱数系列の次の乱数を返します。 |
Randomizeステートメントとは
Randomizeステートメントは乱数ジェネレータを初期化 (乱数系列を再設定) します。Randomizeステートメントを使用しない場合、引数を指定しないでRnd関数を呼び出すと、最初にRnd 関数を呼び出したときのシード値(乱数ジェネレータの状態変数)と同じ値が使用されてしまいます。それ以降も直前に生成された数がシード値として使用されますので、Rnd関数を利用する場合は、必ず初期化させます。
構文 | Randomize[number] | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
Number | ● | Rnd関数で使用される乱数のシード値を設定。 |
StrConv関数とは
StrConv関数は指定した文字列を指定した変換の種類で変換した文字列を返す関数です。
構文 | StrConv(string, conversion) | ||||
---|---|---|---|---|---|
引数 | 省略 | 説明 | |||
string | × | 変換する文字列。 | |||
conversion | × | 変換の種類を指定します。 |
定数 | 値 | 内容 |
---|---|---|
vbUpperCase | 1 | 文字列を大文字に変換します。 |
vbLowerCase | 2 | 文字列を小文字に変換します。 |
vbProperCase | 3 | 文字列の各単語の先頭の文字を大文字に変換します。 |
vbWide | 4 | 文字列内の半角文字を全角文字に変換します。 |
vbNarrow | 8 | 文字列内の全角文字を半角文字に変換します。 |
vbKatakana | 16 | 文字列内のひらがなをカタカナに変換します。 |
vbHiragana | 32 | 文字列内のカタカナをひらがなに変換します。 |
vbUnicode | 64 | システムの既定のコードページを使って文字列をUnicodeに変換します。 |
vbFromUnicode | 128 | 文字列をUnicodeからシステムの既定のコードページに変換します。 |
指定した桁数で文字列をランダム自動生成するサンプルコード
今回のサンプルコードは指定した桁数で文字列を自動生成するマクロになります。
Sub sample()
Dim i As Integer, n As Integer
Dim kana As String, str1 As String
kana = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" & _
"がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"
For i = 1 To 5
'乱数ジェネレータを初期化
Randomize
'71個のかな文字
n = Int((71 - 1 + 1) * Rnd + 1)
str1 = str1 + Mid(kana, n, 1)
Next i
Debug.Print "ひらがなの文字列:" & str1
Debug.Print "カタカナ(全角)の文字列:" & StrConv(str1, vbKatakana)
Debug.Print "カタカナ(半角)の文字列:" & StrConv(StrConv(str1, vbKatakana), vbNarrow)
End Sub
実行結果
ランダムでひらがな・カタカナ(全角)・カタカナ(半角)の文字列が生成される。
ひらがなの文字列:うだずんぽ
カタカナ(全角)の文字列:ウダズンポ
カタカナ(半角)の文字列:ウダズンポ
解説
Dim i As Integer, n As Integer
Dim kana As String, str1 As String
型をを宣言します。
kana = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" & _
"がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"
変数kanaにひらがなの文字列を格納します。
For i = 1 To 5
(省略)
Next
For~Nextステートメントを利用して、5桁のパスワードを生成するためにループ処理をしています。
'乱数ジェネレータを初期化
Randomize
Randomizeステートメントを利用して、乱数をする際に乱数ジェネレータを初期化させます。
'71個のかな文字
n = Int((71 - 1 + 1) * Rnd + 1)
Int関数・Rnd関数を利用して、1~71(変数kanaの文字数)からランダムで数字を抽出します。
str1 = str1 + Mid(kana, n, 1)
Mid関数を利用して、変数kanaの文字列から1文字ランダムで抽出します。また、ループ処理をさせているので、5回文字を結合します。
Debug.Print "ひらがなの文字列:" & str1
Debug.Print "カタカナ(全角)の文字列:" & StrConv(str1, vbKatakana)
Debug.Print "カタカナ(半角)の文字列:" & StrConv(StrConv(str1, vbKatakana), vbNarrow)
ひらがな・カタカナ(全角)・カタカナ(半角)の文字列をそれぞれ抽出しています。ここでは、ひらがな・カタカナ(全角)・カタカナ(半角)で指定した桁数でランダム生成しましたが、変換方法を指定して文字列を生成するサブルーチンを作成していきましょう。
文字列をランダム自動生成するサブルーチン「strGet」の解説
Function strGet(cnt As Integer, Optional chrType As String) As String
Dim i As Integer, n As Integer
Dim kana As String, str1 As String
kana = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん" & _
"がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"
For i = 1 To cnt
'乱数ジェネレータを初期化
Randomize
'71個のかな文字
n = Int((71 - 1 + 1) * Rnd + 1)
str1 = str1 + Mid(kana, n, 1)
Next i
If chrType = "カタカナ" Then
'全角カタカナ
strGet = StrConv(str1, vbKatakana)
ElseIf chrType = "カタカナ" Then
'半角カタカナ
strGet = StrConv(StrConv(str1, vbKatakana), vbNarrow)
Else
'ひらがな
strGet = str1
End If
End Function
こちらが「指定した桁数の文字列をランダム自動生成するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「文字列桁数」「文字列タイプ」の2つが設定されています。以下が引数の詳細になります。
構文 | strGet(cnt [,chrType]) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
cnt | Integer | 文字列桁数 | 5,8,10 | × | |
chrType | String | 文字列タイプ | "カタカナ"・・・全角カタカナ, "カタカナ"・・・半角カタカナ 指定なし・・・ひらがな | ● |
「cnt」は必須項目です。「cnt」には、文字列の桁数を設定します。「chrType」には、文字列のタイプを設定します。「カタカナ」を指定した場合は、全角カタカナの文字列を、「カタカナ」を指定した場合は半角カタカナの文字列を設定します。また、何も指定しない場合は、ひらがなの文字列を生成します。
「strGet」を利用してランダムで文字列を自動生成するサンプルコード
Sub sample()
Debug.Print "桁数10桁のひらがな文字列:" & strGet(10)
Debug.Print "桁数8桁のカタカナ(全角)文字列:" & strGet(8, "カタカナ")
Debug.Print "桁数5桁のカタカナ(半角)文字列:" & strGet(5, "カタカナ")
End Sub
実行結果
桁数10桁のひらがな文字列:すわうゆをらぜでけよ
桁数8桁のカタカナ(全角)文字列:リジパヅヘゲオミ
桁数5桁のカタカナ(半角)文字列:ヂゴヤクナ
解説
今回は、3つの文字列を設定しています。文字列タイプを設定していない場合はひらがな文字列が自動生成されているのが、分かるかとおもいます。
まとめ
今回は、strGetサブルーチンを利用して指定した桁数で文字列を自動生成する方法について解説しました。文字列を生成してアカウント作成する場合は、必ず文字列はエクセルシートに保存するようにしましょう。
次の記事: VBAでIE操作に役立つ名前をランダムで自動生成 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。