郵便番号をランダムで自動取得「postGet」の解説

前回の「指定した範囲でランダム(乱数)の整数を取得」でランダムで整数を取得するサブルーチンを解説しましたが、早速こちらを利用します。今回は、郵便場号をランダムで自動取得する方法について解説します。何かしらのアカウントを新規作成する場合に郵便番号を入力することはよくあることです。アカウント作成の中には、会員登録をしなければ得られないツールや情報を提供しているサイトはいくつもあります。他にアカウントを大量に取得(規約違反の場合が多いですが・・・)したい場合もあるかと思います。そんなときにダミー情報を入力することがありますが、郵便番号をわざわざ調べて入力するのは非常に手間です。今回はその手間を省くために郵便番号が掲載されているページからランダムで郵便場号を取得する方法を解説します。

目次

スポンサー リンク

指定した範囲でランダム(乱数)の整数を取得する処理の流れ

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

  • ①変数宣言
  • ②「ieView」を利用して郵便番号ページをIEで起動
  • ③HTMLドキュメントのtableタグデータを抽出
  • ④テーブルタグデータ内から北海道のテーブルをチェック
  • ⑤北海道テーブルのセル数を取得
  • ⑥makeRndIntサブルーチンを利用してランダムでセル番地を取得
  • ⑦ランダムで取得したセル番地の郵便番号を抽出

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

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

  • ieView
  • ieCheck

ieViewとは

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

ieView("IEオブジェクト","表示させたいURLの文字列","IE表示・非表示の値[省略可]","Y位置の値[省略可]","X位置の値[省略可]","幅の値[省略可]","高さの値[省略可]")
構文ieView(objIE,urlName,[viewFlg],[ieTop],[ieLeft],[ieWidth],[ieHeight])
引数名データ型内容値の事例初期値省略
objIEInternetExplorerIEオブジェクトobjIE,objIE2×
urlNameString表示させたいURLの文字列"http://www.vba-ie.net/"×
viewFlgBooleanIE表示・非表示の値True,FalseTrue
ieTopIntegerWebブラウザのY位置の値1000
ieLeftIntegerWebブラウザのX位置の値1500
ieWidthIntegerWebブラウザの幅の値400600
ieHeightIntegerWebブラウザの高さの値300800

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

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

ieTop」「ieLeft」はWebブラウザのX位置・Y位置の設定で省略することができます。
ieWidth」「ieHeight」はWebブラウザの幅・高さの設定でこちらも省略可能です。

ieCheckとは

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

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

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

郵便番号をランダムで自動取得するサンプルコード

今回のサンプルコードは指定した範囲でランダム(乱数)の整数を取得するマクロになります。

Sub sample()

    Dim objIE As InternetExplorer
    Dim objTag As Object
    Dim maxInt As Integer, Target As Integer
    
    '郵便番号ページをIE(InternetExplorer)で起動
    Call ieView(objIE, "http://www.vba-ie.net/code/postdata.html")
    
    'テーブルデータを抽出
    For Each objTag In objIE.document.getElementsByTagName("table")
    
        '北海道テーブルを探す
        If InStr(objTag.outerHTML, "北海道") > 0 Then
        
            '北海道テーブルのセルの数を代入
            maxInt = objTag.Cells.Length - 1
            
            'ランダムでセルの番地を取得
            Target = makeRndInt(1, maxInt)
            
            'ランダムで取得したセルの番地の郵便番号を抽出
            Debug.Print "郵便番号:" & objTag.Cells(Target).innerText
            
            Exit For
        
        End If
    
End Sub

郵便番号取得用ページのHTMLソース

<table>
<caption>北海道</caption>
<tr><th colspan="10">郵便番号</th></tr>
<tr><td>0600000</td><td>0640941</td><td>0600041</td><td>0600042</td><td>0640820</td>
<td>0600031</td><td>0600001</td><td>0640821</td><td>0600032</td><td>0600002</td></tr>
<tr><td>0640822</td><td>0600033</td><td>0600003</td><td>0640823</td><td>0600034</td>
<td>0600004</td><td>0640824</td><td>0600035</td><td>0600005</td><td>0640825</td></tr>
<tr><td>0028007</td><td>0028008</td><td>0028009</td><td>0028010</td><td>0028011</td>
<td>0028012</td><td>0028061</td><td>0028062</td><td>0028063</td><td>0028064</td></tr>
</table>

※必要な項目のみ抽出しています。

実行結果

北海道テーブルの中からランダムで郵便番号を取得する。
郵便番号:0600001

解説


Dim objIE As InternetExplorer
Dim objTag As Object
Dim maxInt As Integer, Target As Integer

を宣言します。


'郵便番号ページをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net/code/postdata.html")

ieViewを利用して、郵便場号ページを表示させます。


'テーブルデータを抽出
For Each objTag In objIE.document.getElementsByTagName("table")
(省略)
Next

getElementsByTagNameメソッドを利用して、テーブルデータを抽出し、テーブルの数だけループ処理をしています。


'北海道テーブルを探す
If InStr(objTag.outerHTML, "北海道") > 0 Then
(省略)
End If

If~Thenステートメントを利用して、テーブルデータ内に「北海道」が含まれているテーブルを探します。


'北海道テーブルのセルの数を代入
maxInt = objTag.Cells.Length - 1

makeRndIntサブルーチンの引数に代入するための最大値を設定しています。Cells.Lengthはセルの総数で、0からなので-1で調整しています。


'ランダムでセルの番地を取得
Target = makeRndInt(1, maxInt)

makeRndIntサブルーチンに引数を代入してランダムでセルの番地を取得します。


'ランダムで取得したセルの番地の郵便番号を抽出
Debug.Print "郵便番号:" & objTag.Cells(Target).innerText

objTag.Cellsにセル番地をセットしてinnerTextプロパティでtdタグ内にある郵便番号だけを取得します。


Exit For

最後にループを脱出して完了です。

郵便番号をランダムで自動取得するサブルーチン「postGet」の解説


Function postGet(Optional areaName As String) As String

    Dim objIE90 As InternetExplorer
    Dim objTag90 As Object
    Dim i As Integer, i2 As Integer
    
    '郵便番号ページをIE(InternetExplorer)で起動
    Call ieView(objIE90, "http://www.vba-ie.net/code/postdata.html", False)
    
    If areaName = "" Then
    
        '都道府県テーブルからランダムでテーブル番号を取得
        i = makeRndInt(0, 46)
        
        '指定したテーブルのセルからランダムでセル番号を取得
        i2 = makeRndInt(1, 200)
        
        'ランダムで取得したセルの番号の郵便番号を抽出
        postGet = objIE90.document.getElementsByTagName("table")(i).Cells(i2).innerText
        
    Else
    
        'テーブルデータを抽出
        For Each objTag90 In objIE90.document.getElementsByTagName("table")
        
            '地域テーブルを探す
            If InStr(objTag90.outerHTML, areaName) > 0 Then
            
                'ランダムでセルの番号を取得
                i = makeRndInt(1, 200)
                
                'ランダムで取得したセルの番号の郵便番号を抽出
                postGet = objTag90.Cells(i).innerText

                Exit For
            
            End If
    
        Next
    
    End If
    
    'IEオブジェクトを閉じる
    objIE90.Quit

End Function

こちらが「郵便番号をランダムで自動取得するサブルーチン」になります。こちらは戻り値が必要ですので、functionプロシージャで対応しています。引数には「都道府県名」の1つが設定されています。以下が引数の詳細になります。

postGet("都道府県名")
構文postGet(areaName)
引数名データ型内容値の事例初期値省略
areaNameString都道府県名"北海道","東京都",
"大阪府","福岡県"

「areaName」は任意項目です。「areaName」には、取得したい郵便場号の都道府県名を設定します。指定しない場合は、ランダムで都道府県を選択します。

「postGet」を利用してランダムで郵便番号を取得するサンプルコード

Sub sample()

    Dim postNum As String
    
    postNum = postGet("北海道")

    Debug.Print "郵便番号7桁:" & postNum
    Debug.Print "郵便番号前3桁:" & Left(postNum, 3)
    Debug.Print "郵便番号後4桁:" & Right(postNum, 4)
    Debug.Print "郵便番号ハイフン7桁:" & Left(postNum, 3) & "-" & Right(postNum, 4)

End Sub

実行結果

便番号7桁:0028006
郵便番号前3桁:002
郵便番号後4桁:8006
郵便番号ハイフン7桁:002-8006

解説

postGet」の引数に「北海道」を設定しています。これで北海道の郵便番号をランダムで取得します。
取得した郵便番号は7桁で返ってきます。
前3桁、後4桁、ハイフン付きで取得したい場合は、サンプルコードのように「Right関数」「Left関数」を利用して取得しましょう。

まとめ

今回は、makeRndIntサブルーチンを利用して郵便番号をランダムで取得する方法について解説しました。こちらは特にアカウント作成時に利用しますので、利用頻度も高いかと思います。

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