溜まったブックマークをVBAでエクセルでリストに整理してみた!(Webページからリンク抽出を行う)
GOOGLE CHROMEを使っていますが、気になった記事をひたすらブックマークしていたら、1,000件以上になっていました。
これでは何のことやらよくわかりません。
ブックマークをまとめてみたら自分の興味のある関心分野がわかるのではないかと思い、エクセルにリストとして出力してみました。
下準備
やり方としては、IEでブックマークのリストを開き、リンクをセルに書き込んでいくマクロということになります。
そこでまずはChromeからリンクをHtml方式でExportします。
設定から入ってExportしてみてください。
そうすると「Bookmark」+「日付」のHtmlファイルが出来上がります。
IEにHtmlファイルをドラッグ&ドロップしてリンクを表示させます。
コード
それではHTMLファイルを開いたIEを取得してリンクを取り出していきましょう。
Sub 開いたページのリンク抽出() Dim ie As Object Dim sh As Object Dim win As Object Set sh = CreateObject("Shell.Application") For Each win In sh.Windows If (TypeName(win.Document) = "HTMLDocument") Then Set ie = win Exit For End If Next Dim htmlDoc As HTMLDocument Set htmlDoc = ie.Document Dim el As IHTMLElement For Each el In htmlDoc.Links Dim i As Long i = 1 Cells(i, 1).Value = el.href i = i + 1 Next el ie.Quit Set ie = Nothing End Sub
こちらを実行するとA1からA列にブックマークのURLが書き込まれていきます。
実行するときはIEではブックマークのHtmlを開いた状態のみで複数のIEを立ち上げないようにしてくださいね。
解説
先ほどのプログラムは2つのパートに分けることができます。
①現在開いているプログラムからIEを特定し、自分で動かせるようにするパート
②特定したIEからリンクを取り出し、セルに書き込んでいくパート
①は以下の部分です。
Dim ie As Object Dim sh As Object Dim win As Object Set sh = CreateObject("Shell.Application") For Each win In sh.Windows If (TypeName(win.Document) = "HTMLDocument") Then Set ie = win Exit For End If Next
Shは実行段階でWindowsにて開いているアプリケーションの集合体と考えてください。
そのなかで一つ一つ(win)のオブジェクトをHTMLで書かれたドキュメントかどうか判断し、HTMLと判断されたらieというオブジェクトに格納するということを行っています。
つまり開いているファイルの中からHTMLで書かれたウィンドウを特定するということをやっているわけです。
※注意:HTMLで書かれた文書が複数あるとどちらも選ばれる可能性があるので、IEを立ち上げるのは取得したいコンテンツのある1つだけに絞る必要があります。
②リンクの取出しと書き出しは以下です。
Dim htmlDoc As HTMLDocument Set htmlDoc = ie.Document Dim el As IHTMLElement For Each el In htmlDoc.Links Dim i As Long i = 1 Cells(i, 1).Value = el.href i = i + 1 Next el
htmlDocというHtmlの文書の集合体を作り、その中に①で取得したHTMLの文書を丸ごと入れます。次にその中からリンクのみを対象(htmlDoc.Links)として、elというリンク一つ一つを取り出していきます。elのリンクを一つ取り出してセルに書き込みセルを一つ下に動かすということをリンクがある限り続けます。