読者です 読者をやめる 読者になる 読者になる

三流君のソースコード置き場

三流プログラマーが作成したコードが置いてあります。あまり参考にならないと思いますがヨロシクお願いします。

VBA IE操作 リンクの取り出し objIE.Document.Links のサンプルコード

リンクから値を抜く、そんな処理をしてみたいと思います。
ランキングのリンクだったり、
過去記事のリンクだったり、
ウェブページはリンクでつながっているので、

今回は、サンプル処理として、
バックナンバーの一覧ページからリンクを取り出してみます。

操作と解説動画
【VBA IE操作】リンクの取り出し objIE.Document.Links 【三流君】 - YouTube
www.youtube.com


サンプル元は
三流君VBAでIEのリンクを操作 Document.Linksを探る
です。

下記のコードをコピー貼り付けして、テストしてみてください。

Sub ie_Link_TEST()

'1.調査したいURLをInputBoxで受け取ります(かなり手抜き・・・)
    Dim strURL  As String   '入力値を受け取る変数
    
    'INPUTBOXでURLをもらう
    strURL = InputBox("調査するURLは?", "URL入力", 

"http://www.ken3.org/backno/backno_vba_mokuji.html")
    If strURL = "" Then
        MsgBox "調査したいURLを指定してください"
        Exit Sub  '途中で抜ける
    End If

'2.IEを起動させ、目的のページを表示させます。

    Dim objIE      As Object  'IEオブジェクト参照用
    
    'IEを起動する
    Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
    objIE.Visible = True '見えるようにする(お約束)

    '.Navigate で 指定したURLを開く
    objIE.Navigate strURL
    
    '表示完了を待つ
    While objIE.ReadyState <> 4
        While objIE.Busy = True
            DoEvents  '特に何もしないで.Busyの状態が変わるまで待つ
        Wend
    Wend
    
'3.目的のページからリンク先を取り出し、セルに書き出します。
    
    Dim i     As Integer '添え字 i番目などで使用
    Dim yLINE As Integer '行カウンタ、Y行目
   
    'html ドキュメント リンク オブジェクトからデータをセルへ転記(代入)する。
    Workbooks.Add  '新規ブックを追加 データ転送用に新規のブックを追加する
    Range("A1") = "調査したURLは " & strURL & " です"  'A1にURLを記述(セット)
    Range("D1") = "リンクの数は " & objIE.Document.Links.Length & "です"  'D1にリンクの数

をセット

    Range("A2") = ".Href(リンク先)"   'A2~F2 2行目に見出しをセットする
    Range("B2") = ".OuterText"
    Range("C2") = ".OuterHTML"
    Range("D2") = ".InnerText"
    Range("E2") = ".InnerHTML"
    Range("F2") = ".Target"
    Columns("A:F").ColumnWidth = 22 '列幅を22に変更

    yLINE = 3  'セット開始の行を代入する
    For i = 0 To objIE.Document.Links.Length - 1
        'データをセルへセットする  'を付けて文字列にする(セルにセットしたいので)
        Cells(yLINE, "A") = "'" & objIE.Document.Links(i).Href      'リンク先
        Cells(yLINE, "B") = "'" & objIE.Document.Links(i).OuterText '自分を含む テキスト

(Innerと変わりない?)
        Cells(yLINE, "C") = "'" & objIE.Document.Links(i).OuterHTML '自分を含む HTML
        Cells(yLINE, "D") = "'" & objIE.Document.Links(i).InnerText '内側のテキスト
        Cells(yLINE, "E") = "'" & objIE.Document.Links(i).InnerHTML '内側のHTML
        Cells(yLINE, "F") = "'" & objIE.Document.Links(i).Target    '_Blank や 表示先フレ

ームの名前など
        
        yLINE = yLINE + 1 'セット位置(行)を+1する
    Next i
    
    '抜き出し作業が終わったので、通常.QuitでIEを終了させる が 今回は残す
    'objIE.Quit
    Set objIE = Nothing
   
    MsgBox "処理終了、ブラウザの表示内容 と シートを確認してください"
   
End Sub

ポイントは、
^^^^^^^^^^^
objIE.Document.Links
にリンク情報が格納されているので、
今回は、ここから探ってみたいと思います。

リンクの数が、
.Length
でわかるるので、これを利用して、ループを作り、
For i = 0 To objIE.Document.Links.Length - 1
↑カウンターが0から始まるので、
そこがポイントかなぁ。

蛇足ですが、Excel VBAのパターンだと、
.Countがオブジェクトの数で、1からスタートなので、
その感覚からと少し違うので注意が必要です。

Sub TEST_SHEET_NAME()
    'シートの名前をテストで表示する
    Dim i As Integer   'カウンター、添え字
    For i = 1 To ActiveWorkbook.Sheets.Count
        MsgBox i & " シートの名前 " & ActiveWorkbook.Sheets(i).Name
    Next i
End Sub

※蛇足で、よけいに混乱させてしまったらすみません・・・

あとは、
objIE.Document.Links(i).プロパティ
で、i番目の値を取り出す、そんなパターンで使用しています。

いろいろなプロパティがあるのですが、
今回は、下記のプロパティをテストで書き出してみます。

.Href(リンク先)
.OuterText これで値を取れるけど名前的に.InnerText がいいかな
.OuterHTML Aタグ全体を見れるので、これを使うパターンが多いかな
.InnerText アンカーテキスト、リンクのテキスト
.InnerHTML あまり意味ないかな ぉぃぉぃ(A 全体が見えないので)

リンクは、A アンカータグを利用しているので、
<a Href="URL">リンクのテキスト</a>
を頭のスミに入れつつ、

.HrefでURL
.InnerTextでリンクのテキストがわかるので、
あとは、組み合わせで、
="<a Href=""" & URL & """>" &

リンクのテキスト & "</a>"
みたいにすると、
他のページに貼り付けるHTML文とか作りやすいかなぁ。


VBA から IEで表示させたページのリンクを取り出す、
そんな操作の参考となれば・・・・


操作と解説動画※冒頭の動画と同じです
www.youtube.com
【VBA IE操作】リンクの取り出し objIE.Document.Links 【三流君】 - YouTube