[求助] excel VBA多条件求和代码优化

Sub佳兴汇总()Range("B5")=Application.WorksheetFunction.SumIfs(Sheet2.Range("C:C"),Sheet2.... Sub 佳兴汇总()
Range("B5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))Range("C5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))Range("E5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))
End Sub

因为物料编码很多,一个编码一条代码,会很长,请问一下,要如何解决这个问题
展开
 我来答
TAT萝卜
推荐于2018-05-18 · TA获得超过4972个赞
知道大有可为答主
回答量:3084
采纳率:66%
帮助的人:1116万
展开全部

这种情况用字典法最合适

Sub test()
arr = Sheet2.Range("A1:E" & Sheet2.[a65536].End(xlUp).Row) 'Sheet2数据存入数组
Set d1 = CreateObject("Scripting.Dictionary") '外发字典
Set d2 = CreateObject("Scripting.Dictionary") '返回字典
Set d3 = CreateObject("Scripting.Dictionary") '生产字典
For i = 1 To UBound(arr)
d1(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 3)
d2(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 4)
d3(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 5)
Next
For i = 2 To [iv3].End(xlToLeft) Step 4
For j = 5 To [a65536].End(xlUp).Row
Cells(j, i) = d1(Cells(j, 1).Value & Cells(3, i).Value)
Cells(j, i + 1) = d2(Cells(j, 1).Value & Cells(3, i).Value)
Cells(j, i + 3) = d3(Cells(j, 1).Value & Cells(3, i).Value)
Next
Next
End Sub
chenjiawei5000
2014-01-19 · TA获得超过2779个赞
知道大有可为答主
回答量:2585
采纳率:30%
帮助的人:2062万
展开全部

要使用变量,用with,就可以化简很多。而且速度快的多,因为不需要每次都去找对象。 

Sub 佳兴汇总()
Dim MyRng(1 To 5) As Range, B3 As String, i As Long
B3 = Range("B3").Value
With Sheet2
    For i = 1 To 5
        Set MyRng(i) = .Columns(i)
    Next i
End With
With Application.WorksheetFunction
For i = 5 To 12 '5到12行
Range("B" & i) = .SumIfs(MyRng(3), MyRng(1), Range("A" & i), MyRng(2), B3)
Range("C" & i) = .SumIfs(MyRng(4), MyRng(1), Range("A" & i), MyRng(2), B3)
Range("E" & i) = .SumIfs(MyRng(5), MyRng(1), Range("A" & i), MyRng(2), B3)
Next i
End With
Erase MyRng
End Sub
追问
这个看不明白,不过还是谢谢你.
追答
这是基础。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
平阳虎01
高粉答主

2014-01-19 · 每个回答都超有意思的
知道大有可为答主
回答量:3.7万
采纳率:75%
帮助的人:4935万
展开全部
没有代码,是没有办法“优化”代码的。
更多追问追答
追问
刚刚加上去了,之前添加不了,说内容太长了。
追答
试试下面的代码行不?
Sub 佳兴汇总()
Dim i%
For i = 5 To 12
Range("B" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Range("C" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Range("E" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Next i
End Sub
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
段干素枝青未
2019-03-21 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:24%
帮助的人:1125万
展开全部
求助高手:怎样用VBA实现多条件计数:比如使工作表2中某一单元格等于工作表1中某几列中的某些条件个数,如中学、男、大于26小于30岁等
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式