VBAにてAPIから受け取った配列の要素を数えその数For文で回しセルに抽出したいです。
またその際に、登録する箇所が決まっているのでIF文でIDの一致を確認し、
セル抽出したいと思っております。
いまのところ、配列の中身は取り出せるのですが動的に作れずに詰まっています。
Set objhttp = CreateObject("MSXML2.XMLHTTP") With objhttp .Open "POST", url, False .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" .setRequestHeader "Content-Type", "application/json" .setRequestHeader "X-access-token", apitoken '認証、Bearerはアクセス権利をその人に渡す制御 .setRequestHeader "X-contract-id", apikey .Send (Nippou) JSON = .responseText Debug.Print JSON End With Dim doc, jsn Dim strData Dim n 'HTMLDocumentを取得 Set doc = CreateObject("HtmlFile") 'JSONオブジェクトを使うにはIEの互換表示で8以上(edgeも可)にする。 doc.Write "<meta http-equiv='X-UA-Compatible' content='IE=8' />" 'scriptタグを追加 'パースはJSON.parseを使うとチェックが厳しいのでevalを使う。 doc.Write "<script>document.JsonParse=function (s) {return eval('(' + s + ')');}</script>" doc.Write "<script>document.JsonStringify=JSON.stringify;</script>" 'パース関数でJSONオブジェクトを取得 strData = JSON Set jsn = doc.jsonParse(strData) 'パース後の値を確認 Debug.Print "データー数 " & jsn.total_count 'Set jsnResult = CallByName(jsn.result, 2, VbGet) For n = 0 To jsn.total_count - 1 Dim isnTaxDetailList, jsnResult If Not CallByName(jsn.result, n, VbGet) Is Nothing Then Set jsnResult = CallByName(jsn.result, n, VbGet) On Error GoTo ErrLabel Set jsnResult = CallByName(jsn.result, n, VbGet) Set isnTaxDetailList = CallByName(jsnResult.SalseList, 0, VbGet) Debug.Print "データ" & n+ 1 Debug.Print "支払い名 1 " & isnTaxDetailList.name Debug.Print "支払い金額 " & isnTaxDetailList.sales 'IF 取得したID = 1 Then '~セルに抽出する 'END Next s ErrLabel: Resume Next End If Next End Sub
’レスポンス内容 "result":[{"SalseList":[{"id":"1","name":"\u56f3\u66f8\u5238","sales":"1000"},{"id":"2","name":"\u5272\u5f15\u5238","sales":"7500"},{"id":"3","name":"\u30d3\u30fc\u30eb\u5238","sales":"9000"}
こちらの例としてSalseListの配列が3つあるとわかるのですが、この配列数を取得したいです。
回答2件
あなたの回答
tips
プレビュー