调整Excel VBA宏实现JSON数据按最新至最早顺序写入
解决方案:反转VBA宏中JSON数据的写入顺序
要实现将数据按「最新→最早」的顺序写入Excel,我们可以通过先收集所有数据到数组、反转数组顺序再写入的方式来实现,这种方法不仅能满足你的格式对齐需求,还比逐个单元格反向写入更高效,适合大体积文件。
修改思路
原代码是直接按API返回的Data数组顺序(最早数据在前)逐个写入单元格,我们需要:
- 先把所有
close值收集到一个临时数组中 - 反转这个数组的顺序,让最新数据移到数组开头
- 再将反转后的数组写入Excel,这样就能从左到右呈现「最新→最早」的顺序
修改后的完整代码
Sub getPrices() Dim strURL As String, strJSON As String, strTicker As String, strCurrency As String, strLength As String Dim i As Integer, idx As Integer Dim http As Object Dim JSON As Object, Item As Object Dim LastColumn As Long, lastrow As Long Dim closeValues As Variant, reversedValues As Variant With ActiveSheet LastColumn = .Cells(9, .Columns.Count).End(xlToLeft).Column lastrow = .Cells(Rows.Count, 2).End(xlUp).Row End With For x = 10 To lastrow strTicker = Cells(x, 2).Value strCurrency = Cells(6, 2).Value strLength = Cells(5, 2).Value strURL = "https://min-api.cryptocompare.com/data/histoday?fsym=" & strTicker & "&tsym=" & strCurrency & "&limit=" & strLength & "&aggregate=3&e=CCCAGG" Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", strURL, False http.Send strJSON = http.ResponseText Set JSON = JsonConverter.ParseJson(strJSON) ' 第一步:收集所有close值到临时数组 ReDim closeValues(1 To JSON("Data").Count) idx = 1 For Each Item In JSON("Data") closeValues(idx) = Item("close") idx = idx + 1 Next ' 第二步:反转数组顺序 ReDim reversedValues(1 To UBound(closeValues)) For idx = 1 To UBound(closeValues) reversedValues(idx) = closeValues(UBound(closeValues) - idx + 1) Next ' 第三步:写入反转后的数据(从第3列开始,对应原起始位置) i = 3 For idx = 1 To UBound(reversedValues) Cells(x, i).Value = reversedValues(idx) i = i + 1 Next Next End Sub
关键修改点说明
- 新增了两个数组变量
closeValues和reversedValues,用于暂存和反转数据 - 先遍历API返回的
Data集合,把所有收盘价存入数组,避免重复解析JSON - 通过数组反转操作调整顺序,比直接反向遍历
Data集合更直观且高效 - 最后按反转后的数组顺序写入单元格,确保最新数据出现在最左侧列,和你的其他配套数据格式对齐
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

