サラリーマンの投資と仕事研究所

サラリーマンのビジネス手法研究とその実践記録

溜まったブックマークを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のリンクを一つ取り出してセルに書き込みセルを一つ下に動かすということをリンクがある限り続けます。