vba 数组计算

有个数组(如图): 第一列为标记序号,同一序号为同一产品,第二列为产品代码,第三列为参与计算的数字,如何循环数组,从里面拿出每个序号的第三列数字并且相加,第四列数字相加?
对数组敢兴趣的可以QQ我334132241
我要的是每次计算都从各序列中取一个参与及计算,如图,我第一次从333010中取1个15,38的,从333023中取出一个1,4的,从333022中取出一个0,101的,计算15+1+0和38+4+101,第二次继续取333010的15,38,333023的0,14,333022的100,1,计算15+0+100和38+14+1要加完所有情况,并且每次加完都将值放到新的数组里面。

Sub isum()
Dim arr, Dic3, Dic4
arr = Range("A1:d11").Value 'arr数组元素按实际设定,这里是用excel中的测试数据
Set Dic3 = CreateObject("Scripting.Dictionary")
Set Dic4 = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
'字典的关键字,用的是序号,如果要用产品代码就更换arr(i,1)为arr(i,2)
'甚至可以用arr(i,1) & arr(i,2)作为关键字
Dic3(arr(i, 1)) = Dic3(arr(i, 1)) + arr(i, 3)
Dic4(arr(i, 1)) = Dic4(arr(i, 1)) + arr(i, 4)
Next
MsgBox Join(Dic3.keys, ",") & vbCrLf & Join(Dic3.Items, ",") & vbCrLf & Join(Dic4.keys, ",") & vbCrLf & Join(Dic4.Items, ",")
End Sub追问

我要的是每次计算都从各序列中取一个参与及计算,如图,我第一次从333010中取1个15,38的,从333023中取出一个1,4的,从333022中取出一个0,101的,计算15+1+0和38+4+101,第二次继续取333010的15,38,333023的0,14,333022的100,1,计算15+0+100和38+14+1要加完所有情况,并且每次加完都将值放到新的数组里面。

追答

数组arrb ,arrc 保存的是你要的结果
Sub isum()
Dim arrA, arrB(), arrC(), JYDic
arrA = Range("A1:d15").Value
For i = 1 To UBound(arrA)
Set JYDic = CreateObject("Scripting.Dictionary")
If arrA(i, 1) "" Then
n = n + 1
ReDim Preserve arrB(1 To n)
ReDim Preserve arrC(1 To n)
arrB(n) = arrA(i, 3)
arrC(n) = arrA(i, 4)
End If
For j = i + 1 To UBound(arrA)
If arrA(i, 1) = "" Then Exit For
If arrA(j, 1) "" And arrA(j, 1) arrA(i, 1) Then
If Not JYDic.exists(arrA(j, 1) - arrA(i, 1)) Then
JYDic(arrA(j, 1) - arrA(i, 1)) = 1
arrB(n) = arrB(n) + arrA(j, 3)
arrC(n) = arrC(n) + arrA(j, 4)
arrA(j, 1) = ""
End If
End If
Next
Set JYDic = Nothing
Next
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-14
先排序,然后逐行处理,判断第一列数据是否相等,相应做处理就行了啥追问

有多少产品是未知的,当然,计算时候才知道,我如何定义循环呢?我要取所有的方案啊,不是循环遍历一次只要一个结果啊...

追答

定义一个动态数组就可以了

第2个回答  2012-10-15
我想可以使用“分类汇总”功能,
以序号分类,对第3列、第4列求和,
就能实现。
具体是:
第一步、按第一列排序
第二步、数据----分类汇总,选好分类列、求和列
-------
看你的补充觉得你要做“排列组合”呀,
如果“1、2、3”不多的话,可以用“数据透视表”解决,
否则就要用vba进行循环嵌套解决了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网