こんにちは、Ryoです。
表示しているウェブサイトのページでリンク設定している文字列やリンク先の情報を取得したいようなことがある場合、VBAではInternet ExplorerオブジェクトのDocumentプロパティを利用することで対処することができます。今回はその内容について書いていきたいと思います。
1.サンプル概要
ウェブブラウザはInternet Explorerを使用しますので、起動し指定URLを表示させます。本例では当サイトのHPを指定していますのでhttps://jizilog.com/になります。

指定URLが表示されブラウザの読み込みが完了後、全てのリンクに対し処理を行い、セルA1に「タイトル」、セルB列に「リンクが設定された文字列」、セルC列に「リンクのURL」を表示します。

以上の内容について書いていきます。
2.サンプルコード
ウェブページのHTML要素にアクセスして情報を取得する場合はInternet ExplorerオブジェクトのDocumentプロパティを使用し、リンク先情報はLinkオブジェクトのherfプロパティを使用することで取得することができます。
Sub Sample1()
Dim ObjBrw As Object
Dim temp As Object
Dim i As Long
i = 1
'Internet Explorerを起動する
Set ObjBrw = CreateObject("InternetExplorer.Application")
With ObjBrw
'指定URLに移動
.Navigate "https://jizilog.com/"
'Internet Explorerを表示
.Visible = True
'Busyプロパティ:True=読み込み中 False=読み込み完了
'ReadyStateプロパティ:
' 0:デフォルト値/未完了の状態
' 1:ロード中
' 2:ロード完了/操作不可状態
' 3:操作可能状態/読み込み状態は未完了
' 4:全データ読み込み完了
Do While .Busy = True Or .ReadyState <> 4
Loop
'表示URLがHTMLDocumentであることの確認
If TypeName(.Document) = "HTMLDocument" Then
'セルA1に「タイトル」を入力
Cells(i, 1).Value = .Document.Title
i = i + 1
'全リンクに対して処理を実施
For Each temp In .Document.Links
If temp.innerText <> "" Then
'リンク設定されている文字列をセルB列に入力
Cells(i, 2).Value = temp.innerText
'リンクのURLをセルC列に入力
Cells(i, 3).Value = temp.href
i = i + 1
End If
Next
End If
End With
End Sub
先ずCreateObject関数を使用してInternet Explorerを起動、Navigateメソッドで指定URLを表示します。
Set ObjBrw = CreateObject(“InternetExplorer.Application”)
With ObjBrw
.Navigate “https://jizilog.com/”
.Visible = True
表示後、この後の処理でリンク先情報などを取得するために読み込み完了までのループ処理を行います。
Do While .Busy = True Or .ReadyState <> 4
Loop
ここで使用しているBusyプロパティやReadyStateプロパティについてはサンプルコード内コメントに記載した通り、.Busy=Falseまたは .ReadyState=4で読み込み完了なので、その分岐条件でループ処理を行っています。
後は全リンクに対しInnerTextプロパティで「リンク設定されている文字列」、hrefプロパティで「リンクURL」を取得し各セルへ入力しています。
For Each temp In .Document.Links
If temp.innerText <> “” Then
Cells(i, 2).Value = temp.innerText
Cells(i, 3).Value = temp.href
i = i + 1
End If
Next
これらを実行することでInternet Explorer起動&指定URL表示後、セルA1に「タイトル」、セルB列に「リンク設定された文字列」、セルC列に「リンクURL」が入力されます。
3.まとめ
今回は表示しているウェブページに対し、リンク先情報を取得する内容について書いてみました。
取得自体は特に難しいこともないのですが、実行する際に注意しないとアクティブになっているExcelシートに書込む上、当然ながらundo機能は使えないのでお気を付けくださいませ。
以上、表示中のウェブページリンク先情報を取得する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

