営業系の会社などは、テレアポリストの作成に困るケースも多々あるかと思います。その時、企業リストを作成するのに手軽なのはなんといっても「iタウンページ」。今回はiタウンページからのデータ抽出をVBAを使って簡単に行う方法を紹介します。
利用手順
本サンプルの利用方法は以下の通りです。
- 以下のVBAをExcelのVBAに貼り付け
- 「IE_kidou」関数を実行して、iタウンページをインターネットエクスプローラーで表示
- 前項で表示されたiタウンページ内を適宜検索し、抽出したい一覧を表示する
- 「listka」関数を実行し、表示内容をリスト化
IE起動関数(VBA)
' vba でIEを起動する Sub IE_kidou() 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") '見えるようにする objIE.Visible = True '文字列で指定したURLに遷移 objIE.Navigate "https://itp.ne.jp" '表示終了まで待つ Do While objIE.Busy = True DoEvents Loop End Sub
【解説】
このVBAは、IEに表示された内容を取得し社名や電話番号の部分だけをうまく抽出するロジックを入れています。そのため、まずはIEを起動する必要があります。
リスト化関数(VBA)
Sub listka() Dim ObjShell As Object Dim ObjWindow As Object Dim WinExist As Boolean ' 起動中のIEを取得し、objIEにセット WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set objIE = ObjWindow End If Next Set ObjShell = Nothing ' 最終行を取得 insert_row = Cells(Range("A1").SpecialCells(xlLastCell).Row + 1, 1).End(xlUp).Row result_flg = False 'とりあえず5ページ目まで取得するサンプル For i = 1 To 5 ' 全てのタグを確認 For Each objTAG In objIE.Document.all ' articleタグ以降が取得対象 If objTAG.tagName = "ARTICLE" Then result_flg = True End If ' 以下条件に合致したら当該ページのデータ取得は終了 If objTAG.tagName = "DIV" And objTAG.className = "bottomNav" Then result_flg = False next_flg = True End If If result_flg = True Then ' 名称取得 If objTAG.tagName = "H4" Then insert_row = insert_row + 1 Cells(insert_row, 1) = objTAG.innerText End If ' 住所や電話番号等の取得 If objTAG.tagName = "P" Then If Left(objTAG.innerText, 2) = "住所" Then ' 郵便番号と住所を分離してセット temp_val = Replace(objTAG.innerText, "住所 ", "") temp_val = Replace(temp_val, " 地図・ナビ", "") Cells(insert_row, 2) = Left(temp_val, 9) Cells(insert_row, 3) = Mid(temp_val, 11) ElseIf Left(objTAG.innerText, 3) = "TEL" Then ' TEL temp_val = Replace(objTAG.innerText, "TEL ", "") Cells(insert_row, 4) = temp_val ElseIf Left(objTAG.innerText, 3) = "URL" Then ' URL temp_val = Replace(objTAG.innerText, "URL ", "") Cells(insert_row, 5) = temp_val ElseIf Left(objTAG.innerText, 5) = "EMAIL" Then ' EMAIL temp_val = Replace(objTAG.innerText, "EMAIL ", "") Cells(insert_row, 6) = temp_val End If End If End If 'ページネーションのリンク先を取得し、次のページのURLを取得 If next_flg = True Then If objTAG.tagName = "A" And objTAG.innerText = "次へ" Then next_url = objTAG.href Exit For End If End If Next '次のページへ objIE.Navigate next_url '表示終了まで待つ Do While objIE.Busy = True DoEvents Loop Next i End Sub