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

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

目次

スポンサー リンク

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

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

  • ①変数宣言
  • ②変数kanaに「ひらがな」の文字列を格納
  • ③「For~Nextステートメント」を利用して、指定した桁数回ループ処理
  • ④「Randomizeステートメント」を利用して、乱数ジェネレータを初期化
  • ⑤Int関数とRnd関数を利用して、1~71(かな文字数)の数字をランダム取得
  • ⑥Mid関数を利用して、⑤で取得した数字の文字を抽出し文字結合

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

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

  • Int関数とは
  • Rnd関数とは
  • Randomizeステートメントとは
  • Mid関数とは
  • StrConv関数とは

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(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

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

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

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

IEオブジェクトのメソッド・プロパティ

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

IE操作に利用されているVBA関数

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

IE操作に利用されているステートメント

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

IE(InternetExplorer)制御のVBAコード

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

ExcelのVBAで作成した役立つVBAコード

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