繁体   English   中英

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

[英]Why is this creating a two dimensional array - Excel VBA

这是代码行,其名称从E列开始加载到数组,并转到循环之前确定的行中的姓氏。 循环计算出“ LastColumn”。 我想指出它应该在第一张纸上看,尽管启动它的按钮在该页面上。 不知道是否需要。

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

或循环2d数组并将其放入1d数组中:

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

Sub t()
Dim AssociateNameArray As Variant
Dim rng As Range
Dim lastColumn As Long, i As Long
lastColumn = 10 'for example
Set rng = Worksheets(1).Range(Cells(1, 5), (Cells(1, lastColumn)))

ReDim AssociateNameArray(1 To rng.Cells.Count)

For i = LBound(AssociateNameArray) To UBound(AssociateNameArray)
    AssociateNameArray(i) = rng.Cells(i).Value
Next i
End Sub

通常,将Range发送到数组时,它将为(row, column)创建一个二维数组。

1:如@ScottCraner所述,这是一种较慢的方法。 只是出于学术目的而提及

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM