WebサイトからデータをExcelに取得する方法②

みなさん、こんちには!

前回に引き続き、 WebサイトからExcelを使ってデータを取得 していきます。
今回は、 ステータスを取得し状態を確認してからデータを取得する方法 です。

下記は、前回までのコードです。これに状態を確認して読み込み完了するまで待機するコードを追加していきます。

Dim web_con As Object
Set web_con = CreateObject("MSXML2.XMLHTTP")
 
web_con.Open "GET", "https://www.rakuten.co.jp/",False
web_con.Send

readyStateプロパティを使って読み込み完了の状態になるまで確認を繰り返すコードを見てみましょう。

Do While web_con.readyState < 4
DoEvents
Sleep 1
Loop

web_con.readyState < 4 の 「4」は、 読み込み完了 を表す定数になります。
Sleep 1 は、1ミリ秒を停止するWindows API関数になります。
VBAには Application.Wait メソッドがあるのですが、何時になるまで停止すると言う意味になります。単位も基本的には秒単位になります。これを同じ1ミリ秒を停止するコードを表すと下記になります。

Application.Wait Now() + 1 / 86400000

1ミリ秒を表すのみ1ミリ秒/1日になります。コードの見た目なのか秒単位しか出来ないと勘違いなのかは分かりませんが、 Sleep 1 の方が良く使われている様です。
ただし、API関数を使う為には別のコードが必要になります。下記に表示します。

#If VBA7 Then
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
このコードは標準モジュールに記述しましょう。
Excelの32bit・64bitの両方に対応しています。
 

いよいよデータの取得になります。
responseText プロパティを使ってテキストで取得するコードが下記になります。

Dim HTML_str As String
HTML_str = web_con.responseText

実行してみましょう。

Dim HTML_str As String
Dim web_con As Object
Set web_con = CreateObject("MSXML2.XMLHTTP")
 
web_con.Open "GET", "https://www.rakuten.co.jp/",False
web_con.Send
 
Do While web_con.readyState < 4
DoEvents
Sleep 1
Loop
 
HTML_str = web_con.responseText
Debug.Print HTML_str
 
テキストが文字化けしているのに気付くと思います。
次回は、文字コードを変換して正しくテキストを表示してみましょう。