在VBA中将1D阵列分配给2D阵列

时间:2016-10-23 00:01:13

标签: arrays vba excel-vba excel

我正在寻找在我的VBA宏中实现以下功能的方法。我有一个大小(xx,yy)的2D数组,我想动态填充。问题是返回值的函数返回1D数组。反转大小(yy,1)而不是(1,yy)。有没有办法使用函数返回的数组动态分配下一行。实现该功能的伪代码如下:

Dim X() As Double
ReDim X(1 to xx, 1 to yy)
Dim i As Long

For i=1 To xx
     X(i,)= FunctionReturningArrayOfSize(1 to yy, 1 to 1)
Next i

编辑:只是为了弄清楚 - 我的结果数组X的每一行都是由执行FunctionReturningArrayOfSize(在for循环中)返回的。

2 个答案:

答案 0 :(得分:1)

您正在使用Excel,因此您可以使用VBA中的Transpose功能。

Transpose会自动将1D数组转换为2D数组。

Sub Test()

  Dim a1D() As Variant
  'Assign a 1D array
  a1D = Array(1, 2, 3, 4, 5, 6)

  Dim a2D As Variant
  'Transpose to a 2D array
  a2D = Application.WorksheetFunction.Transpose(a1D)

End Sub

答案 1 :(得分:1)

您可以将1D数组分配给2D Range,但不能分配给另一个数组。

Dim X() ' has to be Variant array
With Range("A1").Resize(xx, yy)
     .Value2 = FunctionReturningArrayOfSize(1 to yy, 1 to 1)
     X = .Value2    ' or X = WorksheetFunction.Transpose(.Value2) to rotate it
End With