我正在编写一些excel-VBA,并且我将一些整数(总共11个)分配给索引为1到11的数组。现在我一次只做一个索引,我想知道是否有一种方法可以在一行中完成,就像在Matlab中完成它一样。
我现在是怎么做的:
Dim cols(1 To 11) As Integer
cols(1) = 2
cols(2) = 3
cols(3) = 5
cols(4) = 6
cols(5) = 7
cols(6) = 9
cols(7) = 10
cols(8) = 13
cols(9) = 14
cols(10) = 15
cols(11) = 16
我想怎么做:
Dim cols(1 To 11) As Integer
cols = [2,3,5,6,7,9,10,13,14,15,16]
我知道可以在不将变量定义为数组的情况下完成,但是返回索引为0到10的数组,这对我来说是不需要的:
Dim cols As Variant
cols = Array(2,3,5,6,7,9,10,13,14,15,16]
答案 0 :(得分:8)
如果Variant数组正常:
Dim cols()
cols = [{2,3,5,6,7,9,10,13,14,15,16}]
答案 1 :(得分:2)
如果你可以使用两行而不是一行,你可以试试这个:
.src
答案 2 :(得分:0)
@Rory的答案正确,但是我们可以使代码看起来像是在一行上这样:
Dim cols(): cols = [{2,3,5,6,7,9,10,13,14,15,16}]
答案 3 :(得分:0)
您可以对row()函数进行评估(而不是重复使用每个数字)(如果您尚未处理2019/365版本*中的SEQUENCE()
函数):
Dim cols: cols = Application.Transpose(Evaluate("row(2:16)"))
' cosmetic
ReDim Preserve cols(0 To UBound(cols) - 1)
注意:仅当要获取从零开始的1-dim数组时,才使用ReDim。
MS Excel 365版本的提示
*)动态SEQUENCE()
函数可以立即作为公式应用在垂直区域的顶部,例如=SEQUENCE(15;1;2)
;集成到VBA代码中以获得“平面” 1-dim数组将导致
Dim cols: cols = Application.Transpose(Evaluate("SEQUENCE(15;1;2)"))
答案 4 :(得分:-1)
或者,如果您真的想要一行,请这样做
Dim cols(): cols = Array(2,3,5,6,7,9,10,13,14,15,16)