'****************************************************************************** 'シート名 '共通変数 Public targetId As String Public apiKey As String Public baseURL As String Function init() 'パブリック変数に値を格納 '事業計画テーブル 214737 targetId = Range("targetId") 'Pleasanter API KEY apiKey = "6504c8a807677a3a576e10327f3c19876c55736ee45d4a845796b9e7f5e087bfd4bd0d8184863da8cf1733ca635111432ab334aea59102b06a96ee6d2c05190d" baseURL = "https://nextoffice.Next-hd.co.jp" End Function Function exportDataToSheet(res, tableId, offset) Debug.Print "出力開始" Dim Sh As Worksheet Set Sh = Worksheets(tableId & "") '初回のみシートをクリア If offset = 0 Then Sh.Cells.Clear End If Dim lastRow As Long lastRow = Sh.Cells(Rows.count, 1).End(xlUp).row Dim data As New Dictionary Dim dataCount As Long dataCount = res("Response")("Data").count Dim i, j As Long ' 2次元配列の宣言例(最大1000行×100列と仮定) Dim arrData(1 To 1000, 1 To 100) As Variant For i = 1 To dataCount '店舗名取得 Dim shopName As String shopName = res("Response")("Data")(i)("ClassHash")("ClassB") shopName = Replace(shopName, "/", "") Dim shopFlag shopFlag = res("Response")("Data")(i)("CheckHash")("CheckA") 'Dataシート存在確認 Dim shExist1, shExist2 shExist1 = SheetExists(shopName & "_DATA") If shExist1 = False Then Worksheets("DATAテンプレート").Copy After:=Worksheets(Worksheets.count) ActiveSheet.Name = shopName & "_DATA" ActiveSheet.Visible = False End If shExist1 = SheetExists(shopName & "_DATA") shExist2 = SheetExists(shopName & "_受着完") If shExist2 = False Then If shopFlag = True Then Worksheets("受着完テンプレート2").Copy Before:=Worksheets(shopName & "_DATA") Else Worksheets("受着完テンプレート1").Copy Before:=Worksheets(shopName & "_DATA") End If ActiveSheet.Name = shopName & "_受着完" ActiveSheet.Range("A1") = shopName ActiveSheet.Range("A3") = shopFlag End If shExist2 = SheetExists(shopName & "_損益") If shExist2 = False Then Worksheets("損益テンプレート").Copy After:=Worksheets(shopName & "_受着完") ActiveSheet.Name = shopName & "_損益" ActiveSheet.Range("A1") = shopName ActiveSheet.Range("A3") = shopFlag End If 'Dictionaryへの格納 data.Add "ResultId", res("Response")("Data")(i)("ResultId") data.Add "Status", res("Response")("Data")(i)("Status") data.Add "ItemTitle", res("Response")("Data")(i)("ItemTitle") data.Add "Updator", res("Response")("Data")(i)("Updator") data.Add "UpdatedTime", stringToDate(res("Response")("Data")(i)("UpdatedTime")) data.Add "Body", res("Response")("Data")(i)("Body") ' 2次元配列への格納 For j = 1 To 100 arrData(i, j) = "" ' 初期化 Next j arrData(i, 1) = res("Response")("Data")(i)("ResultId") arrData(i, 2) = res("Response")("Data")(i)("Status") arrData(i, 3) = res("Response")("Data")(i)("ItemTitle") arrData(i, 4) = res("Response")("Data")(i)("Updator") arrData(i, 5) = stringToDate(res("Response")("Data")(i)("UpdatedTime")) arrData(i, 6) = res("Response")("Data")(i)("Body") Dim keys, items, count 'Class keys = res("Response")("Data")(i)("ClassHash").keys items = res("Response")("Data")(i)("ClassHash").items count = res("Response")("Data")(i)("ClassHash").count For j = 0 To count - 1 data.Add keys(j), Replace(items(j), "/", "") arrData(i, 6 + j + 1) = Replace(items(j), "/", "") Next j 'Num keys = res("Response")("Data")(i)("NumHash").keys items = res("Response")("Data")(i)("NumHash").items count = res("Response")("Data")(i)("NumHash").count For j = 0 To count - 1 data.Add keys(j), items(j) arrData(i, 6 + count + j + 1) = items(j) Next j 'Date keys = res("Response")("Data")(i)("DateHash").keys items = res("Response")("Data")(i)("DateHash").items count = res("Response")("Data")(i)("DateHash").count For j = 0 To count - 1 data.Add keys(j), stringToDate(items(j)) arrData(i, 6 + count * 2 + j + 1) = stringToDate(items(j)) Next j 'Description 'keys = res("Response")("Data")(i)("DescriptionHash").keys 'items = res("Response")("Data")(i)("DescriptionHash").items 'count = res("Response")("Data")(i)("DescriptionHash").count 'For j = 0 To count - 1 ' data.Add keys(j), items(j) 'Next j If shExist1 Then Debug.Print shopName Dim g g = 3 Dim id1, id2, id3, id4, id5, id6 For j = 1 To 12 id1 = "Description" & Format(j, "000") '受注-計画 4 id2 = "Description" & Format(j + 60, "000") '着工-計画 26 id3 = "Description" & Format(j + 120, "000") '完成-計画 48 id4 = "Description" & Format(j + 20, "000") '受注-実績 15 id5 = "Description" & Format(j + 80, "000") '着工-実績 37 id6 = "Description" & Format(j + 140, "000") '完成-実績 59 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id1), g, 4, shopName & "_DATA") 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id2), g, 26, shopName & "_DATA") 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id3), g, 48, shopName & "_DATA") 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id4), g, 15, shopName & "_DATA") 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id5), g, 37, shopName & "_DATA") 'Call exportJsonToSheet(res("Response")("Data")(i)("DescriptionHash")(id6), g, 59, shopName & "_DATA") g = g + 7 Next j End If 'Check keys = res("Response")("Data")(i)("CheckHash").keys items = res("Response")("Data")(i)("CheckHash").items count = res("Response")("Data")(i)("CheckHash").count For j = 0 To count - 1 data.Add keys(j), items(j) arrData(i, 6 + count * 3 + j + 1) = items(j) Next j Dim k, itemCount As Long itemCount = data.count For k = 1 To itemCount If (i + lastRow - 1) = 1 Then 'Sh.Cells((i + lastRow - 1), k) = data.keys(k - 1) End If 'Sh.Cells((i + lastRow), k) = data.items(k - 1) Next k data.RemoveAll Next i ' 配列の内容を一括でシートに書き込み Sh.Range(Sh.Cells(lastRow + 1, 1), Sh.Cells(lastRow + dataCount, 100)).Value = arrData Debug.Print "出力完了" End Function Function exportJsonToSheet(dataStr, col, row, shName) Dim Sh As Worksheet Set Sh = Worksheets(shName) Sh.Range(Sh.Cells(row, col), Sh.Cells(row + 9, col + 5)).ClearContents If dataStr <> "" Then Dim dataObj As Object Set dataObj = JsonConverter.ParseJson(dataStr) Dim var, i i = 0 For Each var In dataObj Sh.Cells(row + i, col) = stringToDate(var("1")) Sh.Cells(row + i, col + 1) = var("2") Sh.Cells(row + i, col + 2) = var("3") Sh.Cells(row + i, col + 3) = var("4") Sh.Cells(row + i, col + 4) = var("6") Sh.Cells(row + i, col + 5) = var("7") i = i + 1 Next var End If End Function