Arrays 是否有方法使用array函数在VBA中创建二维数组>;
我想快速创建一个6X4小整数数组。 对于一个小的一维数组,我喜欢使用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)
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所要寻找的紧凑形式。我不想重复应用程序相对未知的用法。索引通过双零参数转换锯齿数组,正如我在上一节中已经回答的那样;进一步阅读,我可能有兴趣通过