将单个值添加到多维数组vba,然后重新创建

时间:2014-04-26 01:52:02

标签: arrays vba dynamic-arrays

我遇到了一些试图填充多维变量数组的问题。我想要做的是向数组中的第1行第1列添加单个值。但是,以下代码不起作用。

Dim arr() As Variant
arr(1,1) = 3

在此基础上,我希望在满足某些条件时向数组添加更多值。例如

 For c = 2 To 10001
        Sheets("Data").Select
        If Range("P" & c) = branch And Range("Q" & c) = dept And Range("R" & c) = subdept Then
            arr(UBound(arr) + 1, 1) = Range("A" & c)
        End If
    Next c

循环结束后,我完成了提取值后,我希望将其重新设置为可变长度数组。但是,

Redim arr()

也不起作用。此外,我应该指出,我并不需要数组是多维的,只是大小可变。说,我不知道在VBA中创建一维动态数组的方法。

总结

1)为什么arr(1,1)会给我一个错误?

2)为什么Redim arr()会给我一个错误? (我不想重新调整到固定大小)

3)有没有办法在VBA中创建动态1D数组?

注意:我想我可以声明一个1D 100长度数组,然后我可以操作它来计算其中填充值的数量并将其重新设置为(0到100),但首先希望探索是否有任何答案我的上述问题。

非常感谢。

更新:(我的第二次尝试:仍然在arr上失败(arrLen,1)=范围(“A”& c))

 arrLen = 1

    For c = 2 To 10001
        Sheets("Data").Select
        If Range("P" & c) = branch And Range("Q" & c) = dept And Range("R" & c) = subdept Then
            ReDim Preserve arr(arrLen To 1)
            arr(arrLen, 1) = Range("A" & c)
            arrLen = arrLen + 1
        End If
    Next c

3 个答案:

答案 0 :(得分:1)

下面的工作代码。

Option Base 1

Dim arr() as string
    arrLen = 1

    For c = 2 To 10001
        Sheets("Data").Select
        If Range("P" & c) = branch And Range("Q" & c) = dept And Range("R" & c) = subdept Then
            ReDim Preserve arr(1 To arrLen)
            arr(arrLen) = Range("A" & c)
            arrLen = arrLen + 1
        End If
    Next c

答案 1 :(得分:1)

有两个原因。

  • 您的数组只有1维,而不是2个
  • 您的逻辑应为1 To arrLen而不是arrLen to 1

重切

ReDim Preserve arr(1 To arrLen)
arr(arrLen) = Range("A" & c)
arrLen = arrLen + 1

答案 2 :(得分:1)

因为您正在处理固定范围(单元格2到10001) - 甚至是动态范围 - 实际上 - 您可以避免将ReDim放入循环中。

ReDim arr(1 to 10001)
For c = 2 To 10001
    Sheets("Data").Select
    If Range("P" & c) = branch And Range("Q" & c) = dept And Range("R" & c) = subdept Then
        arr(arrLen) = Range("A" & c)
        arrLen = arrLen + 1
    End If
Next c
ReDim Preserve arr(1 to arrLen)

这应该会加快你的表现。首先,鉴于已知For循环的迭代,您将使数组尽可能地永远。然后你处理你的数据,把它放到数组中,在循环结束后,你ReDim down 来摆脱空元素。