VBA如何在循环中使用动态数组

时间:2013-10-21 12:30:40

标签: excel-vba dynamic-arrays vba excel

我正在解析制表符分隔的txt文件。文件中的每一行包含3个字段: 1. nCells - 它是常数,每行必须相同 2.产品指数 3.柜台(购买了多少产品)

我想创建一个包含每个产品索引的产品计数器的数组。 问题是我在解析文件时填充了这个数组,而且我不知道" nCells"进入解析循环之前的属性。

我应该在解析循环之外定义大小为1的数组,然后在解析nCell之后,执行以下操作:

If i = 1 Then ReDim array(1 to nCells)

或者有更好的方法吗?

例如:对于以下输入文件:

3    1    20
3    1    30
3    2    10
3    3    15

我想创建一个包含3个单元格的数组,其中单元格#1中包含50个(20 + 30),单元格#2中包含10个单元格,在单元格#3中包含15个单元格。 问题是我事先并不知道我有3个产品,我的阵列应该包含3个单元格。我只在解析文件的第一行时才发现这一点。所以我不能在循环外声明一个静态数组,我必须在循环内声明一个动态数组。

谢谢, 李

2 个答案:

答案 0 :(得分:0)

我会使用一个集合,因为它会扩展到所需的大小。

Sub a()     Dim myColl As Collection     Dim i As Integer     设置myColl = New Collection     Dim v As Variant

For i = 1 To 3
    myColl.Add Array(i, Now)
Next
For Each v In myColl
    Debug.Print v(0), v(1)
Next
Set myColl = Nothing

End Sub

答案 1 :(得分:0)

您可以使用Dictionary创建部件直方图

Public Sub Histogram()
    Dim d As New Dictionary, parts() As String
    Dim ts As TextStream, line As String
    Set ts = fso.OpenTextFile("BookData.txt", ForReading, False)
    While Not ts.AtEndOfStream
        line = ts.ReadLine
        parts = Split(line, vbTab) ' 0-index string array 
        ' 2nd column contains the unique product string.
        ' Use product as key for dictionary and quantity for value
        If d.Exists(parts(1)) Then
            d(parts(1)) = d(parts(1)) + CInt(parts(2))
        Else
            d.Add parts(1), CInt(parts(2))
        End If
    Wend
    ts.Close
    Dim i As Integer
    For i = 1 To d.Count
        Debug.Print d.Keys(i - 1), d(d.Keys(i - 1))
    Next i
    ' Produces the following output with your example data
    ' 1    50
    ' 2    10
    ' 3    15
End Sub

这会忽略每行的第一列parts(0)