在 Excel 2016 中返回一维数组
Returning a 1D array in Excel 2016
我一直在努力弄清楚如何从 VBA 函数中 return 数组。我看到了这个网站:http://www.cpearson.com/excel/returningarraysfromvba.aspx,它提供了一些有用的例子,尤其是这个:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3, 1 To 4)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R, C) = N
Next C
Next R
Test = V
End Function
当我在 ctrl+shift+enter
的单元格垂直范围内键入 =Test()
时,我得到了预期的结果:
1
5
9
但是如果我想要 return 一维数组怎么办?我尝试修改函数使 V 成为一维数组:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R) = N
Next C
Next R
Test = V
End Function
现在,当我将其输入相同的垂直范围时,我得到:
4
4
4
为什么会发生这种情况,这种行为记录在何处?
因为它默认跨列而不是跨行填充。
尝试
=TRANSPOSE(Test())
如果你想填写下面的行。
如果你想以编程方式更改默认值,你也可以
Function Test()
.
.
.
Test = Worksheetfunction.Transpose(V)
End Function
首先TRANSPOSE()一维数组:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R) = N
Next C
Next R
Test = Application.Transpose(V)
End Function
然后在工作表select三个垂直单元格和数组中输入:
=test()
数组公式必须用Ctrl + Shift + 输入Enter 而不仅仅是 Enter 键。
我一直在努力弄清楚如何从 VBA 函数中 return 数组。我看到了这个网站:http://www.cpearson.com/excel/returningarraysfromvba.aspx,它提供了一些有用的例子,尤其是这个:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3, 1 To 4)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R, C) = N
Next C
Next R
Test = V
End Function
当我在 ctrl+shift+enter
的单元格垂直范围内键入 =Test()
时,我得到了预期的结果:
1
5
9
但是如果我想要 return 一维数组怎么办?我尝试修改函数使 V 成为一维数组:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R) = N
Next C
Next R
Test = V
End Function
现在,当我将其输入相同的垂直范围时,我得到:
4
4
4
为什么会发生这种情况,这种行为记录在何处?
因为它默认跨列而不是跨行填充。
尝试
=TRANSPOSE(Test())
如果你想填写下面的行。
如果你想以编程方式更改默认值,你也可以
Function Test()
.
.
.
Test = Worksheetfunction.Transpose(V)
End Function
首先TRANSPOSE()一维数组:
Function Test() As Variant
Dim V() As Variant
Dim N As Long
Dim R As Long
Dim C As Long
ReDim V(1 To 3)
For R = 1 To 3
For C = 1 To 4
N = N + 1
V(R) = N
Next C
Next R
Test = Application.Transpose(V)
End Function
然后在工作表select三个垂直单元格和数组中输入:
=test()
数组公式必须用Ctrl + Shift + 输入Enter 而不仅仅是 Enter 键。