Excel VBAでWebスクレイピングを行っていると、スペックが低いパソコンでは5秒で終わる処理が、高性能なパソコンでは1分以上かかるという不思議な現象が起きることがあります。CPUやメモリが優秀でも、Excelマクロの実行速度は別の要因に大きく左右されるため、単純にPC性能だけでは判断できません。
特にInternet Explorer関連の設定、セキュリティソフト、ネットワーク環境、VBAコードの書き方などが原因になっているケースは非常に多いです。ここでは、ExcelマクロのWebスクレイピングが異常に遅くなる原因と具体的な改善策を詳しく解説します。
高スペックPCでもExcelマクロが遅くなる主な原因
まず確認したいのが、パソコンの性能以外のボトルネックです。Webスクレイピングでは以下の影響を受けやすくなります。
| 原因 | 影響 |
|---|---|
| セキュリティソフト | 通信ごとに監視が入り遅延する |
| プロキシ設定 | 通信経路が増えてレスポンス低下 |
| Officeのバージョン差 | VBA動作が異なる場合がある |
| ブラウザ制御の違い | IEオブジェクトが遅い場合がある |
| ネット回線 | Web応答速度に差が出る |
例えば、会社PCではセキュリティソフトが厳しく設定されており、Webアクセスのたびに通信スキャンが行われ、1回の取得処理が大幅に遅くなるケースがあります。
Internet Explorer制御を使っている場合は要注意
古いExcelマクロではInternetExplorer.Applicationを使ってスクレイピングしているケースがありますが、現在は非常に遅くなることがあります。
特にWindows更新後やIEサポート終了後は挙動が不安定になりやすく、ページ読み込み待機で時間がかかることがあります。
以下のようなコードを使っている場合は見直しを検討してください。
Set IE = CreateObject("InternetExplorer.Application")
可能であれば、XMLHTTPやSeleniumへの切り替えが高速化につながります。
Excel側の設定を見直す
Excel自体の設定が原因で処理が遅くなることもあります。
以下の設定をマクロ実行前に入れることで改善する場合があります。
Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseApplication.Calculation = xlCalculationManualApplication.EnableEvents = False
これにより画面更新や自動計算を停止し、余計な処理を減らせます。
ネットワーク環境の違いを確認する
意外と見落とされやすいのがネット回線です。同じマクロでも、接続先サーバーとの通信速度が異なると処理時間に大きな差が出ます。
例えば、片方のPCは有線LAN、もう片方はWi-Fi接続の場合、Webレスポンスに差が生じることがあります。
VPN接続や企業ネットワーク経由の場合も速度低下の原因になります。
待機処理(Sleep・DoEvents)が長すぎないか確認
VBAコード内でページ読み込み待機のために長いSleep設定を入れているケースがあります。
例えば以下のようなコードです。
Application.Wait Now + TimeValue("00:00:10")
ループ内で何度も実行されると、処理時間が数倍に増える原因になります。
必要最小限の待機時間に調整しましょう。
まとめ
高スペックPCでもExcelマクロのWebスクレイピングが遅い場合、原因はCPU性能ではなく、通信環境・IE制御・セキュリティソフト・VBA設定にあることが多いです。
特に古いIEベースのスクレイピングを使っている場合は、XMLHTTPやSeleniumへの移行を検討すると大幅な高速化が期待できます。まずは通信環境とExcel設定を確認し、どこがボトルネックになっているか切り分けることが重要です。


コメント