Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 为什么要创建二维数组-Excel VBA_Arrays_Excel_Vba - Fatal编程技术网

Arrays 为什么要创建二维数组-Excel VBA

Arrays 为什么要创建二维数组-Excel VBA,arrays,excel,vba,Arrays,Excel,Vba,下面是加载数组的代码行,数组的名称从列E开始,到前面循环确定的行中的姓氏。循环在最后一列计算。我想说的是,它应该看第一页,尽管开始这一页的按钮就在那一页上。不确定是否需要 Dim AssociateNameArray As Variant AssociateNameArray = Worksheets(1).Range(Cells(1, 5), (Cells(1, LastColumn))).Value 这将创建一个二维数组,其中1,1具有第一个名称,1,2具有第二个名称,依此类推 如何修改

下面是加载数组的代码行,数组的名称从列E开始,到前面循环确定的行中的姓氏。循环在最后一列计算。我想说的是,它应该看第一页,尽管开始这一页的按钮就在那一页上。不确定是否需要

Dim AssociateNameArray As Variant

AssociateNameArray = Worksheets(1).Range(Cells(1, 5), (Cells(1, LastColumn))).Value
这将创建一个二维数组,其中1,1具有第一个名称,1,2具有第二个名称,依此类推

如何修改此选项,以便将范围内的数据放入一维数组?

两种方式:

将数组换位两次

AssociateNameArray = Application.Transpose(Application.Transpose(Worksheets(1).Range(Worksheets(1).Cells(1, 5), Worksheets(1).Cells(1, LastColumn)).Value))
或循环二维数组并将其放入一维数组中:

Dim AssociateNameArray As Variant
AssociateNameArray = Worksheets(1).Range(Worksheets(1).Cells(1, 5), Worksheets(1).Cells(1, LastColumn)).Value

Dim newArr()
ReDim newArr(1 To UBound(AssociateNameArray, 2))

Dim i As Long
For i = 1 To UBound(AssociateNameArray, 2)
    newArr(i) = AssociateNameArray(1, i)
Next i
转置对允许的项数有限制,但对于单行应该可以。第二种方法没有这样的限制

从技术上讲,可以循环范围并跳过2d数组,但这将是一个较慢的选项,因为任何时候代码打破工作表的面纱,都会减慢代码的速度。

两种方式:

将数组换位两次

AssociateNameArray = Application.Transpose(Application.Transpose(Worksheets(1).Range(Worksheets(1).Cells(1, 5), Worksheets(1).Cells(1, LastColumn)).Value))
或循环二维数组并将其放入一维数组中:

Dim AssociateNameArray As Variant
AssociateNameArray = Worksheets(1).Range(Worksheets(1).Cells(1, 5), Worksheets(1).Cells(1, LastColumn)).Value

Dim newArr()
ReDim newArr(1 To UBound(AssociateNameArray, 2))

Dim i As Long
For i = 1 To UBound(AssociateNameArray, 2)
    newArr(i) = AssociateNameArray(1, i)
Next i
转置对允许的项数有限制,但对于单行应该可以。第二种方法没有这样的限制


从技术上讲,可以循环范围并跳过2d数组,但这将是一个较慢的选项,因为任何时候代码打破工作表的面纱,都会减慢代码的速度。

您可以循环范围1:

通常,向数组发送范围时,它会为行、列创建二维数组


1:正如@ScottCraner所指出的,这是一种较慢的方法。我只是想提一下,出于学术目的

您可以在范围1中循环:

通常,向数组发送范围时,它会为行、列创建二维数组


1:正如@ScottCraner所指出的,这是一种较慢的方法。仅供学术参考

FYI:是了解数组和范围的一个很好的资源。任何引用超过一个单元格的范围都会产生一个2D变体数组,这就是它的工作原理=注意仅供参考:这是了解数组和范围的一个很好的资源。任何引用超过一个单元格的范围都会产生一个2D变体数组,这就是它的工作原理=注意转置对于我正在做的工作来说非常有效。谢谢小心:这些不合格的单元格调用在合格的工作表中。范围调用每天都会导致错误1004。@MathieuGuindon专注于另一个问题,却忽略了这个问题。已经修好了。@Country_Gravy请看马修的评论和我的修改。此外,如果这对你有用,请通过点击复选标记来考虑正确的标记。转置对我所做的工作非常有效。谢谢小心:这些不合格的单元格调用在合格的工作表中。范围调用每天都会导致错误1004。@MathieuGuindon专注于另一个问题,却忽略了这个问题。已经修好了。@Country_Gravy请看马修的评论和我的修改。此外,如果这对你有用,请考虑通过点击复选标记正确的标记。