【问题标题】: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),它正在工作。但是我希望它是动态的,所以我可以添加/删除行。

【问题讨论】:

    标签: arrays excel vba


    【解决方案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)尝试了“循环”解决方案,它正在工作:)
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 2019-02-22
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多