根据工作表中的单元格为数组赋值

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)尝试了“循环”解决方案,它正在工作:)

以上是关于根据工作表中的单元格为数组赋值的主要内容,如果未能解决你的问题,请参考以下文章

Java如何将List 赋值到数组

VBA中如何把A这列数赋值给数组?谢谢

vba 怎么将单元格区域赋值给数组

如果 A 列中的单元格为空白,则针对不同工作表中的数据集查找 B 列

用vba给Excel单元格赋值

cobol数组赋值