【发布时间】:2019-08-17 05:07:47
【问题描述】:
我有一个简单的问题:
- 我有一组数据,我正在筛选并在条件匹配时添加到数组中
- 问题是,我不知道可能有多少匹配,所以我需要数组的大小未指定。
- 数组的第二个索引是静态的。
在一个(伪语言)示例中:
if <matched criteria> = True {
i = i + 1
array( i, 1 ) => "John Doe" ' name
array( i, 2 ) => "New York" ' location
array( i, 3 ) => "02. 08. 1992" ' birthdate
}
问题是,在vba 中,您必须预先声明数组(尤其是在启用Option Explicit 的情况下)。我的想法是声明一个数组,它会从0 的第一个索引开始,我会根据需要逐渐ReDim。
这是我的代码的简化示例:
Dim cell as Range
Dim arr(0, 1 to 3) as String
Dim i As Integer: i = 0
For each cell in Range("A1:A100")
If criteria_match(cell) = True Then
arr(i, 1) = Cells(cell.row, 4)
arr(i, 2) = Cells(cell.row, 5)
arr(i, 3) = Year(Cells(cell.row, 6))
i = i + 1
ReDim Preserve arr(i, 1 to 3)
End If
Next cell
问题是,这会引发异常:
有没有什么办法,我可以根据需要稳步增加第一个数组索引的大小?
【问题讨论】:
-
我建议使用嵌套的一维数组结构,如果需要,可以使用
Denestify()将其转换为二维数组
标签: vba arrays excel vba multidimensional-array resize