|
本帖最后由 lichuanboy44 于 2016-1-19 19:57 编辑
Sub 合并()
Dim br
ar = Worksheets(1).[A1].CurrentRegion '将Sheet1的数据一次性读入内存数组,数组处理数据速度快很多
Set d = CreateObject("scripting.dictionary") '定义字典
n = UBound(ar): ReDim br(1 To n - 1, 1 To 8) 'n获取数据行数;定义数组br,存取不重复值、累加、字符连接等结果
For i = 2 To n 'for循环逐个取出Sheet1 的数组进行分析并处理
s = ar(i, 1) & "/" & ar(i, 2) & "/" & ar(i, 3) & "/" & ar(i, 4) & "/" & ar(i, 5) '将名称规格至单位这5行合并成一个字符,每行
If Not d.exists(s) Then '如果字典d中没有上述合并字符s,则将s存入字典
p = p + 1 '存取一个p累加1,P值的多少,反映不重复值就有多少
d(s) = p '将变量s存入字典,字典的key关键值为s,s对应的值为P,即序号
For j = 1 To 5 '如果不重复时,将名称规格至单位这5行定入br数组中
br(p, j) = ar(i, j) '同上
Next
br(p, 6) = ar(i, 6): br(p, 7) = ar(i, 7): br(p, 8) = ar(i, 8) '如果不重复时,将6-8列写入br数组中
Else '如果合并的s值重复时,即字典中已在此值时
r = d(s) '在字典中查找到其序号,以便对其进行累加和字符连接
br(r, 6) = br(r, 6) + ar(i, 6) '对重复值的数量进行累加
br(r, 7) = br(r, 7) & "," & ar(i, 7) '对重复值的备注用逗号连接
br(r, 8) = br(r, 8) & "," & ar(i, 8) '对重复值的序号用逗号连接
End If
Next
With Worksheets(2)
.[A2:H10000].ClearContents '清空sheet2表的,以便写入数据处理结果
.[A2].Resize(p, 8) = br '将br数据处理结果写入sheet2
.Activate '激活sheet2
End With
End Sub
|
|