リンクから値を抜く、そんな処理をしてみたいと思います。
ランキングのリンクだったり、
過去記事のリンクだったり、
ウェブページはリンクでつながっているので、
今回は、サンプル処理として、
バックナンバーの一覧ページからリンクを取り出してみます。
操作と解説動画
【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