|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Sub test()
Dim d As Object, a, b, j%, w! '定义参数
Dim ss$, n%, x '定义参数
ActiveSheet.UsedRange.Offset(2, 0) = "" '清空第2行以下的单元格。
a = Sheet1.Range(Sheet1.[a2], Sheet1.[i65536].End(xlUp)) '把原始数据所在的表1自A4以下的I列最后的非空单元格区域的值赋给变量a。
Set d = CreateObject("scripting.dictionary") '创建字典对象d。
ReDim b(1 To UBound(a), 1 To 8)
For i = 1 To UBound(a) '在1 和数组a第一维的上界值之间逐一循环
ss = a(i, 2) & a(i, 3) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 1) '把不变的内容连起来然后赋给变量ss。
If Not d.Exists(ss) Then '如果字典d里面不存在ss表示的关键字,那么执行下面的语句。
n = n + 1 '把变量n增加1以后仍然赋给n
d.Add ss, n '把ss的值作为关键字,n的值作为对应的项一起加入字典d中。n的值实际是关键字的位置次序,如n=1时是第一个关键字;n=2时是第二个关键字。
b(n, 1) = a(i, 2): b(n, 2) = a(i, 3): b(n, 3) = a(i, 4): b(n, 5) = a(i, 4) '4个语句分别给数组b的各个元素赋以对应的值
b(n, 5) = a(i, 6): b(n, 6) = a(i, 1): b(n, 7) = a(i, 7)
Else
b(d(ss), 7) = b(d(ss), 7) & "+" & a(i, 7)
End If
Next
For i = 1 To d.Count '在字典关键字数目中逐一循环
x = Split(b(i, 7), "+") '运用VBA函数Split把b(i, 7)按照"+"分割,返回一个下标从零开始的一维数组x。
For j = 0 To UBound(x) '在上面的x数组之间逐一循环
w = w + x(j) '把变量w加x(j)数组的一个元素以后仍然赋给w。实际得到x数组的累加值。
Next j
b(i, 8) = b(i, 5) * b(i, 7) 'w求出后经过按要求计算得到的值赋给数组b的第8列元素就是数量和单价的乘积。(数量列)另一句把变量w置0。避免在新一次的循环中误加进去。
Next
[b4].Resize(n, 8) = b '最后把数组b赋给B4开始的单元格区域。
End Sub
目的是想实现把表1中的数据按照相等的求和以后放在表2中 代码是套用蓝桥版主的 就是不可以运行
|
|