下記コードは、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
お礼
回答ありがとうございます。 TDの中にさらにDDというタグがあり、その中に個別に入っていたため、TDのままだと一緒に入ってきてしまうようでした。 冷静さを欠いていました。