有没有办法使用单行为VBA中的数组赋值?

时间:2016-09-15 11:19:38

标签: arrays excel-vba vba excel

我正在编写一些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]

5 个答案:

答案 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)