インターネット上に公開されているデータを読み込んで自分のデータとして保存したい、または、プログラムに利用したいというとき、どうしてますか?
ブラウザを開いてサイトへいき、目的のページを開いてデータをコピーしてExcelに貼り付けて、と手作業でやってますか?一ページだけとか一回だけならそれでもいいですが、大量に何回もとなるとそうは行きませんよね。
そんな定型作業はコンピュータにやらせましょう。
Excelからも直接そんな仕事ができます。下記はそんなプログラムの一例です。詳しい説明はなしでもわかると思いますので、コメントを読んで見てください。
実際にHTMLを読み込むプロシージャを呼び出すプロシージャ
Private Sub ReadHTML()
Dim buf As Variant
buf = getHTML_p("http://ekikara.jp/newdata/state/line/01.htm")
End Sub
■HTMLを読み込んで文字列として返す
Public Function getHTML_p(URL As String, Optional id As String = "", Optional pw As String = "", Optional incharset As String = "") As String
'url ログインID(必要なとき) パスワード(必要なとき) 文字エンコード(文字化けするとき)
Dim Http As Object
Dim inStrm As Object
getHTML_p = ""
Set Http = CreateObject("MSXML2.XMLHTTP")
If id <> "" Then
Http.Open "GET", URL, False, id, pw
Else
Http.Open "GET", URL, False
End If
'false:同期通信 すべての応答が返ってから次へ
実際に要求を送信
Http.send
If Http.Status = 200 Then '同期通信の場合はエラーページが返ってくるので常に200
If incharset = "" Then 'Shift-JISのとき
getHTML_p = StrConv(Http.responseBody, vbUnicode) 'テキスト → Unicode に変換
Else
'文字化けする場合は、incharsetを指定してこのプロシージャを呼び出す
set inStrm = CreateObject("ADODB.Stream")
With inStrm
.Open
.Position = 0
.Type = 1 'adTypeBinary ← バイナリのまま
.Write Http.responseBody 'streamに書き込む
.Position = 0
.Type = 2 'adTypeText テキストで読みだす
.Charset = incharset '"UTF-8" "EUC-JP"
'stream から読み取られるデータを指定文字エンコードに変換
getHTML_p = .ReadText ' .Charsetエンコードで読み込んだテキスト
.Close
End With
Set inStrm = Nothing
End If
End If
Set Http = Nothing
End Function