【サンプルコード付き】Excel VBAで始めるスクレイピング

スクレイピングは、Webサイトからデータを自動取得する技術で、データ分析や業務効率化に役立ちます。


一般的にスクレイピングを行うには、Python、Ruby、JAVA、PHPなどのプログラミング言語が用いられますが、プログラミング経験のない人にとってこれらのスキルを習得することは容易ではありません。

プログラミングに自信がない方でも始められる手軽な方法として、Excel VBAを使ったスクレイピングがあります。

本記事では、Excel VBAを使ったスクレイピングのやり方をサンプルコード付きで解説します。

<h2>Excel VBAを使ったスクレイピング</h2>
Excel VBA（Visual Basic for Applications）は、Excel内で使用できるプログラミング言語です。VBAを用いることで、Webサイトからデータを直接取得し、Excelシートに取り込むことができます。

Excel VBAの最大のメリットは、開発環境の構築が不要である点です。Excelに標準搭載されているため、追加のソフトウェアをインストールせずに、すぐにスクレイピングを始めることができます。Pythonなどのプログラミング言語の場合、言語のインストールやパスの設定など環境準備が必要になります。

また、取得したデータを直接Excelシートに保存し、そのまま整理や分析に活用できる点も利便性が高いといえます。

例えば、特定の列にデータを自動入力したり、データに基づいたグラフを作成することもプログラム内で実現できます。

<h2>【サンプルコード付き】Excel VBAでのスクレイピング実践</h2>
ここからは、Excel VBAを使って実際にWebスクレイピングを行う手順を解説します。

今回は例示用のドメインとして利用される「example.com」のデータをスクレイピングしてみましょう。

**Step 1. Excel VBAの設定**
まず、ExcelでVBAを使用するための設定を行います。以下の手順に沿って進めていきましょう。

新しいExcelを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/c6a9aa77-fbc5-4903-d428-4e7938130f27.png)

次回以降もVBAを起動できるように、名前を付けて保存します。
「Excel マクロ有効ブック(*.xlsm)」の形式で保存しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/3daaba4e-3450-ad0f-1cd7-6ebecdbe5e31.png)


Excelのホーム画面に戻り、「Alt + F11」でVBAエディタを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/0ae998d5-fd9a-bb90-2a10-61780cef5aa4.png)


「挿入」メニューから「標準モジュール」を選択し、新しいモジュールを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/be7a2606-7994-510e-1e02-0021514fb704.png)


「ツール」をクリックして、「参照設定」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/2545715f-981c-97c5-20b0-55feb5ff1f8d.png)


参照可能なライブラリファイルの一覧から、以下の2項目にチェックを入れます。
Microsoft HTML Object Library
Microsoft Internet Controls

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/3bee76de-4015-ddfa-5fa0-c380157bf693.png)


これで、Excel VBAを使ったスクレイピングの準備が完了しました。

**Step 2. コードの入力**
次に、以下のサンプルコードをモジュールに入力します。
このコードでは、example.comからh1タグの情報を抽出してセルA1に転記します。

```
Sub test()
    Dim ie As Object
    Dim htmlDoc As Object
    Dim htmlElement As Object
    Dim i As Integer

    ' Internet Explorerのインスタンスを作成
    Set ie = CreateObject("InternetExplorer.Application")
    ' スクレイピングしたいウェブページを開く（例：Example.com）
    ie.navigate "http://www.example.com"
    ie.Visible = False

    ' ページが完全に読み込まれるまで待機
    Do While ie.readyState <> READYSTATE_COMPLETE
        Application.Wait DateAdd("s", 1, Now)
    Loop

    ' HTMLドキュメントを取得
    Set htmlDoc = ie.document
    ' HTMLドキュメントから特定の要素を取得（例：タグ名が"h1"のもの）
    Set htmlElement = htmlDoc.getElementsByTagName("h1")

    ' 取得した要素をExcelシートに転記
    For i = 0 To htmlElement.Length - 1
        Sheets("Sheet1").Cells(i + 1, 1).Value = htmlElement.Item(i).innerText
    Next i

    ' IEを閉じる
    ie.Quit
    Set ie = Nothing
End Sub
```

**Step 3. スクレイピングの実行**
「Sub/ユーザーフォームの実行」を押して、スクレイピングを実行します。
ExcelシートのA1に「Example Domain」の文字が入力されていれば成功です。

**Step 4. 【応用編】別データの取得に挑戦**
スクレイピングの応用として、異なるHTML要素や別ページからデータを取得する方法を試してみましょう。

example.comのページから右クリック、「ページのソースを表示」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/20d233be-c2a4-e713-5857-8f3bfa4cf6f7.png)


今回は41行目～43行目の<p>タグの文字を取得してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/65633c5e-b109-be7d-3173-4467b5ba0400.png)


Step 2で作成したコードを以下のように書き換えましょう。
   （変更前）
``Set htmlElement = htmlDoc.getElementsByTagName("h1")``
（変更後）
``Set htmlElement = htmlDoc.getElementsByTagName("p")``

「Sub/ユーザーフォームの実行」を押すと、無事取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/ec3ac48e-86d3-6319-b58f-cd2145e78294.png)


このように、取得したいページのHTML構造に応じて、コード内でターゲット要素を変更することで、異なるデータを取得ができます。

<h2>Excel VBAを利用する際の注意点・デメリット</h2>	

Excel VBAは手軽にスクレイピングを始めるには便利なツールですが、いくつか注意点やデメリットがあります。

**IT知識・プログラミングのハードル**
Excel VBAでスクレイピングを行うには、プログラミングの基本的な知識が必要です。
また、指定した要素が見つからなかった場合や、ページの読み込みが完了していない場合など、コードを適切に書かなければエラーが発生することもあります。

**IE（Internet Explorer）のサポート終了**
Excel VBAでスクレイピングを行う際には、主にInternet Explorer（IE）が使用されますが、Microsoftは2022年にIEのサポートを終了しました。その結果、最新のWebページでは正常に動作しないケースが増えています。

さらに、Excel VBAではネイティブで他のブラウザ（例えば、Google ChromeやMozilla Firefoxなど）を操作する機能がサポートされていません。

Seleniumや対象のウェブサイトがAPIを提供している場合は、APIを介してデータを取得するなどの対応を検討する必要があります。

<h2>スクレイピングにはOctoparseがおすすめ！</h2>	

ここまでExcel VBAのスクレイピングについて解説しました。プログラミングやVBAのスキルの習得が難しいと感じた人もいるのではないでしょうか。
そこで、ノーコードで直観的にスクレイピングができるツール [「Octoparse」](https://www.octoparse.jp/)をご紹介します。

**Octoparseによるスクレイピングの方法**

ここでは、Octoparseを使ったスクレイピングの手順を解説します。
1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。
ここでは、[Octoparseブログ](https://www.octoparse.jp/blog)のURLを入力し、「スタート」 ボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/4aeb87da-285a-2052-4795-3f0f930e48e1.png)


2.Octoparseにてページが読み込まれると、自動的にページ上の内容を識別します。
自動識別機能は、自動的にページ上の必要なデータを検出して識別してくれる便利な機能ですね。

3.識別が完了すると、データプレビュー内に識別されたデータが表示されます。確認後、「操作提案」から「ワークフローの生成」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/4d8bd92a-de23-8691-aa60-8018c10a7d10.png)


4.Webクローラーの作成が完了しました。画面右上の「実行」ボタンをクリックすると、すぐにデータの抽出が開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/c15ea25c-82dd-f441-6df9-9eda2a8e3d45.png)


5.わずか数分でデータ抽出が完了しました。抽出したデータは、Excelやcsvなどにエクスポートできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/79f800cd-a5af-c77d-8740-68190dec351f.png)


6.エクスポートしたデータは自由に加工できます。
こちらはExcelにエクスポートしたデータです。Octoparseブログに掲載されている記事のURL、タイトル、カテゴリ、執筆者名などがまとめられています。
ここまでの作業で行ったのは、URLを貼り付けたことと、わずか数回のクリック操作のみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/0aa41db2-cfc4-405a-f4cd-ecad16d6336d.png)


<h2>Octoparseでスクレイピングするメリット</h2>
Octoparseは、初心者からエンタープライズまで幅広いユーザーに利用されているツールです。その理由は、複雑な設定やプログラミングを必要とせず、直感的な操作で効率的にデータを収集できる点にあります。

特に、動的ページや認証が必要なサイトへの対応力、スケジュール実行による自動化機能など、多機能で柔軟な点が魅力です。

さらに、Octoparseにはスケジュール実行機能が搭載されており、定期的にデータを収集するタスクを自動化できます。これにより、手動で同じ作業を繰り返す手間が省け、業務の効率が大幅に向上します。

[ホームページ](https://www.octoparse.jp/)に導入事例や[スクレイピングテンプレート](https://www.octoparse.jp/template)を公開していますので、ぜひご覧ください。

<h2>まとめ</h2>
スクレイピングは、業務効率化やデータ活用に役立つ技術です。
Excel VBAは、初心者にも手軽に始められる方法として魅力的ですが、Webページの理解やプログラミングスキルの習得が必要となります。

一方、Octoparseはプログラミング不要で初心者でも簡単に操作でき、高度なスクレイピングが可能です。

目的や作業内容に応じて適切なツールを選択し、スクレイピングを活用したデータ活用に挑戦してみましょう。