根据工作表中的单元格为数组赋值
Posted
技术标签:
【中文标题】根据工作表中的单元格为数组赋值【英文标题】:Assign values to array based on cells in sheet 【发布时间】:2019-10-21 18:33:43 【问题描述】:我正在尝试将 A 列中的值分配给数组。
我希望数组的大小是动态的。我想遍历每个单元格并将每个单元格值分配给我的数组。
Sub exercise3()
Dim asnwer
Dim output
Dim lastrow
Dim test
Dim i
Dim Data() As Variant 'Creating an dynamic array
Dim endnumber
lastrow = cells(Rows.Count, 1).End(xlUp).Row 'Find last row in column A
MsgBox (lastrow)
For i = 1 To lastrow
Data(i) = cells(i, "A").Value 'I want to assign each cell value to my array
Next i
MsgBox (Data(6))
Set output = cells(4, 4)
answer = WorksheetFunction.Average(Data)
output.Value = answer
End Sub
我的循环出现错误
“下标超出范围”。
我在 A 列中有 14 行。如果我声明具有 14 个位置/变量的数组,如下所示:Dim data (14),它正在工作。但是我希望它是动态的,所以我可以添加/删除行。
【问题讨论】:
【参考方案1】:不需要循环,只需一次将整个分配给数组
Data = ActiveSheet.Range("A1:A" & lastrow).Value
那么你唯一需要记住的是它是一个有 1 列的二维数组,所以:
msgbox Data(6,1)
Sub exercise3()
Dim asnwer As Double
Dim output As Range
Dim lastrow As Long
Dim Data() As Variant 'Creating an dynamic array
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'Find last row in column A
MsgBox lastrow
Data = ActiveSheet.Range("A1:A" & lastrow).Value
MsgBox Data(6, 1)
Set output = ActiveSheet.Cells(4, 4)
answer = WorksheetFunction.Average(Data)
output.Value = answer
End Sub
【讨论】:
嗨,斯科特,首先,非常感谢您的回答!我实际上能够以这种方式解决它。但是,这里我们使用的不是数组,而是一个范围——对吗?我无法理解,为什么我无法遍历单元格并将这些值放入我的数组中? :) 不,您将范围内的值大量分配到数组中,因此您使用的是数组而不是范围。您可以更改数组中的值,它不会导致范围值更改它是范围中值的副本。至于为什么,在尝试加载之前,必须在加载时为数组分配项目数。在获得lastrow
的值后,您需要ReDim Data(1 to lastrow) as variant
,但在大型数据集上循环会更慢。最快最简单的方法是批量加载。
斯科特·克兰纳!非常感谢! :) 这很有意义。我还通过使用 Redim 数据(1 到 lastrow)尝试了“循环”解决方案,它正在工作:)以上是关于根据工作表中的单元格为数组赋值的主要内容,如果未能解决你的问题,请参考以下文章