VBAのHTTPリクエストの挙動についてお教えください。 現在、とあるサイトの全ページに書かれた一部のテキストを抽出するため、For文を使ったコードを書いています。 しかし、最初のループで抜き出したのと同じテキストが延々と抽出されてしまうという動きになっているため、何が間違っているのかチェックしていただけないでしょうか。 classnemeがダメなのかな?と思って、目的の要素周辺のclassnameに変更してみたりしましたが、結果は変わりませんでした。 以下が書いたコードです。 Sub 個別ページのテキスト抜き出し() Dim ws1 As Worksheet Set ws1 = Worksheets("カテゴリURL") Dim ws2 As Worksheet Dim itemURL As String Dim test As String Dim httpReq As XMLHTTP60 Set httpReq = New XMLHTTP60 Dim htmlDoc As Object Set htmlDoc = New HTMLDocument Dim k As Integer Dim i As Integer For k = 2 To ws1.Cells(Rows.Count, 3).End(xlUp).Row '①カテゴリURLシートに書かれたカテゴリ数ぶん繰り返せ Set ws2 = Worksheets(ws1.Cells(k, 3).Value) '②カテゴリURLシートのセルに書かれたのと同じ名前のWorksheetをセット For i = 2 To ws2.Cells(Rows.Count, 2).End(xlUp).Row '③ws2に書かれたURLの数だけ繰り返せ itemURL = ws2.Cells(i, 2).Value '④ws2に書かれたURLを変数に格納 httpReq.Open "GET", itemURL '⑤ ④のURLにHTTPリクエスト httpReq.Send Do While httpReq.readyState < 4 DoEvents Loop htmlDoc.write httpReq.responseText '⑥受け取ったレスポンスをhtmlDocに格納 test = htmlDoc.getElementsByClassName("クラス名")(0).innerText '⑦セルに直接書き込めなかったので、変数に格納 ws2.Cells(i, 3) = test '⑧セルに書き込み Next i Next k Set htmlDoc = Nothing Set httpReq = Nothing End Sub なお参考までに、欲しいテキストのブロックは以下のようになっています。 <div class="クラス名"> <!--目的のテキスト--> 文章<br> 文章<br> 文章<br> 文章<br> <!-- /.クラス名 --> </div> 何が間違っているのかまったく見当が付かず、最悪はレスポンスをそのままテキストとして書き込んで、不要な行以降をDeleteするという方法に変えようかと思っていますが、コードがまどろっこしくなるため避けたいです。 説明が分かりづらいかもしれませんが、なにとぞお分かりになる範囲でご教授いただけると幸いです。 よろしくお願いいたします。
Visual Basic