VBAのIE(InternetExplorer)制御でtableタグデータの抽出方法について解説しています。
今回は、tableデータをピンポイントに抽出するサブルーチンについて解説していきます。
それでは、制御方法について確認していきましょう。
Function tableValue(objIE As InternetExplorer, _
tagStr As String, _
row As Integer, _
col As Integer) As String
Dim objtag As Object
For Each objtag In objIE.document.getElementsByTagName("table")
With objtag
If InStr(.outerHTML, tagStr) > 0 Then
tableValue = .Rows(row).Cells(col).innerText
Exit For
End If
End With
Next
End Function
※ドラッグ(スワイプ)すると全体を確認できます。
Sub sample()
Dim objIE As InternetExplorer
'InternetExplorerでテストページをIE(InternetExplorer)で起動
Call ieView(objIE, "http://www.vba-ie.net/code/test4.html")
Debug.Print tableValue(objIE, "URL", 2, 1)
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
<table>
<tr>
<td>InternetExplorer制御の準備(ライブラリ追加)</td>
<td><a href="http://www.vba-ie.net/library/index.html">http://www.vba-ie.net/library/index.html</a></td>
</tr>
<tr>
<td>指定したURLをIEで表示する</td>
<td><a href="http://www.vba-ie.net/ie/navigate.html">http://www.vba-ie.net/ie/navigate.html</a></td>
</tr>
<tr>
<td>プログラムのサブルーチン化</td>
<td><a href="http://www.vba-ie.net/ie/subroutine1.html">http://www.vba-ie.net/ie/subroutine1.html</a></td>
</tr>
<tr>
<td>指定URLをIEで表示するサブルーチン</td>
<td><a href="http://www.vba-ie.net/ie/subroutine2.html">http://www.vba-ie.net/ie/subroutine2.html</a></td>
</tr>
</table>
※ドラッグ(スワイプ)すると全体を確認できます。
今回は、値を取得するために戻り値が必要となりますのでfunctionマクロで対応しています。引数は以下の4つが設定されています。
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
objIE | InternetExplorer | IEオブジェクト | objIE,objIE2 | × | |
tagStr | String | tableタグ内の一意のキーワード文字列 | "URL" | × | |
row | Integer | tableの抽出したい行番号(0から) | 2 | × | |
col | Integer | tableの抽出したい列番号(0から) | 2 | × |
こちらは、全て必須項目となります。
「objIE」はオブジェクトを入力します。
「tagStr」には、tableタグに含まれる一意のキーワード文字列を入力します。「一意のキーワード」とはそこでしか使われていない文字列のことです。
探すポイントとしては、まずid属性が設定されているか確認してください。id属性は一意の属性ですので、こちらが設定されていれば簡単に取得できます。
d属性がない場合は、name属性・class属性で一意のキーワードがないか確認していきます。
「row」には、tableの抽出したい行番号(0から)を入力します。
「col」には、tableの抽出したい列番号(0から)を入力します。
それでは、1つずつコードを見ていきましょう。
For Each objTag In objIE.document.getElementsByTagName("table")
(省略)
Next
※ドラッグ(スワイプ)すると全体を確認できます。
こちらは「For Each~Nextステートメント」を利用して指定したtableタグの数だけループ処理させています。
With objTag
If InStr(.outerHTML, tagStr) > 0 Then
(省略)
End If
End With
※ドラッグ(スワイプ)すると全体を確認できます。
「Withステートメント」でobjTagを省略しています。
また、「If~Thenステートメント」でtableタグの中に一意のキーワードが含まれているかをチェックしています。
含まれている場合は次の処理へと進みます。
tableValue = .Rows(row).Cells(col).innerText
※ドラッグ(スワイプ)すると全体を確認できます。
目的のtableが見つかったら「Rows・Cellsプロパティ」でセル番号を指定してinnerTextプロパティでテキストだけ抽出します。
Exit For
※ドラッグ(スワイプ)すると全体を確認できます。
そして、最後に「Exitステートメント」でループを脱出して完了となります。
次の記事: VBAでIEのmetaタグデータを抽出するサブルーチン >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。