指定した桁数で文字列をランダム自動生成「strGet」の解説

前回の「指定した桁数でパスワードをランダム自動生成」ではパスワード用に自動生成しましたが、今回は文字列をランダム自動生成する方法について解説します。こちらもよくある「秘密の質問と答え」といった答え部分がわずらわしい場合に自動生成するプログラムです。

目次

スポンサー リンク

指定した桁数で文字列をランダム自動生成する処理の流れ

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

利用する関数・ステートメントについて

今回利用する関数・ステートメントは以下になります。

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関数で使用される乱数のシード値を設定。

StrConv関数とは

StrConv関数指定した文字列を指定した変換の種類で変換した文字列を返す関数です。

StrConv("変換する文字列", 変換の種類)
構文StrConv(string, conversion)
引数省略説明
string×変換する文字列。
conversion×変換の種類を指定します。
定数内容
vbUpperCase1文字列を大文字に変換します。
vbLowerCase2文字列を小文字に変換します。
vbProperCase3文字列の各単語の先頭の文字を大文字に変換します。
vbWide4文字列内の半角文字を全角文字に変換します。
vbNarrow8文字列内の全角文字を半角文字に変換します。
vbKatakana16文字列内のひらがなをカタカナに変換します。
vbHiragana32文字列内のカタカナをひらがなに変換します。
vbUnicode64システムの既定のコードページを使って文字列をUnicodeに変換します。
vbFromUnicode128文字列を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(桁数,["文字列タイプ文字列"])
構文strGet(cnt [,chrType])
引数名データ型内容値の事例初期値省略
cntInteger文字列桁数5,8,10×
chrTypeString文字列タイプ"カタカナ"・・・全角カタカナ,
"カタカナ"・・・半角カタカナ
指定なし・・・ひらがな

「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操作に役立つ名前をランダムで自動生成 >>

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で役に立つものばかりですので、ご利用ください。