|
本帖最后由 啦啦游游 于 2015-12-8 21:38 编辑
最新的附件在4楼!!
sheet1是原有数据,sheet2是我手输的需要得到的结果,可以做个对照~~
实际数据远大于附件的例子,现在需要按例子的group分组比较
在相同组内的material两两比较其中Weight这一个参数再次分组,weight相同的则分为一个小组,并在newname一栏标出新的小组名,amount一栏写出同在一个新的小组的material的数量,same material则写出与该material可能相同的所有material ID。
如果为参数为空格也视为不等于其他已知值
例如:黄色部分为需编程运行得出的结果,具体例题请见附件
material ID weight group same material newname amount
1 0 1 3 group A1 2
2 1 1 group A2 1
3 0 1 1 group A1 2
4 1 group A3 1
5 0 2 group B1 1
拜托各位大神帮帮忙{:091:}
看看合意否? - Sub grf()
- Set d = CreateObject("scripting.dictionary") '数量
- Set d1 = CreateObject("scripting.dictionary") '相同材料
- Set d2 = CreateObject("scripting.dictionary") '新组别的字母
- Set d3 = CreateObject("scripting.dictionary") '新组别的数字
- arr = [a1].CurrentRegion
- zb = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- ReDim brr(2 To UBound(arr), 1 To 4)
- For i = 2 To UBound(arr)
- If Not d2.exists(arr(i, 6)) Then '对组别分组,取得新组别的字母
- n = n + 1
- d2(arr(i, 6)) = Mid(zb, n, 1) '字母
- m = 0
- End If
- x = arr(i, 6) & "," & arr(i, 2) '以组别+重量为key
- If Not d3.exists(x) Then '相同组中对重量分组,取得新组别的数字
- m = m + 1
- d3(x) = m
- End If
- brr(i, 3) = d2(arr(i, 6)) & d3(x) '新组别:字母+数字
- d(x) = d(x) + 1 '组别+重量的数量
- d1(x) = d1(x) & "," & arr(i, 1) '组别+重量的材料编号串
- Next
- For i = 2 To UBound(arr)
- x = arr(i, 6) & "," & arr(i, 2) '以组别+重量为key
- brr(i, 4) = d(x) '数量
- s = Replace(d1(x) & ",", "," & arr(i, 1) & ",", ",") '材料编号串中去掉本材料
- If Len(s) = 1 Then s = "" Else s = Mid(s, 2, Len(s) - 2) '去掉两头的逗号
- brr(i, 1) = s
- Next
- [H2].Resize(UBound(arr) - 1, 4) = brr
- End Sub
复制代码
|
|