VBAを使ったInternet Explorer (IE) の自動化

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 23, 2022

このページでは、VBAを使用してInternet Explorer(IE)を自動化するためのコーディング例を紹介します。

** 2019年6月7日更新:現在、VBAでWeb自動化を実現する最善の方法は、Seleniumを使用することです。この記事はSeleniumをカバーするものではありません。以下の例は、あなたのニーズには十分かもしれません。しかし、もしあなたがより高度なニーズを持っていたり、Webオートメーションの専門家になりたいと思っているなら、代わりにSeleniumを使うことを強くお勧めします。Dan StrongのWebオートメーションに関するコース(このリンクから割引で入手可能)はSeleniumを学ぶための素晴らしいリソースです。

vba selenium web automation

(私はダンのコースからアフィリエイト報酬を受け取っています)

VBAでウェブページに移動する

1つ目のコードは、IEを開き、Webサイトに移動するコードです。2つ目のコードは、IEを開き、Webサイトに移動し、入力ボックスと対話するものです。

Sub Automate_IE_Load_Page()
'このコードは、IEでウェブページをロードします
    Dim i As Long
    Dim URL As String
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
 
    'InternetExplorerオブジェクトを作成する
    Set IE = CreateObject("InternetExplorer.Application")
 
    'IEを表示させるにはIE.Visible = Trueとし、バックグラウンドで実行させるにはFalseとする
    IE.Visible = True
 
    'URLを定義する
    URL = "https://www.automateexcel.com/excel/"
 
    'URLへ移動する
    IE.Navigate URL
 
    'ステータスバーでWebサイトが読み込み中であることを知らせる
    Application.StatusBar = URL & " を読み込み中です。しばらくお待ちください。"
 
    'URLの読み込みが終わるまで待つ
    'IE ReadyState = 4 は読み込みが完了したことを意味する(最初のループは、2番目のループを不注意にスキップすることを避けるため)
    Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
    Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
 
    'ウェブページがロードされる
    Application.StatusBar = URL & " の読み込みが完了しました"
    
    'IEをアンロードする
    Set IE = Nothing
    Set objElement = Nothing
    Set objCollection = Nothing
    
End Sub

VBAでIEを使用する際によくある問題は、Internet Explorerが完全にロードされる前にVBAがコードを実行しようとすることです。このコードを使用すると、IEの準備が整うまで(IE.ReadyState – 4)ループを繰り返すようにVBAに指示します。

    'URLの読み込みが終わるまで待つ
    'IE ReadyState = 4 は読み込みが完了したことを意味する(最初のループは、2番目のループを不注意にスキップすることを避けるため)
    Do While IE.ReadyState = 4: DoEvents: Loop 'Do While 
    Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until

また、このコードの行に注目してください。

    IE.Visible = TRUE

このコードは、IEがバックグラウンドで動作するか、フォアグラウンドで動作するかを切り替えています。

VBAのコーディングが簡単に

VBAのコードをオンラインで検索するのはもうやめましょう。コードVBAアドインを使えば、Visual Basic Editorに必要なコードをすばやく挿入できます。 alt text さらに詳しく!

VBAでURLを開き、フォームにデータを入力する

'これは、モジュールの一番上に置く必要があり、IEをアクティブウィンドウとして設定するのに使用します。
Public Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long

Sub Automate_IE_Enter_Data()
'IEでウェブページを読み込む
    Dim i As Long
    Dim URL As String
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    Dim HWNDSrc As Long
    
 
    'InternetExplorerオブジェクトを作成する
    Set IE = CreateObject("InternetExplorer.Application")
 
    'IEを表示させるにはIE.Visible = Trueとし、バックグラウンドで実行させるにはFalseとする
    IE.Visible=True
 
   'URLを定義する
    URL = "https://www.automateexcel.com/vba"
 
    'URLへ移動する
    IE.Navigate URL
 
    'ステータスバーでWebサイトが読み込み中であることを知らせる
    Application.StatusBar = URL & " を読み込み中です。しばらくお待ちください。"
    'URLの読み込みが終わるまで待つ
    'IE ReadyState = 4 は読み込みが完了したことを意味する(最初のループは、2番目のループを不注意にスキップすることを避けるため)
    Do While IE.ReadyState = 4: DoEvents: Loop
    Do Until IE.ReadyState = 4: DoEvents: Loop
    'ウェブページがロードされる
    Application.StatusBar = URL & " の読み込みが完了しました"    

    'IEのウィンドウIDを取得し、アクティブウィンドウとして設定する
    HWNDSrc = IE.HWND
    SetForegroundWindow HWNDSrc
    
    '入力ボックスの検索と入力
    n = 0
    
    For Each itm In IE.document.all
        If itm = "[object HTMLInputElement]" Then
        n = n + 1
            If n = 3 Then
                itm.Value = "orksheet"
                itm.Focus                         '入力ボックスをアクティブにする(カーソルを表示させる)
                Application.SendKeys "{w}", True  'W'キーの押下をシミュレートする
                                                  'Trueを指定すると、VBAはキーが押されるまで待機する
                                                  'キーが押されるとページ上のjavascriptが実行され、
                                                  'テーブルがフィルタリングされる
                GoTo endmacro
            End If
        nd If
    Next
    
    'IEをアンロードする
endmacro:
    Set IE = Nothing
    Set objElement = Nothing
    Set objCollection = Nothing
    
End Sub

VBAを使ってIEの要素を取得する(GetElement)

Internet Explorerでオブジェクトと対話することは、しばしば面倒なことです。どのようなオブジェクトを操作するのかを特定する必要があります。上記のコードでは、「[object HTMLInputElement]」(入力フォーム)の3番目のインスタンスを探しています。そして、入力フォームに “orksheet “と入力し(itm.value = “orksheet”)、カーソルを入力フォームに移動させ(itm.focus)、”w “と入力しています。このとき “w “を入力するのは、テーブルをフィルタリングするためのjavascriptを起動するためです。 オブジェクトの選択には、もっと直接的な方法もありますが、この方法は、他の方法がうまくいかない場合に有効でしょう。 他の方法を使用するには、次のオプションを使用します。

IE.document.getElementsById("ID").value = "value"        'IDで探す
IE.document.getElementsByTagName("ID").value = "value"   'タグで探す
IE.document.getElementsByClassName("ID").value = "value" 'クラス名で探す
IE.document.getElementsByName("ID").value = "value"      '名前で探す

これらのメソッドを使用する際、同じ名前の要素が複数ある場合に問題が発生することがあります。上記のサンプルコードのようにループを使用することで、使用する要素のインスタンスを指定することができます。

VBAを使ってIEを制御する

上記のコードでは、Focus (itm.focus) イベントを使用して、フォーム内のカーソルをアクティブにしています。

オブジェクト/エレメントのイベント、メソッド、プロパティの例は、こちらでご覧いただけます: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

これらのすべてが、すべてのオブジェクト/要素で動作するわけではないため、IEでオブジェクトを操作する際には、かなりの試行錯誤が必要になるかもしれません。

Internet ExplorerでSendkeysを使う

上記のコードでは、Sendkeysコマンドを使用してキーストロークをシミュレートしました。

Application.SendKeys "{w}", True

Sendkeysは、一般的に最後の手段であるべきです。通常はオブジェクトと直接対話することができますが、時にはSendkeysコマンドを使う方が簡単な場合もあります。Sendkeysは基本的にキーボードで入力するのと同じです。ウィンドウやオブジェクトが正しく選択されていることを確認してから行ってください。Sendkeysは、Web上のユーザーインタラクションに基づいて実行されるイベントをトリガーすることもできます。上の例では、Sendkeysを使って、Webページで使用しているテーブルのJavascriptフィルタを有効にしています。

Sendkeysには2つの入力があります。
1. 入力するキー (通常、{}…{enter}、{q}…で囲まれます)
2. Sendkeys が完了するまで待ってから TRUE/FALSE を実行します。Internet Explorerを使用する場合は、通常この値をTRUEに設定します。

Internet Explorerをバックグラウンドで実行する

Internet Explorerをバックグラウンドで実行するには、2つのことを行う必要があります。 1. IEコードを含むマクロをApplication.Runで呼び出し、作業を続けながらマクロがバックグラウンドで実行されるようにします。

Application.Run ("Automate_IE_Load_Page")

注意:このコードは、あなたの作業を中断させたり、あなたの作業がこのコードに干渉する可能性があります。例えば、SendKeysを使用する場合、Sendkeysは間違ったアプリケーションにキーストロークを送信する可能性があります。これには十分注意してください。 2. IEを非表示にする

IE.Visible = False

SeleniumとVBA

この記事が役に立ったのであれば、Webオートメーションに関するDan Strongのコースをチェックするとよいでしょう。VBAを使ったSeleniumの使い方をカバーしています。

vba selenium web automation

(私はダンのコースからアフィリエイト報酬を受け取っています。)

ダンさんの受講生からの声

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples