|
楼主 |
发表于 2012-6-20 19:09
|
显示全部楼层
参考代码:- Option Explicit
- Sub Q1()
- Dim D As New Dictionary, Arr, i&, Ar(1 To 60000, 1 To 3), K&, NAdd&
- Arr = Range([e2], [e2].End(4)).Value
- For i = 1 To UBound(Arr)
- D.Add Arr(i, 1), i
- Ar(i, 1) = i: Ar(i, 2) = Arr(i, 1)
- Next i
- K = i - 1: NAdd = K
- Arr = Range([a2], [b2].End(4)).Value
- For i = 1 To UBound(Arr)
- If D.Exists(Arr(i, 1)) Then
- Ar(D(Arr(i, 1)), 3) = Ar(D(Arr(i, 1)), 3) + Arr(i, 2)
- Else
- K = K + 1
- D.Add Arr(i, 1), K
- Ar(K, 1) = K: Ar(K, 2) = Arr(i, 1): Ar(K, 3) = Arr(i, 2)
- End If
- Next i
- Range("d2:f" & Rows.Count).ClearContents
- [d2].Resize(K, 3) = Ar
- If K > NAdd Then [d2].Offset(NAdd).Resize(K - NAdd, 2).Font.Bold = True
- Set D = Nothing
- End Sub
复制代码- Option Explicit
- Sub Q2()
- Dim D As New Dictionary, Arr, K&
- Dim MaxN&, MinN&, i&, Ar(1 To 60000, 1 To 2)
- MinN = [c2]: MaxN = [d2]
- Arr = Range([a2], [b2].End(4)).Value
- For i = 1 To UBound(Arr)
- If Len(Arr(i, 1)) = 0 Then
- Arr(i, 1) = Arr(i - 1, 1)
- End If
- If Arr(i, 2) >= MinN And Arr(i, 2) <= MaxN Then
- If D.Exists(Arr(i, 1)) Then
- Ar(D(Arr(i, 1)), 2) = Ar(D(Arr(i, 1)), 2) + Arr(i, 2)
- Else
- K = K + 1: D.Add Arr(i, 1), K
- Ar(K, 1) = Arr(i, 1): Ar(K, 2) = Arr(i, 2)
- End If
- End If
- Next i
- Range("e2:f" & Rows.Count).ClearContents
- [e2].Resize(K, 2) = Ar
- Set D = Nothing
- End Sub
复制代码 |
|