VBAのIE操作で取得したデータをリスト化
未読分:3件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#3 2014年10月3日(金)08時40分 From: wan | 返事 削除 変更 |
Doc.all(i).tagName = "TD"はTDタグだけじゃないんですね。 勉強になりました! 教えていただいたVBAで挑戦してみたいと思います! ありがとうございました。 |
Message#2 2014年10月2日(木)13時30分 From: 管理人 | 返事 削除 変更 |
まずURLの部分ですが、 > ie.navigate "http://www.xxxxxxxxxxxxxx(" & URL1 & ").html(" & URL2 & ")" これは正しく表示されるのでしょうか? URLに()が付いていますが、こちらでエラーになっているような気がします。 URL1とURL2に何が入っているのかは分かりませんが、以下が正しいと思われます。 ie.navigate "http://www.xxxxxxxxxxxxxx" & URL1 & ".html" & URL2 次にtdタグのデータ格納についてですが、こちらは100〜300ということで200個のデータをセルに格納したいということでしょうか? > For i = 100 To 300 > If Doc.all(i).tagName = "TD" Then > n = n + 1 > Cells(Int((n - 1) / 40) + 1, (n - 1) Mod 40 + 1) = Doc.all(i).innerText > End If > Next i こちらの処理ですが、まずDoc.all(i).tagNameはtdタグの数ではなく、全てのタグになりますので、300タグまでの処理で終わってしまいます。 次に40で割っていますが、こちらの意図がいまいちわかりません。 単に列ごとにデータを格納したいのであれば、 n=3 For i = 0 To Doc.All.Length - 1 If Doc.all(i).tagName = "TD" Then Cells(j, n) = Doc.all.Tags("td")(i).innerText n = n + 1 End If Next i でいけるかと思います。 VBAのIE操作について、初心者ということですので、下記の「エクセルVBAでIEの基本操作」を熟読されると分かりやすいかと思います。 ■エクセルVBAでIEの基本操作 http://www.vba-ie.net/ie/index.html |
Message#1 2014年10月2日(木)08時31分 From: wan | 返事 削除 変更 |
VBAのIE操作について、質問をさせていただきます。 はじめまして。VBA超初心者です。 IE操作をしたいがために、VBAを始めたのですが、上手く行かず困っております。 A列とB列に入力された値をURLに組み合わせて、 そのURLにアクセスし、そのサイトからタグ(TDタグ100個目から300個目まで)を取得、 取得したものをC列に表示しリスト化したいのですが、上手くいきません。 どなたか解決方法を教えて頂けないでしょうか。 Sub タグ取得() Dim ie As InternetExplorer Dim Doc As HTMLDocument Dim ObjTag As Object Dim i As Long Dim n As Long Dim j As Long For j = 1 To 10 URL1 = Worksheets("sheet1").Cells(j, 1) URL2 = Worksheets("sheet1").Cells(j, 2) Set ie = CreateObject("InternetExplorer.Application") ie.Visible = False ie.navigate "http://www.xxxxxxxxxxxxxx(" & URL1 & ").html(" & URL2 & ")" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Set Doc = ie.document Worksheets("Sheet1").Cells(j, 3).Select Cells.ClearContents Cells.NumberFormatLocal = "G/標準" For i = 100 To 300 If Doc.all(i).tagName = "TD" Then n = n + 1 Cells(Int((n - 1) / 40) + 1, (n - 1) Mod 40 + 1) = Doc.all(i).innerText End If Next i Cells.EntireColumn.AutoFit Cells.EntireRow.AutoFit Next j End Sub どうぞよろしくお願いします。 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降