Excel VBAでポータルサイトからニュース記事を自動収集する方法

この記事では、Excel VBAを使用して、ポータルサイトから特定のトピックに関連するニュース記事を収集する方法について詳しく説明します。初心者でも理解しやすいように具体的なコード例、その解説、応用例を含めて説明していきます。

目次

Excel VBAの基本

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

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

基本的なVBAコードでのニュース記事収集

VBAはExcelを自動化するためのプログラミング言語です。Webスクレイピングと組み合わせることで、Webサイトから情報を自動収集することも可能です。


Sub CollectNews()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    Dim html As Object

    'IEを非表示で起動
    IE.Visible = False
    'ポータルサイトへアクセス
    IE.Navigate "http://example-portal-site.com/news-topic"

    '読み込み待機
    Do Until IE.ReadyState = 4
        DoEvents
    Loop

    'ページのHTMLを取得
    Set html = IE.document

    'ニュースのタイトルを取得
    Dim newsTitles As Object
    Set newsTitles = html.getElementsByClassName("news-title")
    
    'Excelにニュースタイトルを記入
    Dim i As Integer
    For i = 0 To newsTitles.Length - 1
        ThisWorkbook.Sheets(1).Cells(i + 1, 1).Value = newsTitles.Item(i).innerText
    Next i

    'IEを閉じる
    IE.Quit
End Sub

コードの詳細解説

上記のコードは、Internet Explorerをバックグラウンドで起動して、指定したポータルサイトのニューストピックページにアクセスします。その後、ページのHTMLからニュースのタイトルを収集し、Excelに記入するものです。

– `CreateObject(“InternetExplorer.Application”)`:Internet Explorerを起動します。
– `IE.Navigate`:指定したURLにアクセスします。
– `html.getElementsByClassName`:HTML内の特定のクラス名を持つ要素を取得します。
– `ThisWorkbook.Sheets(1).Cells(i + 1, 1).Value`:取得したニュースタイトルをExcelのシートに記入します。

応用例

応用例1: タイトルだけでなく、URLも収集する


Sub CollectNewsWithLink()
    '...上記の基本コードを流用...
    
    'ニュースのURLを取得
    Dim newsLinks As Object
    Set newsLinks = html.getElementsByClassName("news-link")

    For i = 0 To newsLinks.Length - 1
        ThisWorkbook.Sheets(1).Cells(i + 1, 2).Value = newsLinks.Item(i).href
    Next i
End Sub

応用例2: 収集した情報のフィルタリング

特定のキーワードを含むニュースだけをExcelに記入する。


Sub CollectFilteredNews()
    '...上記の基本コードを流用...

    Dim keyword As String
    keyword = "特定キーワード"

    For i = 0 To newsTitles.Length - 1
        If InStr(newsTitles.Item(i).innerText, keyword) > 0 Then
            ThisWorkbook.Sheets(1).Cells(i + 1, 1).Value = newsTitles.Item(i).innerText
        End If
    Next i
End Sub

応用例3: ニュースの公開日を収集する


Sub CollectNewsWithDate()
    '...上記の基本コードを流用...

    Dim newsDates As Object
    Set newsDates = html.getElementsByClassName("news-date")

    For i = 0 To newsDates.Length - 1
        ThisWorkbook.Sheets(1).Cells(i + 1, 3).Value = newsDates.Item(i).innerText
    Next i
End Sub

まとめ

Excel VBAを利用することで、ポータルサイトからのニュース記事の自動収集が可能になります。この技術を応用することで、様々な情報収集やデータ整理の自動化が期待できます。

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

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

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

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

コメント

コメントする

目次