Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 是否有方法使用array函数在VBA中创建二维数组>;_Arrays_Vba_Type 2 Dimension - Fatal编程技术网

Arrays 是否有方法使用array函数在VBA中创建二维数组>;

Arrays 是否有方法使用array函数在VBA中创建二维数组>;,arrays,vba,type-2-dimension,Arrays,Vba,Type 2 Dimension,我想快速创建一个6X4小整数数组。 对于一个小的一维数组,我喜欢使用 Dim MyArr() MyArr = Array(1,2,3,4,5,6) 有没有类似的方法来创建二维阵列? 我试着用手指把行分开;但是 MyArr=Array(1,2,3;4,5,6)无效 我想我太懒得设置循环了,但是一行方法将非常紧凑和有用。VBA.\u HiddenModule.Array函数具有以下特征: Public Function Array(ParamArray ArgList() As Variant)

我想快速创建一个6X4小整数数组。 对于一个小的一维数组,我喜欢使用

Dim MyArr()
MyArr = Array(1,2,3,4,5,6)
有没有类似的方法来创建二维阵列? 我试着用手指把行分开;但是

MyArr=Array(1,2,3;4,5,6)
无效


我想我太懒得设置循环了,但是一行方法将非常紧凑和有用。

VBA.\u HiddenModule.Array函数具有以下特征:

Public Function Array(ParamArray ArgList() As Variant) As Variant
我猜它基本上只是返回
ParamArray
指针,有效地将内联元素序列转换为一个简单的一维
变量
数组

如果该元素序列包含本身为数组的元素,则可以使用锯齿数组或“数组数组”,但不能使用二维数组:

Dim JaggedArray As Variant
JaggedArray = Array( _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
)
您可以使用连续的下标访问其元素:

Debug.Print JaggedArray(2)(3)
Debug.Print twoDimensionalVariantArray(2, 3)
最大的问题是,您已经将数据转换为代码,而通常情况下,将数据与代码分离是一件好事

如果附近有工作表可以读取数据就好了

Dim twoDimensionalVariantArray As Variant
twoDimensionalVariantArray = Sheet1.Range("A1:D6").Value
或者更好地使用命名范围:

twoDimensionalVariantArray = Sheet1.Range("ItemsSource").Value
或实际表格:

twoDimensionalVariantArray = Sheet1.ListObjects("Table1").DataBodyRange.Value
所有一行程序,无需循环

给定一个表示两个或多个单元格区域的范围,
range.Value
返回一个2D
变量
数组。不过要小心,来自工作表的数组始终是基于1的,以便索引与行和列编号对齐(工作表上没有行或列0)。始终使用
LBound(数组,维度)
UBound(数组,维度)
获取数组的上下边界,然后再使用
循环对其进行下一次迭代

可以使用二维下标访问其元素:

Debug.Print JaggedArray(2)(3)
Debug.Print twoDimensionalVariantArray(2, 3)

VBA.\u HiddenModule.Array
函数具有以下签名:

Public Function Array(ParamArray ArgList() As Variant) As Variant
我猜它基本上只是返回
ParamArray
指针,有效地将内联元素序列转换为一个简单的一维
变量
数组

如果该元素序列包含本身为数组的元素,则可以使用锯齿数组或“数组数组”,但不能使用二维数组:

Dim JaggedArray As Variant
JaggedArray = Array( _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
    Array(1, 2, 3, 4), _
)
您可以使用连续的下标访问其元素:

Debug.Print JaggedArray(2)(3)
Debug.Print twoDimensionalVariantArray(2, 3)
最大的问题是,您已经将数据转换为代码,而通常情况下,将数据与代码分离是一件好事

如果附近有工作表可以读取数据就好了

Dim twoDimensionalVariantArray As Variant
twoDimensionalVariantArray = Sheet1.Range("A1:D6").Value
或者更好地使用命名范围:

twoDimensionalVariantArray = Sheet1.Range("ItemsSource").Value
或实际表格:

twoDimensionalVariantArray = Sheet1.ListObjects("Table1").DataBodyRange.Value
所有一行程序,无需循环

给定一个表示两个或多个单元格区域的范围,
range.Value
返回一个2D
变量
数组。不过要小心,来自工作表的数组始终是基于1的,以便索引与行和列编号对齐(工作表上没有行或列0)。始终使用
LBound(数组,维度)
UBound(数组,维度)
获取数组的上下边界,然后再使用
循环对其进行下一次迭代

可以使用二维下标访问其元素:

Debug.Print JaggedArray(2)(3)
Debug.Print twoDimensionalVariantArray(2, 3)

在Excel中,您可以使用
应用程序。计算
(或
[]
快捷方式)和数组文字:

MyArr = [{1,2;3,4}]

在Excel中,您可以使用
应用程序。计算
(或
[]
快捷方式)和数组文字:

MyArr = [{1,2;3,4}]
A)通过Excel/MS 365快速选择

要快速创建2维阵列(具有明确定义的步骤),您可以从Excel for MS 365中的新
SEQUENCE()
函数中获益:

结果

    MyArr(1,1) = 1
    MyArr(1,2) = 2
    MyArr(1,3) = 3
    MyArr(2,1) = 4
    MyArr(2,2) = 5
    MyArr(2,3) = 6

=SEQUENCE(rows,[columns],[start],[step])
注意:任何缺少的可选参数将默认为1

因此,在本例中,只将参数(2,3)传递给序列函数就足够了


B)关于
应用程序索引()的附录

=SEQUENCE(rows,[columns],[start],[step])
如前所述,您还可以通过对
Application.Index
的未记录使用来获利

变换►交错数组通过双零参数

  • 还有一个这样的帖子列表
A)通过Excel/MS 365快速选择

要快速创建2维阵列(具有明确定义的步骤),您可以从Excel for MS 365中的新
SEQUENCE()
函数中获益:

结果

    MyArr(1,1) = 1
    MyArr(1,2) = 2
    MyArr(1,3) = 3
    MyArr(2,1) = 4
    MyArr(2,2) = 5
    MyArr(2,3) = 6

=SEQUENCE(rows,[columns],[start],[step])
注意:任何缺少的可选参数将默认为1

因此,在本例中,只将参数(2,3)传递给序列函数就足够了


B)关于
应用程序索引()的附录

=SEQUENCE(rows,[columns],[start],[step])
如前所述,您还可以通过对
Application.Index
的未记录使用来获利

变换►交错数组通过双零参数

  • 还有一个这样的帖子列表

如果您使用的是Excel,那么。
MyArr=[{1,2;3,4}]
至少在Excel@TimWilliams哈我总是忘了使用
应用程序。像这样评估
——这实际上是值得回答的,而且正是OP所要寻找的紧凑形式。我不想重复
应用程序相对未知的用法。索引
通过双零参数转换锯齿数组,正如我在上一节中已经回答的那样;如果您使用的是Excel,请进一步阅读。
MyArr=[{1,2;3,4}]
至少在Excel@TimWilliams哈我总是忘了使用
应用程序。像这样评估
——这实际上是值得回答的,而且正是OP所要寻找的紧凑形式。我不想重复
应用程序相对未知的用法。索引
通过双零参数转换锯齿数组,正如我在上一节中已经回答的那样;进一步阅读,我可能有兴趣通过