本人做一个excel的macro,
其中有两列, 
name value
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
1000aaa 2
1111aaa 3
1000aaa 4
不如可以抽象成这样,
其中name这一列可能有重复,如果有重复的话将所有name相同的value都放到第一个name中,其余的列删除。
当然这个name可能很大。
1.最简单的方法就是2层循环,n*n是无法接受的。
2.我想就是有哈希的方式实现,
请问vb中是否有c#里面的那种哈希的方式,key和value的,
只要一次遍历就可以把相同name的值求和,基本就是n的时间复杂度。本人vb十分的小白,求高人给一个这样的结构。
用的是excel2003的macro

解决方案 »

  1.   


    Option ExplicitPrivate Sub Command1_Click()
    Dim d, s, k
    Dim ki() As String, i As IntegerSet d = CreateObject("Scripting.Dictionary")
    s = Array( _
             "1000aaa 2", _
             "1111aaa 3", _
             "1000aaa 4", _
             "1000aaa 2", _
             "1111aaa 3", _
             "1000aaa 4", _
             "1000aaa 2", _
             "1111aaa 3", _
             "1000aaa 4")For i = 0 To UBound(s)
      ki = Split(s(i))
      If d.Exists(ki(0)) Then
         d.Item(ki(0)) = Val(d.Item(ki(0))) + Val(ki(1))
      Else
         d.Add ki(0), ki(1)
      End If
    Next'============================
    For Each k In d
        Debug.Print k,
        Debug.Print d.Item(k)
    NextEnd Sub
      

  2.   

    程序内容可以在excel2003的宏内运行