ニックネームをランダムで自動生成「nicknameGet」の解説

前回の「名前をランダムで自動生成」では名前を自動生成する方法を解説しましたが、今回はニックネームをランダム自動生成する方法について解説します。こちらも登録時には必要となる場合がある項目です。

目次

スポンサー リンク

ニックネームをランダムで自動生成する処理の流れ

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

  • ①変数宣言
  • ②「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 objIE92 As InternetExplorer
    Dim objTag92 As Object
    Dim i As Integer, i2 As Integer
    
    'ニックネームページをIE(InternetExplorer)で起動
    Call ieView(objIE92, "http://www.vba-ie.net/code/nicknamedata.html")

    'ランダムでテーブルの行番号を取得(語頭用)
    i = makeRndInt(1, 50)
    'ランダムでテーブルの行番号を取得(語尾用)
    i2 = makeRndInt(1, 50)

    'テーブルデータを取得
    Set objTag92 = objIE92.document.getElementsByTagName("table")(0)
    
    With objTag92
        Debug.Print "ニックネーム:" & .Rows(i).Cells(0).innerText & .Rows(i2).Cells(2).innerText
        Debug.Print "ニックネーム(ローマ字):" & .Rows(i).Cells(1).innerText & .Rows(i2).Cells(3).innerText
    End With
    
    'IEオブジェクトを閉じる
    objIE92.Quit
    
End Sub

実行結果

ランダムでニックネームの文字列が生成される。
ニックネーム:くまくん
ニックネーム(ローマ字):kumakun

解説


Dim objIE92 As InternetExplorer
Dim objTag92 As Object
Dim i As Integer, i2 As Integer

型をを宣言します。


'ニックネームページをIE(InternetExplorer)で起動
Call ieView(objIE92, "http://www.vba-ie.net/code/nicknamedata.html")

ieViewを利用して、ニックネームページを表示させます。


'ランダムでテーブルの行番号を取得(語頭用)
i = makeRndInt(1, 50)
'ランダムでテーブルの行番号を取得(語尾用)
i2 = makeRndInt(1, 50)

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


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

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


With objTag92
  Debug.Print "ニックネーム:" & .Rows(i).Cells(0).innerText & .Rows(i2).Cells(2).innerText
  Debug.Print "ニックネーム(ローマ字):" & .Rows(i).Cells(1).innerText & .Rows(i2).Cells(3).innerText
End With

innerTextプロパティを利用して、それぞれのセル番地を指定し、ニックネームを抽出しています。


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

最後にIEオブジェクトを閉じます。テーブル情報は、語頭が50、語尾が50用意されています。続いてサブルーチンを作成していきましょう。

ニックネームをランダムで自動生成するサブルーチン「nameGet」の解説


Function nicknameGet(Optional num As Integer = 1, Optional numPlus As Boolean = False) As Collection

    Dim objIE92 As InternetExplorer
    Dim objTag92 As Object
    Dim i As Integer, n As Integer
    Dim tmp As Variant
    Dim strN As String, strA As String, arrInt As String, strNum As String
    
    Dim arrNickName As New Collection
    
    'ニックネームページをIE(InternetExplorer)で起動
    Call ieView(objIE92, "http://www.vba-ie.net/code/nicknamedata.html", False)
    
    '語尾にプラスする枝番
    If numPlus = True Then
        strNum = makeRndInt(50, 9999)
    Else
        strNum = ""
    End If
    
    'ランダムでテーブルの行番号を取得(語頭用)・・・接続回数分(num)
    For n = 1 To num
        arrInt = arrInt & "," & makeRndInt(1, 50)
    Next n
    
    '先頭の,を削除
    arrInt = Right(arrInt, Len(arrInt) - 1)
    
    'テーブルの行番号を配列に格納(語頭用)
    tmp = Split(arrInt, ",")
    
    Set objTag92 = objIE92.document.getElementsByTagName("table")(0)
    
    '語尾を取得(配列回数分)
    For i = LBound(tmp) To UBound(tmp)
    
        strN = strN & objTag92.Rows(tmp(i)).Cells(0).innerText  'ニックネーム
        strA = strA & objTag92.Rows(tmp(i)).Cells(1).innerText  'ニックネーム(ローマ字)

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

    strN = strN & objTag92.Rows(i).Cells(2).innerText & strNum  'ニックネーム
    strA = strA & objTag92.Rows(i).Cells(3).innerText & strNum  'ニックネーム(ローマ字)


    arrNickName.Add strN, "N" 'ニックネーム
    arrNickName.Add StrConv(strN, vbKatakana), "NKW"   'ニックネーム(カナ[全角])
    arrNickName.Add StrConv(StrConv(strN, vbKatakana), vbNarrow), "NKN"   'ニックネーム(カナ[半角])
    arrNickName.Add StrConv(StrConv(strA, vbWide), vbUpperCase), "NAWU"   'ニックネーム(ローマ字[全角][大文字])
    arrNickName.Add StrConv(strA, vbUpperCase), "NAWL"    'ニックネーム(ローマ字[全角][小文字])
    arrNickName.Add StrConv(strA, vbWide), "NANU"    'ニックネーム(ローマ字[半角][大文字])
    arrNickName.Add strA, "NANL"    'ニックネーム(ローマ字[半角][小文字])

    Set nicknameGet = arrNickName

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

End Function

こちらが「ニックネームをランダムで自動生成するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「連結回数」「数字の有無」の2つが設定されています。以下が引数の詳細になります。

nicknameGet([連結回数][,数字の有無])
構文nicknameGet([num][,numPlus])
引数名データ型内容値の事例初期値省略
numInteger連結回数1,3,51
numPlusBoolean数字の有無True,FalseFalse
戻り値
データ配列key命名ルール内容
ニックネーム(ひらがな)NNickNameNickName(ニックネーム)の頭文字をkey設定。
ニックネーム(カナ[全角])NKWNickName Ktakana WideNickName(ニックネーム),Katanaka(カタカナ),Wide(全角)の頭文字をkey設定。
ニックネーム(カナ[半角])NKNNickName Ktakana NarrowNickName(ニックネーム),Katanaka(カタカナ),Narrow(半角)の頭文字をkey設定。
ニックネーム(ローマ字[全角][大文字])NAWUNickName Alphabet Wide UpperNickName(ニックネーム),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
ニックネーム(ローマ字[全角][小文字])NAWLNickName Alphabet Wide NowerNickName(ニックネーム),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。
ニックネーム(ローマ字[半角][大文字])NANUNickName Alphabet Narrow UpperNickName(ニックネーム),Alphabet(ローマ字),Wide(全角),Upper(大文字)の頭文字をkey設定。
ニックネーム(ローマ字[半角][小文字])NANLNickName Alphabet Narrow NowerNickName(ニックネーム),Alphabet(ローマ字),Wide(全角),Lower(小文字)の頭文字をkey設定。

「num」「numPlus」は任意項目です。「num」には、ニックネームの語頭の連結回数を設定します。現在、ニックネームページには語頭×50、語尾×50ですので、全パターンは2500パターンあります。
一意のニックネームを要求される場合は、同一ニックネームになる恐れがありますので、語頭部分の連結回数を指定することで、パターンを増やすことができます。例えば、連結回数を3に設定した場合、語頭×50×50×50、語尾×50で全パターン625万パターンになります。次に「numPlus」ですが、こちらは語尾に任意の数字を連結するかの有無になります。「True」を選択するとニックネームの語尾に50~9999のいずれかの数値が連結されます。初期設定は「False」に設定されているので、数字連結をしない場合は設定しないようにしてください。

「nicknameget」を利用してニックネームをランダムで自動生成するサンプルコード

Sub sample()

    Set arrName = nicknameGet()
    
    Debug.Print "ニックネーム:" & arrName("N")
    Debug.Print "ニックネーム(カナ[全角]):" & arrName("NKW")
    Debug.Print "ニックネーム(カナ[半角]):" & arrName("NKN")
    Debug.Print "ニックネーム(ローマ字[全角][大文字]):" & arrName("NAWU")
    Debug.Print "ニックネーム(ローマ字[全角][小文字]):" & arrName("NAWL")
    Debug.Print "ニックネーム(ローマ字[半角][大文字]):" & arrName("NANU")
    Debug.Print "ニックネーム(ローマ字[半角][小文字]):" & arrName("NANL")
    
    Set arrName = nicknameGet(2, True)

    Debug.Print "ニックネーム2:" & arrName("N")

End Sub

実行結果

ニックネーム:いずりけん
ニックネーム(カナ[全角]):イズリケン
ニックネーム(カナ[半角]):イズリケン
ニックネーム(ローマ字[全角][大文字]):IZURIKEN
ニックネーム(ローマ字[全角][小文字]):IZURIKEN
ニックネーム(ローマ字[半角][大文字]):izuriken
ニックネーム(ローマ字[半角][小文字]):izuriken
ニックネーム2:らぶあれんでぃうす1878

解説

今回は、何も設定しないパターンと、語頭連結回数を2と数字連結を併せた処理を行いました。結果から分かるようにニックネームのパターン数は自由に設定できますので、サービスの内容に沿った利用方法をしてください。また、こちらでも連想配列にするために「Collection」で宣言しています。「Collection」を利用することでKeyによる識別が可能となります。今回設定したkeyはそれぞれの頭文字を利用しています。プログラミングはほぼ英語ですので、なるべく英単語を覚えるようにしましょう。最初はどれがどれか分からないかもしれませんが、英単語を覚えると自ずと理解できるようになります。

まとめ

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

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