すぐ使う人のための 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>

取得した値は、項目ごとにコレクションに入れています。もっと良いやり方はあると思います。

特集記事
最新記事
アーカイブ
タグから検索
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square