【发布时间】:2014-06-11 21:49:36
【问题描述】:
我在尝试填充多维变量数组时遇到了一些问题。我想要做的是向数组中的第 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 100 长度的数组,然后我可以操作它来计算其中填充值的数量并将其重新调整为(0 到 100),但首先希望探索是否有任何答案回答我的上述问题。
非常感谢。
更新:(我的第二次尝试:仍然在 arr(arrLen, 1) = Range("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
【问题讨论】:
-
VBA 数组不是“动态的”——它们不会随着您添加新元素而增长:您总是需要使用
ReDim [Preserve]显式调整它们的大小,并且您只能更改多维数组中的最后一个维度使用Preserve时的维度数组。 patorjk.com/programming/tutorials/vbarrays.htm -
感谢蒂姆澄清这一点。希望避免将 Redim Perserve 放入我的循环中,因为它会极大地减慢一切(这个循环又会循环大约 200 次)。哦,好吧,无论如何都要休息一下......
标签: arrays vba dynamic-arrays