名前をランダムで自動生成「nameGet」の解説

前回の「指定した桁数で文字列をランダム自動生成」では秘密の答えなど文字列を自動生成しましたが、今回は名前をランダム自動生成する方法について解説します。こちらも登録時にはほぼ必須項目である名前ですが、漢字・かな読み・ローマ字など様々な入力項目があります。その全てのパターンを配列に格納しておけば、自動入力も非常に楽に行えます。

目次

スポンサー リンク

名前をランダムで自動生成する処理の流れ

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

  • ①変数宣言
  • ②「ieView」を利用して名前データページをIEで起動
  • ③「makeRndInt」を利用して、ランダムでテーブルの行番号を取得
  • ④テーブルデータを取得
  • ⑤名前データを抽出
  • ⑥「IEオブジェクト」を閉じる

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

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

  • ieViewとは
  • ieCheckとは
  • makeRndIntとは
  • StrConv関数とは

ieViewとは

ieViewは指定したURLをIEで起動させ、Webページが完全に読み込まれるまで待機処理をするマクロです。引数には「IEオブジェクト」「指定URL」「IEの表示・非表示」の3つが設定されています。以下が引数の詳細になります。

ieView("IEオブジェクト","表示させたいURLの文字列","IE表示・非表示の値[省略可]")
構文ieView(objIE,urlName,[viewFlg])
引数名データ型内容値の事例初期値省略
objIEInternetExplorerIEオブジェクトobjIE,objIE2×
urlNameString表示させたいURLの文字列"http://www.vba-ie.net/"×
viewFlgBooleanIE表示・非表示の値True,FalseTrue

「objIE」「urlName」は必須項目で、「objIE」にはIEオブジェクトを設定します。複数のIEオブジェクトを操作する場合には「objIE」「objIE2」といった複数のIEオブジェクトを指定してください。オブジェクト作成により、プロパティやメソッドの利用が可能となりIE(InternetExplorer)を制御することがでます。

urlName」には、表示させたいURLを設定します。
次に「viewFlg」ですが、こちらはIEの表示・非表示を決定する部分となります。
Visibleプロパティ」はデフォルトがFalseですので、初期設定ではTrueを設定させています。また、こちらはOptionalを付けて宣言した引数ですので省略することができます。

ieCheckとは

ieCheckはWebページが完全に読み込まれるまで待機処理をするマクロです。引数には「IEオブジェクト」の1つが設定されています。以下が引数の詳細になります。

ieCheck("IEオブジェクト")
構文ieCheck(objIE)
引数名データ型内容値の事例初期値省略
objIEInternetExplorerIEオブジェクトobjIE,objIE2×

objIE」は必須項目で、IEオブジェクトを設定します。複数のIEオブジェクトを操作する場合には「objIE」「objIE2」といった複数のIEオブジェクトを指定してください。

makeRndIntとは

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

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

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

StrConv関数とは

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

StrConv("変換する文字列", 変換の種類)
構文StrConv(string, conversion)
引数省略説明
string×変換する文字列。
conversion×変換の種類を指定します。
定数内容
vbUpperCase1文字列を大文字に変換します。
vbLowerCase2文字列を小文字に変換します。
vbProperCase3文字列の各単語の先頭の文字を大文字に変換します。
vbWide4文字列内の半角文字を全角文字に変換します。
vbNarrow8文字列内の全角文字を半角文字に変換します。
vbKatakana16文字列内のひらがなをカタカナに変換します。
vbHiragana32文字列内のカタカナをひらがなに変換します。
vbUnicode64システムの既定のコードページを使って文字列をUnicodeに変換します。
vbFromUnicode128文字列をUnicodeからシステムの既定のコードページに変換します。

名前をランダムで自動生成するサンプルコード

今回のサンプルコードは名前をランダムで自動生成するマクロになります。

Sub sample()

    Dim objIE91 As InternetExplorer
    Dim objTag91 As Object
    Dim i As Integer
    
    '名前ページをIE(InternetExplorer)で起動
    Call ieView(objIE91, "http://www.vba-ie.net/code/namedata.html")

    'ランダムでテーブルの行番号を取得
    i = makeRndInt(1, 100)

    'テーブルデータを取得
    Set objTag91 = objIE91.document.getElementsByTagName("table")(0)
    
    Debug.Print "姓(漢字):" & objTag91.Rows(i).Cells(0).innerText  '姓(漢字)
    Debug.Print "姓(かな):" & objTag91.Rows(i).Cells(1).innerText    '姓(かな)
    Debug.Print "姓(ローマ字):" & objTag91.Rows(i).Cells(2).innerText    '姓(ローマ字)
    Debug.Print "名(漢字):" & objTag91.Rows(i).Cells(3).innerText    '名(漢字)
    Debug.Print "名(かな):" & objTag91.Rows(i).Cells(4).innerText    '名(かな)
    Debug.Print "名(ローマ字):" & objTag91.Rows(i).Cells(5).innerText    '名(ローマ字)

    'IEオブジェクトを閉じる
    objIE91.Quit
    
End Sub

実行結果

ランダムで名前の文字列が生成される。
姓(漢字):谷口
姓(かな):たにぐち
姓(ローマ字):taniguchi
名(漢字):結衣
名(かな):ゆい
名(ローマ字):yui

解説


Dim objIE91 As InternetExplorer
Dim objTag91 As Object
Dim i As Integer

型をを宣言します。


'名前ページをIE(InternetExplorer)で起動
Call ieView(objIE91, "http://www.vba-ie.net/code/namedata.html")

ieViewを利用して、名前ページを表示させます。


'ランダムでテーブルの行番号を取得
i = makeRndInt(1, 100)

makeRndIntを利用して、ランダムでテーブルの行番号を取得します。


'テーブルデータを取得
Set objTag91 = objIE91.document.getElementsByTagName("table")(0)

getElementsByTagNameメソッドを利用して、テーブル情報を取得します。


Debug.Print "姓(漢字):" & objTag91.Rows(i).Cells(0).innerText  '姓(漢字)
Debug.Print "姓(かな):" & objTag91.Rows(i).Cells(1).innerText    '姓(かな)
Debug.Print "姓(ローマ字):" & objTag91.Rows(i).Cells(2).innerText    '姓(ローマ字)
Debug.Print "名(漢字):" & objTag91.Rows(i).Cells(3).innerText    '名(漢字)
Debug.Print "名(かな):" & objTag91.Rows(i).Cells(4).innerText    '名(かな)
Debug.Print "名(ローマ字):" & objTag91.Rows(i).Cells(5).innerText    '名(ローマ字)

innerTextプロパティを利用して、それぞれのセル番地を指定し、名前を抽出しています。


'IEオブジェクトを閉じる
objIE91.Quit

最後にIEオブジェクトを閉じます。テーブル情報は、男性の名前が50、女性の名前が50用意されています。性別で名前を選択できるよなサブルーチンを作成していきましょう。

名前をランダムで自動生成するサブルーチン「nameGet」の解説


Function nameGet(Optional sex As String) As Collection

    Dim objIE91 As InternetExplorer
    Dim objTag91 As Object
    Dim minInt As Integer, maxInt As Integer, LName As Integer, FName As Integer
    
    Dim arrName As New Collection
    
    '名前ページをIE(InternetExplorer)で起動
    Call ieView(objIE91, "http://www.vba-ie.net/code/namedata.html", False)
    
    If sex = "" Then
        minInt = 1
        maxInt = 100
    ElseIf sex = "男" Then
        minInt = 1
        maxInt = 50
    ElseIf sex = "女" Then
        minInt = 51
        maxInt = 100
    End If
    
    LName = makeRndInt(1, 100)
    FName = makeRndInt(minInt, maxInt)

    Set objTag91 = objIE91.document.getElementsByTagName("table")(0)

    With objTag91.Rows(LName)
        arrName.Add .Cells(0).innerText, "L"   '姓(漢字)
        arrName.Add .Cells(1).innerText, "LH"   '姓(かな)
        arrName.Add StrConv(.Cells(1).innerText, vbKatakana), "LKW"   '姓(カナ[全角])
        arrName.Add StrConv(StrConv(.Cells(1).innerText, vbKatakana), vbNarrow), "LKN"   '姓(カナ[半角])
        arrName.Add StrConv(StrConv(.Cells(2).innerText, vbWide), vbUpperCase), "LAWU"   '姓(ローマ字[全角][大文字])
        arrName.Add StrConv(.Cells(2).innerText, vbUpperCase), "LAWL"    '姓(ローマ字[全角][小文字])
        arrName.Add StrConv(.Cells(2).innerText, vbWide), "LANU"    '姓(ローマ字[半角][大文字])
        arrName.Add .Cells(2).innerText, "LANL"    '姓(ローマ字[半角][小文字])
    End With
    
    With objTag91.Rows(FName)
        arrName.Add .Cells(3).innerText, "F"    '名(漢字)
        arrName.Add .Cells(4).innerText, "FH"    '名(かな)
        arrName.Add StrConv(.Cells(4).innerText, vbKatakana), "FKW"   '名(カナ[全角])
        arrName.Add StrConv(StrConv(.Cells(4).innerText, vbKatakana), vbNarrow), "FKN"   '名(カナ[半角])
        arrName.Add StrConv(StrConv(.Cells(5).innerText, vbWide), vbUpperCase), "FAWU"   '名(ローマ字[全角][大文字])
        arrName.Add StrConv(.Cells(5).innerText, vbUpperCase), "FAWL"    '名(ローマ字[全角][小文字])
        arrName.Add StrConv(.Cells(5).innerText, vbWide), "FANU"     '名(ローマ字[半角][大文字])
        arrName.Add .Cells(5).innerText, "FANL"    '名(ローマ字[半角][小文字])
    End With
    
    Set nameGet = arrName

    'IEオブジェクトを閉じる
    objIE91.Quit


End Function

こちらが「名前をランダムで自動生成するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「性別」の1つが設定されています。以下が引数の詳細になります。

nameGet([性別])
構文nameGet([sex])
引数名データ型内容値の事例初期値省略
sexString性別文字列"男","女"
戻り値
データ配列key命名ルール内容
姓(漢字)LLastNameLastName(姓)の頭文字をkey設定。
姓(かな)LHLastName HiraganaLastName(姓),Hiragana(ひらがな)の頭文字をkey設定。
姓(カナ[全角])LKWLastName Ktakana WideLastName(姓),Katanaka(カタカナ),Wide(全角)の頭文字をkey設定。
姓(カナ[半角])LKNLastName Ktakana NarrowLastName(姓),Katanaka(カタカナ),Narrow(半角)の頭文字をkey設定。
姓(ローマ字[全角][大文字])LAWULastName Alphabet Wide UpperLastName(姓),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
姓(ローマ字[全角][小文字])LAWLLastName Alphabet Wide LowerLastName(姓),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。
姓(ローマ字[半角][大文字])LANULastName Alphabet Narrow UpperLastName(姓),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
姓(ローマ字[半角][小文字])LANLLastName Alphabet Narrow LowerLastName(姓),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。
名(漢字)FFirstNameFirstName(名)の頭文字をkey設定。
名(かな)FHFirstName HiraganaFirstName(名),Hiragana(ひらがな)の頭文字をkey設定。
名(カナ[全角])FKWFirstName Ktakana WideFirstName(名),Katanaka(カタカナ),Wide(全角)の頭文字をkey設定。
名(カナ[半角])FKNFirstName Ktakana NarrowFirstName(名),Katanaka(カタカナ),Narrow(半角)の頭文字をkey設定。
名(ローマ字[全角][大文字])FAWUFirstName Alphabet Wide UpperFirstName(名),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
名(ローマ字[全角][小文字])FAWLFirstName Alphabet Wide LowerFirstName(名),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。
名(ローマ字[半角][大文字])FANUFirstName Alphabet Narrow UpperFirstName(名),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
名(ローマ字[半角][小文字])FANLFirstName Alphabet Narrow LowerFirstName(名),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。

「sex」は任意項目です。「sex」には、男性もしくは女性の名前を取得したい場合に設定します。「」を指定すると男性の名前が、「」を指定すると女性の名前が、指定しない場合は男性・女性のどちらかの名前が取得されます。

「nameGet」を利用して名前をランダムで自動生成するサンプルコード

Sub sample()

    Set arrName = nameGet("男")
    
    Debug.Print "姓(漢字):" & arrName("L")
    Debug.Print "姓(かな):" & arrName("LH")
    Debug.Print "姓(ローマ字[全角][大文字]):" & arrName("LAWU")
    Debug.Print "名(漢字):" & arrName("F")
    Debug.Print "名(カナ[半角]):" & arrName("FKN")
    Debug.Print "名(ローマ字[半角][小文字]):" & arrName("FANL")

End Sub

実行結果

姓(漢字):松田
姓(かな):まつだ 
姓(ローマ字[全角][大文字]):MATSUDA 
名(漢字):颯太
名(カナ[半角]):ソウタ
名(ローマ字[半角][小文字]):souta

解説

今回は、「男」で設定した名前を出力させました。今回、連想配列にするために「Collection」で宣言しています。「Collection」を利用することでKeyによる識別が可能となります。今回設定したkeyはそれぞれの頭文字を利用しています。プログラミングはほぼ英語ですので、なるべく英単語を覚えるようにしましょう。最初はどれがどれか分からないかもしれませんが、英単語を覚えると自ずと理解できるようになります。

まとめ

今回は、nameGetサブルーチンを利用して名前をランダムで自動生成する方法について解説しました。名前を生成してアカウント作成する場合は、必ず文字列はエクセルシートに保存するようにしましょう。

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