|
参考代码:[前期绑定]
Sub aa()
Dim D As New Dictionary, Ar1, Ar2, Syf$, Ske$
Dim Arr(1 To 60000, 1 To 3), i&, K&
Ar1 = [a1].CurrentRegion.Value
Ar2 = [e1].CurrentRegion.Value
For i = 2 To UBound(Ar2)
D.Add Ar2(i, 1), Ar2(i, 2)
Next i
For i = 2 To UBound(Ar1)
Syf = Format(Ar1(i, 1), "mÔÂ")
Ske = Syf & Ar1(i, 2)
If D.Exists(Ar1(i, 2)) Then
If D.Exists(Ske) Then
Arr(D(Ske), 3) = Arr(D(Ske), 3) + Ar1(i, 3) * D(Ar1(i, 2))
Else
K = K + 1: D.Add Ske, K
Arr(K, 1) = Syf: Arr(K, 2) = Ar1(i, 2): Arr(K, 3) = Ar1(i, 3) * D(Ar1(i, 2))
End If
End If
Next i
Range("h2:j" & Rows.Count).ClearContents
[h2].Resize(K, 3) = Arr
set d=nothing
End Sub
作业中的问题:
1.引用工作表函数;
2.单元格操作;
3.含计算或引用对象的表达式,没有养成赋值给变量的习惯;
4.关于D.KEYS/ITEMS方法生成的数组,前期绑定可直接引用数组中的元素,后期绑定不可直接引用;如果要引用KEYS/ITEMS方法生成的数组中的元素,建议是用变量赋值后,再引用;[不要怕定义变量]
5.代码缩进;
6.赋值前清空结果区域;
7.获取ITEM时,尽量判断KEY是否存在;[若有新建需要,可采用简写方式];
8.返回D.KEYS/ITEMS方法时,建议是判断D.COUNT>0,再进行后续的处理;
9.字典使用完,释放内存。
|
|