Excel VBAでオンラインマガジンや新聞から特集記事を取得する方法

この記事では、Excel VBAを使用してオンラインマガジンや新聞から特集記事を取得する処理について詳しく説明します。初心者でも理解しやすいように具体的なコード例とその解説、さらに実際の応用例を3つを含めています。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

Excel VBAでの記事取得の基本

Excel VBAを使用してウェブ上のコンテンツを取得する場合、主に「Microsoft XML, v6.0」というライブラリを利用します。このライブラリを使うことで、Webページの内容を取得し、Excel上で操作が可能となります。


Sub GetArticle()
    Dim xml As Object
    Dim html As Object
    Dim element As Object
    
    'XMLとHTMLオブジェクトの初期化
    Set xml = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set html = CreateObject("htmlfile")
    
    'URLを指定してWebページを取得
    xml.Open "GET", "https://example-magazine.com/special-article", False
    xml.send
    
    '取得したWebページをHTMLオブジェクトに読み込む
    html.body.innerHTML = xml.responseText
    
    '特定のタグやクラス名で要素を取得
    Set element = html.getElementsByTagName("div")(0)
    
    '取得した要素をExcelのA1セルに出力
    Sheets(1).Range("A1").Value = element.innerText

End Sub

上記コードの解説

1. `MSXML2.ServerXMLHTTP.6.0`を利用してWebページの内容を取得します。
2. `htmlfile`オブジェクトを使用して、取得した内容をHTMLとして解析します。
3. `getElementsByTagName`メソッドを使用して、HTML内の特定の要素を取得します。
4. 最後に、取得した内容をExcelの指定したセルに出力します。

応用例1: 複数の記事タイトルを一括取得


Sub GetMultipleTitles()
    Dim xml As Object
    Dim html As Object
    Dim elements As Object
    Dim i As Integer
    
    Set xml = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set html = CreateObject("htmlfile")
    
    xml.Open "GET", "https://example-magazine.com/special-article", False
    xml.send
    
    html.body.innerHTML = xml.responseText
    
    '記事タイトルが格納されている要素をすべて取得
    Set elements = html.getElementsByClassName("article-title")
    
    For i = 0 To elements.Length - 1
        Sheets(1).Cells(i + 1, 1).Value = elements.Item(i).innerText
    Next i

End Sub

解説

この応用例では、`getElementsByClassName`メソッドを使用して、特定のクラス名を持つすべての要素を一括で取得しています。その後、Forループを使って取得した各要素のテキストをExcelに出力します。

応用例2: 最新の記事のリンクを取得


Sub GetLatestArticleLink()
    Dim xml As Object
    Dim html As Object
    Dim element As Object
    
    Set xml = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set html = CreateObject("htmlfile")
    
    xml.Open "GET", "https://example-magazine.com/special-article", False
    xml.send
    
    html.body.innerHTML = xml.responseText
    
    '最新の記事のリンクを取得
    Set element = html.getElementsByClassName("latest-article").Item(0).getElementsByTagName("a")(0)
    
    '取得したリンクをExcelに出力
    Sheets(1).Range("A1").Value = element.href

End Sub

解説

この例では、最新の記事のリンクを直接取得しています。特定のクラス名を持つ要素から、さらにタグ名で要素を絞り込んでいます。

応用例3: 記事の公開日を取得


Sub GetArticleDate()
    Dim xml As Object
    Dim html As Object
    Dim element As Object
    
    Set xml = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    Set html = CreateObject("htmlfile")
    
    xml.Open "GET", "https://example-magazine.com/special-article", False
    xml.send
    
    html.body.innerHTML = xml.responseText
    
    '記事の公開日を取得
    Set element = html.getElementsByClassName("publish-date").Item(0)
    
    '取得した公開日をExcelに出力
    Sheets(1).Range("A1").Value = element.innerText

End Sub

解説

この応用例では、`getElementsByClassName`メソッドを利用して記事の公開日を取得しています。公開日は一般的に記事ページ内の特定のクラス名を持つ要素に格納されていることが多いので、そのクラス名をターゲットにして情報を取得します。

まとめ

Excel VBAを使用することで、オンラインマガジンや新聞サイトから様々な情報を効率的に取得することができます。初心者の方でも、上記の基本的なコードを参考にして、独自の処理を実装してみることをおすすめします。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次