【问题标题】:Using a for loop to append to array in Excel VBA Basic在 Excel VBA Basic 中使用 for 循环追加到数组
【发布时间】:2020-02-21 05:37:21
【问题描述】:

如何使用IF 语句遍历工作表,并为每个TRUE 将其附加到数组中?

基本示例,如果Cells(y, 1).Value 大于 0,则将 1 附加到数组并在给定范围内执行此操作,创建具有多个值 1 的数组(给定多个 Cells(y, 1).Value(s)大于 0)。

这就是我之前创建循环的方式。

For y = 2 To LastRow

    On Error Resume Next
    If Cells(y, 1).Value > 0 Then   
        Cells(y, 2).Value = 1     ' Instead of populating Cells(y,2) with "1" IF true, I want to append the value to an array
    ElseIf Cells(y, 1).Value = 0 > 0 Then 
        Cells(y, 2).Value = 2
    Else
        Cells(y, 2).Value = 0
    End If

Next y

【问题讨论】:

    标签: excel vba append


    【解决方案1】:

    你必须首先维度一个数组

    Dim myArray() as Integer
    

    在您的循环中,跟踪数组将包含的元素数量

    Dim myCount as Integer
    

    然后在你的循环中,你必须增加这个计数器并重新调整数组的大小,以便你可以添加到它

    If Cells(y, 1).Value > 0 Then   
        myCount=myCount+1
        Redim Preserve myArray(1 to myCount)
        myArray(myCount)=1
    

    Preserve 保留字很重要,因为它可以防止在您向其中添加项目时重新初始化数组的内容。

    【讨论】:

    • 感谢 Matt 的快速、清晰和有帮助的回复!
    • 我的荣幸。很高兴我能帮上忙。
    • @Vichtor 记得将马特的答案标记为正确答案。请参阅link 了解更多信息。
    • 对你的回答的一些提示:a) "..在你的循环中,你必须增加这个计数器并重新调整数组的大小" - 只需将数组的大小调整为行数/ items(减 1,因为它是基于 0 的)并最终在循环外执行Redim Preserve。 b)顺便说一句,将一个范围的值分配给一个临时变量数组并循环遍历它比循环遍历一个范围更省时。 c) 为什么将myArray(myCount)= 分配给1 而不是范围值? d) 为什么要从 1 开始填充零边界数组的项值? - @MattCremeens
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2018-10-08
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多