【问题标题】:writing multi dimensional array to excel vba将多维数组写入excel vba
【发布时间】:2017-06-29 23:26:42
【问题描述】:

我正在寻求在不使用任何循环的情况下将一维数组写入 Excel 电子表格。本质上,我正在尝试加快我的代码速度,以便我可以将价格系列转换为回报系列。

我已将价格系列复制到一个变量中,然后执行转换以返回,但我似乎无法将整个数组写回 excel。我似乎只能使用循环一个接一个地完成它。这基本上违背了试图避免多次从 excel 读取/写入的目的。我的代码如下。

理想情况下,我会尝试在不实际循环的情况下完成最终循环。

For j = 1 To num_sec
    len_ror = wks_acp.Range("A:A").Offset(0,j).Cells.SpecialCells(xlCellTypeConstants).Count - 2
    last_row = max_row - len_ror + 1 
    ReDim prices(len_ror + 1) As Variant 
    ReDim rors(len_ror - 1) As Variant 

    prices = wks_acp.Range("$a$" & last_row - 1 & ":" & "$a$" & max_row).Offset(0, j).Value

For i = 0 To len_ror - 1 
    On Error GoTo errhandler
    rors(i) = (prices(i + 2, 1) / prices(i + 1, 1)) - 1

Next i

For i = 0 To len_ror - 1
wks_test.Range("$a$" & last_row + i).Offset(0, j) = rors(i)
Next i  

【问题讨论】:

    标签: arrays excel vba


    【解决方案1】:

    作为替代方案,您可以将ReDim rors 作为二维数组并以这种方式使用:

    Sub demo()
        Dim x As Long
        x = 10
        ReDim rors(1 To x, 1 To 1)
    
        For i = 1 To 10
            rors(i, 1) = i
        Next i
    
        Range("B9:B18") = rors
    End Sub
    

    【讨论】:

      【解决方案2】:

      可以将一维数组写入一行:

      wks_test.Cells(1, 1).Resize(1, ubound(arr)+1).value = arr
      

      或到一列:

      wks_test.Cells(1, 1).Resize(ubound(arr)+1, 1).value = Application.Transpose(arr)
      

      以上假设您的数组 arr 是从零开始的。

      注意:如果您的数组大小 > ~65k,则不能使用 Application.Transpose

      【讨论】:

      • 完美,就是这样!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多