You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整Excel VBA宏实现JSON数据按最新至最早顺序写入

解决方案:反转VBA宏中JSON数据的写入顺序

要实现将数据按「最新→最早」的顺序写入Excel,我们可以通过先收集所有数据到数组、反转数组顺序再写入的方式来实现,这种方法不仅能满足你的格式对齐需求,还比逐个单元格反向写入更高效,适合大体积文件。

修改思路

原代码是直接按API返回的Data数组顺序(最早数据在前)逐个写入单元格,我们需要:

  1. 先把所有close值收集到一个临时数组中
  2. 反转这个数组的顺序,让最新数据移到数组开头
  3. 再将反转后的数组写入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:32:36