やりたいこと
VBAを使って、Web上のテキスト情報を取得してExcelのセルにコピペしたいが、
Seleniumも、WebDriverも使わずに、てっとり早くやりたい。
この記事をさらにシンプルした手法になります。(その分やれることも少ないです)
https://qiita.com/uezo/items/66e20b064ffd5f239b9a
やったこと
URLを指定すると、その下にURLのHTMLソースをとってくるVBAができました。
画像はサンプルで、Yahooファイナンストヨタの株価ページ
https://finance.yahoo.co.jp/quote/7203.T
VBAコード
コードはたったの40行です。
Sub ソース取得実行()
'urlと貼り付け先を取得
url = "https://finance.yahoo.co.jp/quote/7203.T"
Set target = Cells(3, 1)
'前回の結果を削除する
Range(target, Cells(Rows.Count, target.Column).End(xlUp).Offset(1)).Clear
res = ソース取得(url)
'セルに転記する
'セルの最大文字数を考慮して<span>タグで改行するようにする
res = Replace(res, "<span", vbLf & "<span")
'改行で分けて配列化する
arr = Split(res, vbLf)
'配列をセル範囲に一気に貼る。セルループするととても遅い。
target.Resize(UBound(arr) + 1, 1).Value = Application.Transpose(arr)
End Sub
Function ソース取得(url)
'ソースを取得
With CreateObject("WinHttp.WinHttpRequest.5.1")
.Open "GET", url
.Send
buf = .responseBody
'ソースを日本語に直す(.responseTextだとエラーが出ることがたまにある)
With CreateObject("ADODB.Stream")
.Open
.Type = 1
.Write buf
.Position = 0
.Type = 2
.Charset = "utf-8"
' .Charset = "shift_jis" '文字化けするときは"shift_jis"を試す
ソース取得 = .ReadText
End With
End With
End Function
参考サイト
バイナリ(ResponseBody)で結果を受け取って、Streamオブジェクトで適当に文字コードを変換してはいかがでしょうか。