VBAのIE(InternetExplorer)制御で役立つ郵便番号をランダムで自動取得する制御方法について解説しています。
前回の「指定した範囲でランダム(乱数)の整数を取得」でランダムで整数を取得するサブルーチンを解説しましたが、早速こちらを利用します。今回は、郵便場号をランダムで自動取得する方法について解説します。何かしらのアカウントを新規作成する場合に郵便番号を入力することはよくあることです。アカウント作成の中には、会員登録をしなければ得られないツールや情報を提供しているサイトはいくつもあります。他にアカウントを大量に取得(規約違反の場合が多いですが・・・)したい場合もあるかと思います。そんなときにダミー情報を入力することがありますが、郵便番号をわざわざ調べて入力するのは非常に手間です。今回はその手間を省くために郵便番号が掲載されているページからランダムで郵便場号を取得する方法を解説します。
以下が今回の処理の流れになります。
ieViewは指定したURLをIEで起動させ、Webページが完全に読み込まれるまで待機処理をするマクロです。引数は7つ設定されています。以下が引数の詳細になります。
構文 | ieView(objIE,urlName,[viewFlg],[ieTop],[ieLeft],[ieWidth],[ieHeight]) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
objIE | InternetExplorer | IEオブジェクト | objIE,objIE2 | × | |
urlName | String | 表示させたいURLの文字列 | "http://www.vba-ie.net/" | × | |
viewFlg | Boolean | IE表示・非表示の値 | True,False | True | ● |
ieTop | Integer | WebブラウザのY位置の値 | 100 | 0 | ● |
ieLeft | Integer | WebブラウザのX位置の値 | 150 | 0 | ● |
ieWidth | Integer | Webブラウザの幅の値 | 400 | 600 | ● |
ieHeight | Integer | Webブラウザの高さの値 | 300 | 800 | ● |
「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はWebページが完全に読み込まれるまで待機処理をするマクロです。引数には「IEオブジェクト」の1つが設定されています。以下が引数の詳細になります。
構文 | ieCheck(objIE) |
---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
objIE | InternetExplorer | IEオブジェクト | 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
※ドラッグ(スワイプ)すると全体を確認できます。
※必要な項目のみ抽出しています。
北海道テーブルの中からランダムで郵便番号を取得する。
郵便番号: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
※ドラッグ(スワイプ)すると全体を確認できます。
最後にループを脱出して完了です。
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(areaName) | ||||
---|---|---|---|---|---|
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
areaName | String | 都道府県名 | "北海道","東京都", "大阪府","福岡県" | ● |
「areaName」は任意項目です。「areaName」には、取得したい郵便場号の都道府県名を設定します。指定しない場合は、ランダムで都道府県を選択します。
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操作に役立つ指定した桁数でパスワードをランダム自動生成 >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。