[英]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.