EXCEL数组求和怎么做?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL数组求和怎么做?相关的知识,希望对你有一定的参考价值。
方法:
1、使用SUMIF()公式的单条件求和,这个条件的格式非常简单,下面直接以一张表格为例。想在H3单元格统计一下鼎盛书店的书籍销量,,点击H3单元格,然后在单元格内输入“=SUMIF(C3:C10,“鼎盛书店”,G3:G10)”,这里需要注意的是,在编辑函数公式的时候,一些符号要在英文的输入法下进行输入,否则公式会报错。
2、使用SUMIFS函数的多条件求和,同样以上面的表格部分为例,再多加入一个条件,就是B列的日期,在H3单元格统计鼎盛书店2011年1月5日以前的书籍销量,在单元格输入“=SUMIFS(G3:G10,C3:C10,"鼎盛书店",B3:B10,"<="&DATE(2011,1,4))”。
3、多表多条件求和SUMPRODUCT()函数,SUMPRODUCT在给定的几组数组中,将数组间对应的元素相乘并返回乘积之和。这个函数可以用于多个表格多条件的求和。下面求另一个表格中计算机书籍销售总额。两个条件分别在C列和D列,在E3单元格中输入“=SUMPRODUCT((C3:C10)*(D3:D10))”。
4、SUM()函数+IF()函数嵌套的方式双条件求和,同样以求取鼎盛书店的书籍销量总数为例,在H3单元格中输入“=SUM(IF(C3:C10="鼎盛书店",G3:G10))”按回车就可以出结果了。
参考技术A 假设你原来的表在abc列生成表在defgh列
“城市”这个词在第二行
在e3单元格输入
=SUMPRODUCT(($A$2:$A$1000=$D3)*($B$2:$B$1000=E$2),$C$2:$C$1000)
下拉,右拉
亲测,百分之百可以
留邮箱,发给你样表
[求助] excel VBA多条件求和代码优化
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
因为物料编码很多,一个编码一条代码,会很长,请问一下,要如何解决这个问题
这种情况用字典法最合适
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 参考技术A
要使用变量,用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追问
这个看不明白,不过还是谢谢你.
追答这是基础。
参考技术B 没有代码,是没有办法“优化”代码的。追问刚刚加上去了,之前添加不了,说内容太长了。
追答试试下面的代码行不?
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
谢谢,这样可以的。非常感谢。再请教一个问题,D5=B5-C5,D6=B6-C6……一直递加下去。VBA怎么写,写成上面的那个样子
追答以上代码还可简写为:
Sub 佳兴汇总()Dim i%
With Application.WorksheetFunction
For i = 5 To 12 Range("B" & i) = .SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Range("C" & i) = .SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Range("E" & i) = .SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Next i
End WithEnd Sub
D5=B5-C5,D6=B6-C6……一直递加下去:
Sub 对应相减()
Dim i%
For i = 5 to [B65536].End(3).Row
Cells(i , 4) = Cells(i , 2) - Cells(i , 3)
Next i
End Sub
以上是关于EXCEL数组求和怎么做?的主要内容,如果未能解决你的问题,请参考以下文章