我遇到了一些试图填充多维变量数组的问题。我想要做的是向数组中的第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
答案 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 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 来摆脱空元素。