すぐ使う人のための Excel VBA + WebAPI - クロネコヤマト問い合わせ -
クロネコヤマトの荷物お問い合わせシステム ( https://toi.kuronekoyamato.co.jp/cgi-bin/tneko) に伝票番号を送信し、
配達状況を取得する Excel VBA マクロを作ります。厳密にはWebAPIの定義から外れてるかもしれませんが、ご容赦下さい。
サンプルコードではdebug.print でイミディエイトウインドウに表示するだけです。お好みでセルに出力するなり工夫して下さい。

早速ソースコード
Sub クロネコヤマト荷物問い合わせ()
Dim 番号 As New Collection
Dim 日付 As New Collection
Dim 状況 As New Collection
Dim リクエスト As String
Dim 番号配列(1 To 2) As String
番号配列(1) = "467707171260"
番号配列(2) = "4677-0717-1260"
Call リクエストを作る(番号配列, リクエスト)
Call HTTPリクエスト(リクエスト, 番号, 日付, 状況)
Dim i As Integer
For i = 1 To 2
Debug.Print "番号:" & 番号(i) & " 日付:" & 日付(i) & " 状況:" & 状況(i)
Next
Set 番号 = Nothing
Set 日付 = Nothing
Set 状況 = Nothing
End Sub
Sub リクエストを作る(番号() As String, request As String)
Dim i As Integer, ret As String
For i = LBound(番号) To UBound(番号)
ret = ret & "&number" & Format(i, "0#") & "=" & 番号(i)
Next
ret = Right(ret, Len(ret) - 1)
request = ret
End Sub
Sub HTTPリクエスト(request As String, denpyo As Collection, hiduke As Collection, ct As Collection)
Dim http As Object 'XMLHTTP60
Set http = CreateObject("MSXML2.XMLHTTP") 'XMLHTTP60
http.Open "POST", "https://toi.kuronekoyamato.co.jp/cgi-bin/tneko", False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send request
Dim html As Object 'HTMLDocument
Set html = CreateObject("htmlFile") 'HTMLDocument
html.write http.responseText
Dim elements As Object
Dim element As Object
Set elements = html.getElementsByTagName("td")
For Each element In elements
Select Case element.getAttribute("className")
Case "denpyo": denpyo.Add element.innerText
Case "hiduke": hiduke.Add element.innerText
Case "ct": ct.Add element.innerText
End Select
Next
End Sub
ソースコードの解説
リクエストの文字列には number01=467707171260 などと伝票番号を入れます。
伝票番号を10件まで送信できます。
複数の伝票番号を送信する場合は、number01=467707171260&number02=467707171260 など & で結合します。
レスポンスはhtmlです。tdタグとクラス名を使って項目と値を取得します。
伝票番号は denpyo 日付は hiduke 配達状況は ct というクラスに入っています。
<td class="denpyo">
<a href="#AA000"><font size="4"><b>4677-0717-1260</b><br></font></a></td>
<td class="hiduke"><font size="3">01/22<br></font></td>
<td class="ct"><font size="3">配達完了<br></font></td>
取得した値は、項目ごとにコレクションに入れています。もっと良いやり方はあると思います。