概要: サンプルは株価の表で、TABLEが2重になってました。 そのテーブルを、 '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[終値]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "終値") > 0 _ なんて感じで識別して、取り込んでみました。 ※メルマガ記事ではオブジェクトの参照設定をしていませんができれば、下記を参考に参照設定してください。 [Microsoft Internet Controls,Microsoft HTML Object Library を参照設定する](このほうが開発時、操作時に楽) また、VistaとIE7の場合は、 [IE7 操作 Vistaで失敗]も参考にしてください。 |
関連項目:Webページから表を取り込むサンプル。(別の切り口で)
↑ラフな設計から製造まで[VBA IE操作 表の取り込みサンプル]を見て下さい。
↑の実行サンプルは[↑の小細工した実行サンプル]
(IE_GET_TABLE_0316.zip です。解凍して動かして確認してください)
リンク 分類:
[Document(文章)からデータを取得]
/ [Form入力処理]
/ [Linkリンク情報]
/ [Image画像情報]
/ [Frameフレーム処理]
サンプル:
[IEを使ったVBAのサンプル]
/ [小さなVBAでIE操作のコード]
やっと、下記、メルマガで発行した内容です。何かの参考となれば幸いです。
過去のメルマガ[IE操作系の記事一覧]もヨロシクです。
こんにちは。AB型の変わり者 三流プログラマーのKen3です。 今回は、 IE 操作系でTABLEの中にTABLEタグが存在する、 よくある話にチャレンジしてみます。/* * 1. 今回のキッカケ */
最近下記の質問をいただく ---- >[No.119 IEを使用して、Web上の表をExcelへ]において、 >頁によっては表以外の記述にもtableタグを多用しているものがありますが、 >欲しい表のみをExcelへ持ってくる方法(tableの見分け方)はありますか? > >具体的には、 >以下の例で試すと、メインの表だけでよいところ、workbookが25個もできました。 >http://table.yahoo.co.jp/t?c=2004&a=10&b=4&f=2005&d=10&e=14&g=d&s=4753.t&y=0&z=4753.t ---- あらら、不必要な表を取得してしまうんですね。 まぁ、レイアウトをきれいにするためにTABLEタグで細工したHTML多いからね。/* * 2.現象を再現する */
世の中には、いろいろなHTML FORMがあります。 まずは、現象を再現しますか。 No.119 IEを使用して、Web上の表をExcelへ http://www.ken3.org/vba/backno/vba119.html から、 >HTMLの表は、基本のパターンを書くと、 ><TABLE> > <TR> > <TD>XXXXXX</TD> > <TD>YYYYYY</TD> > <TD>ZZZZZZ</TD> > </TR> ></TABLE> >と、 ><TABLE>テーブルのタグから始まり、 ><TR>行の開始 ><TD>列のデータ(<TH>と見出しをキチント書いている人もありです) >の >3つの組み合わせと順番です。 なんて言ってるから、 <TABLE>の中に<TABLE>があると変な処理になるんだよね。 No.119を元に、 URLを変更して、Bookがいっぱいだとうざいのでシートの.addに変えたバージョン
Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.body のデータをループする For Each objTAG In objIE.document.body.all 'テーブルのタグを探す If objTAG.tagName = "TABLE" Then '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all If objTableItem.tagName = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If If objTableItem.tagName = "TD" Then 'テキストデータをセットする Cells(y, x) = objTableItem.innerText x = x + 1 '列カウンタを+1(次にする) End If Next End If Next End Sub |
Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim strTAGNAME As String 'タグの名前保存用 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.body のデータをループする For Each objTAG In objIE.document.body.all 'テーブルのタグを探す If objTAG.tagName = "TABLE" Then 'TABLEの中、テキスト文字で[終値]があるか、チェックする No.177 If InStr(objTAG.InnerText, "終値") > 0 Then '終値見つかったか? '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all strTAGNAME = objTableItem.tagName 'テーブル、タグ名 If strTAGNAME = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If '↓No.177でTHもセットするように変更 TD or THの時 If strTAGNAME = "TD" Or strTAGNAME = "TH" Then 'テキストデータをセットする Cells(y, x) = objTableItem.InnerText x = x + 1 '列カウンタを+1(次にする) End If Next End If End If Next End Sub |
Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim strTAGNAME As String 'タグの名前保存用 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.body のデータをループする For Each objTAG In objIE.document.body.all 'テーブルのタグを探す If objTAG.tagName = "TABLE" Then 'TABLEの中、テキスト文字で[終値]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "終値") > 0 _ And InStr(objTAG.InnerHTML, "TABLE") = 0 Then '終値在り、TABLE無しか '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all strTAGNAME = objTableItem.tagName 'テーブル、タグ名 If strTAGNAME = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If '↓No.177でTHもセットするように変更 TD or THの時 If strTAGNAME = "TD" Or strTAGNAME = "TH" Then 'テキストデータをセットする Cells(y, x) = objTableItem.InnerText x = x + 1 '列カウンタを+1(次にする) End If Next End If End If Next End Sub |
Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim strTAGNAME As String 'タグの名前保存用 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[終値]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "終値") > 0 _ And InStr(objTAG.InnerHTML, "TABLE") = 0 Then '終値在り、TABLE無しか '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all strTAGNAME = objTableItem.tagName 'テーブル、タグ名 If strTAGNAME = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If '↓No.177でTHもセットするように変更 TD or THの時 If strTAGNAME = "TD" Or strTAGNAME = "TH" Then 'テキストデータをセットする Cells(y, x) = objTableItem.InnerText x = x + 1 '列カウンタを+1(次にする) End If Next End If Next End Sub |
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
[三流君 VBAでWebBrowser IEを操作する] / [三流君 VBAで楽しくプログラミング] / [AB型の変わり者 三流プログラマー Ken3 三流君Top]
大分類:[Document.Forms(入力処理)]
/ [Document.Links(リンク情報)]
/ [Document.Images(画像情報)]
/ [Document.Frames(フレーム処理)] | |
F1でヘルプを見たり、デバック時にDebug.Print使ったり、イミディエイト ウインドウで簡単な確認したり。 項目別に↓にプログラマーの本音?それとも建て前?的な記事をまとめました。お探しのジャンルを選択してください。 項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。 Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など Blog:[三流君の作業日記]/
[objIEを使用したサンプルコードを見る]/
広告-[通販人気商品の足跡] |
三流プログラマーのKen3 が 皆さんの質問にお答えします
と カッコつけて言っても、実力不足ですべての質問に回答することはできないのが現実なのですが、できる範囲で 三流的な逃げ手 や 解決方法 を探します(回答します)。
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。