こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA IE制御 テーブルコピー

下記コードは、http://www.ken3.org/vba/backno/vba177.htmlからお借りしているものです。
(一部ヤフーのデザインに変更があったため、変更しています。)

実行してみると、本来7行4列である表が、1行目にすべて入り込んでしまいます。
見直してみても、間違ってはいないように見えるのですが、原因はどこかわかりますでしょうか?
よろしくお願いいたします。




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

投稿日時 - 2015-07-14 00:06:52

QNo.9011889

困ってます

質問者が選んだベストアンサー

VBAの画面でF9でブレークポイントを置いて
実行しF8でワンステップずつデバックすれば
原因が解ります

投稿日時 - 2015-07-15 05:20:18

お礼

回答ありがとうございます。

TDの中にさらにDDというタグがあり、その中に個別に入っていたため、TDのままだと一緒に入ってきてしまうようでした。
冷静さを欠いていました。

投稿日時 - 2015-07-15 09:33:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問