前回に続いてInternet ExplorerをExcelのVBAから操作する術をまとめます。
前回はIEを起動して指定したURLの表示を完了させるところまで行きましたので、今回はそこから特定の文字列やタグを抜き出す方法を見てみます。
Excelであれば結果をダイレクトに表として残せるので、使い道は色々ありそうな気がしますしね~
まずは前回開いたページを検索していくために、ハイパーリンクを探して格納するプロシージャを追加していきます。
dim a as object
dim urls as New Collection
For Each a in ie.document getelementsByTagName("A")
urls.Add a.href
Next
これで開いたIEのHTML文書からAタグを全て探し出してurlsに格納するという動作を行います。
Dim url As Variant
Dim i As Long
i = 1
For Each url In urls
ie.Navigate url
waitNavigation ie
ActiveSheet.Cells(i, 1).Value = i
ActiveSheet.Cells(i, 2).Value = ie.document.Title
ActiveSheet.Cells(i, 3).Value = ie.locationurl
If InStr(ie.document.body.innerHTML, "AiMidorita.png") > 0 Then
ActiveSheet.Cells(i, 4).Value = "○"
Else
ActiveSheet.Cells(i, 4).Value = "-"
End If
i = i + 1
Next
MsgBox "終了しました。"
以上のプログラムを続きに書き込んで動かしてみると・・・
ざっと説明するとHTML文書から抜き出して格納したURLを順に見ていき、そのURLと探したいファイル(ここでは"AiMidorita.png")を発見したら○を、なければ×をセルに書き込んでいきます。
最後に最初から最後まで纏めて記述しておくと・・・
Sub Main() Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate "http://www.forest.impress.co.jp/article/2013/05/excelvba/" waitNavigation ie 'すべてのハイパーリンクのURLを取得 Dim a As Object Dim urls As New Collection For Each a In ie.Document.getElementsByTagName("A") urls.Add a.href Next 'すべてのページをチェック Dim url As Variant Dim i As Long i = 1 For Each url In urls 'Webページを移動 ie.Navigate url waitNavigation ie '場所を書き出し ActiveSheet.Cells(i, 1).Value = i ActiveSheet.Cells(i, 2).Value = ie.Document.Title ActiveSheet.Cells(i, 3).Value = ie.LocationURL '翠田あいの存在をチェック If InStr(ie.Document.body.innerHTML, "AiMidorita.png") > 0 Then ActiveSheet.Cells(i, 4).Value = "○" Else ActiveSheet.Cells(i, 4).Value = "-" End If i = i + 1 Next End Sub '画面移動の完了待ち Sub waitNavigation(ie As Object) Do While ie.Busy Or ie.ReadyState < 4 DoEvents Loop End Sub
といった感じでしょうか。
興味があったら是非お試しください。