web操作


VBAでインターネット

VBAを使ってweb上の情報にアクセスすることもできます。

例えば、ブラウザを開き会員制サイトへ移動してログインしたり、定期的にサイトから情報を取得する、というような処理を自動化するプログラムもエクセルVBAで作成することができます。

練習すれば株やFX、仮想通貨などの自動売買ツールを自作することもできるでしょう。


Internet Explorer

VBAにはInternet Explorerを操作する機能があります。

最初にツール→参照設定からMicrosoft Internet Controlsにチェックを入れます。

参照設定

以下はInternetExplorerを起動してYAHOO!JAPANニュースに移動するコードです。


Dim IE As New InternetExplorer 'InternetExplorerオブジェクトの作成
IE.Visible = True 'IEを表示する
IE.Navigate2 "http://news.yahoo.co.jp/" 'YAHOO!JAPANニュース
While (IE.Busy = True) Or (IE.ReadyState < READYSTATE_COMPLETE) '表示が完了するまで待機
    DoEvents
Wend
ie.quit

InternetExplorerオブジェクトを生成し、IE.Navigate2に続けてURLを指定すれば、対象のページへ移動することができます。

このとき、visibleプロパティfalseになっていると、内部的に起動しているInternet Explorerが画面上に表示されないので注意してください。逆に、意図的にこの値をfalseにすることによってバックグラウンドでweb操作することも可能ですが、あまり使う機会はないでしょう。

終了時は『.quit』を実行してオブジェクトを破棄する必要があります。これを実行しない場合でプログラムが終了した場合、一見ブラウザが閉じられたように見えても内部的にInternetExplorerのプロセスが終了していないことがあり、パソコンの動作が重くなる原因になります。そのようなときはタスクマネージャで確認して手動で終了させるようにしてください。


webページへのアクセス

webページはhtml形式で作成されています。

htmlソースは一般的に『右クリック→ソースを見る』のようにして確認することができます。また、ブラウザに備えられたデバッガで解析することもできます(だいたいの場合『F12』や『Ctrl+Shift+i』で起動)。

それでは簡単にwebページのhtmlを解析して操作する練習をしてみます。

以下はYAHOO!JAPANのトップページを表示し、指定した検索ワード(アクティブシートのcells(2,1)に入力した文字列)の検索を実行するコードです。

実行する場合は最終行にブレークポイントをセットしておかないと、検索結果を表示した瞬間にブラウザを終了してしまうので注意してください。ステップ実行してみると分かりやすいと思います。

'Yahoo検索
Sub YahooTest()
    Dim ie As New InternetExplorer 'IEオブジェクトの生成
    ie.Navigate2 "http://yahoo.co.jp/" 'Yahooニューストップページ
    ie.Visible = True
    While (ie.Busy = True) Or (ie.ReadyState < READYSTATE_COMPLETE) '読み込み待ち
        DoEvents
    Wend
    ie.Document.getelementbyid("srchtxt").Value = Cells(2, 1) '検索語を入力
    ie.Document.getelementbyid("srchbtn").Click '検索ボタンをクリック
    While (ie.Busy = True) Or (ie.ReadyState < READYSTATE_COMPLETE) '読み込み待ち
        DoEvents
    Wend
    ie.Quit 'IEオブジェクトの破棄
End Sub

詳しい解説は省略しますが、『srchtxt』は検索語入力ボックスのID、『srchbtn』は検索ボタンのIDで、これらはHTMLソースで確認することができます。もちろん、ページのソースが変更されてIDが変わればコードは実行できなくなります。

ただし、プログラムを利用した特定のwebページへの大量のアクセスはサイバー攻撃と間違われる可能性がありますので、気をつけるようにしてください。誤って無限ループでリロードを繰り返すようなプログラムを実行してしまっては笑い話にもなりません。


参考になる書籍

ここでは『Microsoft Internet Controls』の参照を追加する方法をざっと説明しましたが、他の方法もありますので、興味があれば探してみるのもよいでしょう。

VBAによるweb操作に関しては以下の書籍が参考になると思います。また、もしweb関連のプログラミングに興味があるのなら、HTMLやJavaScriptを勉強してみるのもおすすめです。

web操作の応用

vbaでweb操作というと、このページで紹介したようにwebブラウザをVBAから操作することを指すのが一般的ですが、公開されているwebAPIを利用したプログラムを作ることもできます。

vbaからIEを制御する方法は便利ですが、いろいろ試してみるとIEの動作に影響されて思い通りにいかないケースも多いことが実感できるかと思います。

webサービスに関してAPIが用意されている場合、webブラウザを介することなく直接webサーバとの間で情報を取得したり、送信したりすることが可能です。

APIを利用することでweb上の様々な情報に簡単にアクセスでき、プログラムの幅が飛躍的に広がります。

webAPIの利用方法について興味のある方はこちら(VBAによるAPIの利用)を参考にしてみてください。