Tokunaga様
ループをかければ、500件の制限はクリアできるはずです。
以下はAccessのVBAのコードとして作った関数ですが、参考になれば幸いです。
Access用なので、DAOでテーブルに保存するような処理をしていますが、ここをシートに書き換えればエクセルでも使えるのではないでしょうか。
※エクセルに読み込むTipsのほうがたくさん検索に引っかかりやすいとは思います。
strAuthentication ←認証情報
strDomain ←ドメイン
'------------------------------------------------------------------------
'GETしてテーブルに保存
'------------------------------------------------------------------------
Public Sub kintoneGETtoTable(appId As String, strQuery As String, strTable As String, ByRef varFields() As Variant, Optional lngOffset As Long = 0)
'--------------------------------------------------------------------
’ 変数定義
'--------------------------------------------------------------------
’ XMLHTTP用
Dim objHttpReq As Object ’ XMLHTTPオブジェクト
Dim strURL As String ’ アクセス先URL
Dim strResponseText As String ’ レスポンステキスト
Dim objResponse As New cJobject ’ strResoponseText をパースしたJSON
Dim objRecords As New cJobject ’ パースしたrecords
Dim strQueryParameter As String ’ クエリパラメータ
Dim strFields As String ’ フィールド指定URL記述
Dim i, j As Integer ’ ループ用
Dim intLimit As Integer ’ 1回のAPIでアクセスするレコード件数
intLimit = 500 ’ GETなら最大500, PUTなら最大100
’ テーブル操作
Dim db As DAO.Database
Dim rs As DAO.Recordset
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM " & strTable
DoCmd.SetWarnings True
Set db = CurrentDb()
Set rs = db.OpenRecordset(strTable)
'------------------------------------------------------------------
’ 取得フィールドの設定
'------------------------------------------------------------------
strFields = “&fields[0]=$id”
For i = 0 To UBound(varFields)
strFields = strFields & “&fields[” & i + 1 & “]=” & varFields(i)
Next
’ 全レコード取得するためにループするならここから
Do
'------------------------------------------------------------------
’ 検索文字付きURLを作成する
'------------------------------------------------------------------
strQueryParameter = URL_Encode(strQuery & " order by $id asc limit " & intLimit & " offset " & lngOffset)
strURL = “https://” & strDomain & “/k/v1/records.json?&app=” & appId & “&query=” & strQueryParameter & strFields
'------------------------------------------------------------------
’ XMLHTTP オブジェクトを生成する
'------------------------------------------------------------------
Set objHttpReq = Nothing
Set objHttpReq = CreateHttpRequest()
objHttpReq.Open “GET”, strURL, False
'------------------------------------------------------------------
’ XMLHTTP のリクエストヘッダーを指定する
'------------------------------------------------------------------
’ ログイン認証
objHttpReq.setRequestHeader “X-Cybozu-Authorization”, strAuthentication
’ Basic 認証
objHttpReq.setRequestHeader “Authorization”, "Basic " & strAuthentication
'ドメイン名:ポート番号
objHttpReq.setRequestHeader “Host”, strDomain + “:443”
'キャッシュ対策(常にレスポンスが取得できる状態にする)
objHttpReq.setRequestHeader “If-Modified-Since”, “Thu, 01 Jun 1970 00:00:00 GMT”
'------------------------------------------------------------------
’ リクエストを送信する
'------------------------------------------------------------------
objHttpReq.send Null
'------------------------------------------------------------------
’ レスポンスを取得する
'------------------------------------------------------------------
'レスポンス情報を変数に格納する
strResponseText = objHttpReq.responseText
Set objResponse = JSONParse(strResponseText)
Set objRecords = objResponse.child(“records”)
For i = 1 To objRecords.children.Count
rs.AddNew
rs![$id] = objRecords.children(i).child(“$id”).child(“value”).value
For j = 0 To UBound(varFields)
rs.Fields(CStr(varFields(j))) = objRecords.children(i).child(CStr(varFields(j))).child(“value”).value
Next
rs.Update
Next
lngOffset = lngOffset + intLimit
Loop While objRecords.children.Count = intLimit
’ 後始末
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub