質問: ### 前提・実現したいこと VBA初心者です。 EXCEL VBAでURLから特定のclass属性に書かれているテキスト抽出しようとしています。 A列にURL一覧が並んでいます。B列に結果を記入します。 URL記入セル:A1~A3000 結果を記入するセル:B1~B3000 があり、URL記入セルに入力されているURLにアクセスし innerText表示で、B列に書き出す ・万が一、存在しないURLであった場合はB列は空白 というのを実行できるコードの書き方を教えてほしいです。。 クラス属性は class="mdItemInfoLead" div タグで囲まれており、各URLに一つずつ存在しています。 宜しくお願いします。 ※一個一個のURLをVBAにコピペして、抜き出すやり方はできたのですが、 それだと、単純にページ内容を直接コピペしているのと、変わらない速度なので、 一気にURLリストを設定して抜き出すやり方を探しています。
回答: 現状、どのような方法でしているのか不明ですが、VBAからWEBデータを取得する方法はいくつかあります。 WEBデータの取得方法|ExcelマクロVBAサンプル集 1. QueryTables 2. InternetExplorer 3. MSHTML 4. MSXML2 1.はエクセル本来の機能で、Webクエリで、一番簡単ですが、対象がテーブル要素だけですの今回は用途には合致しません。 おそらく現状は、2. の方法だと思いますが、IEを開いて操作するので、遅いです。 4.が一番高速ですが、WEBサイトによってはうまく取得できない場合もあります。また、単なるHTMLのテキストを取得するので自分で解析する必用があります。 ただ、今回は、クラス属性は一つ取り出すだけなので、HTMLテキストを取得できるなら、この方法がいいと思います。 ``` Dim oHttp As Object Dim strURL As String, s As String strURL = "http://xxxxxx.com/xxxx/" Set oHttp = CreateObject("MSXML2.XMLHTTP") oHttp.Open "GET", strURL, False oHttp.Send s = oHttp.responseText ``` これで、変数 s にHTMLソースが格納されますので、InStrでクラス名を検索して、その後の、> から < までを取得すればいいでしょう。ただし、サイトの文字コードがUTF-8以外の場合は、unicodeに変換する必用があります。