ExcelVBA调⽤Excel函数⽰例-sumif()条件求和
⼀、关于sumif()函数的⽤法说明及⽤途。
根据指定条件对若⼲单元格求和。
语法
SUMIF(range,criteria,sum_range)
Range    为⽤于条件判断的单元格区域。
Criteria    为确定哪些单元格将被相加求和的条件,其形式可以为数字、表达式或⽂本。例如,条件可以表⽰为 32、"32"、">32" 或 "apples"。
Sum_range    是需要求和的实际单元格。
说明
只有在区域中相应的单元格符合条件的情况下,sum_range 中的单元格才求和。
如果忽略了 sum_range,则对区域中的单元格求和。
Microsoft Excel 还提供了其他⼀些函数,它们可根据条件来分析数据。例如,如果要计算单元格区域内某个⽂本字符串或数字出现的次数,则可使⽤ COUNTIF 函数。如果要让公式根据某⼀条件返回两个数值中的某⼀值(例如,根据指定销售额返回销售红利),则可使⽤ IF 函数。
以上是从帮助⽂件⾥复制出来的,以前没有好好看到这些,以为没什么⽤处,但现在看来⾥⾯真是遍地黄⾦甲啊!!
效果截图如下:
⽰例解释如下:把属性值(A列)中⼤于等于200000的(这是条件)对应单元格(B列)(这是实际进⾏求和的区域)进⾏求和。
这个函数有什么⽤处呢?尤其是在学⽣成绩处理过程中
想来想去,也只能是指把它归为可以进⾏条件求各⽽已。
⼆、在VBA中如何实现?
其实可以⽤在以下情况中,⽐如可以统计、计算每个⼈的⼯作量,⽽且可以直接填到指定单元格内。如果想在VBA中实现的话,那就需要完成以下两步:
①获取每个⼈的姓名,存⼊数组中。这⾥有个问题,可不是在数组定义中指定常量?②根据数组列表中每个⼈姓名,以此为条件,计算每个⼈的⼯作量。这样就不⽤要求必须提前排好序,即使是乱序也不要紧了。
下⾯就实现这个功能吧。以统计各任课教师的⼯作量为例,样表如下:
由上表明显可以看出,B列中有重复列存在,处理过的样表如下:
源程序如下:
Option Base 1
Sub 统计⼯作量()
'建⽴验证表,删除重复⾏,并获取教师姓名,同时也获得了教师列表。
Application.DisplayAlerts = False
Worksheets("sheet1").Activate
Worksheets("sheet1").Copy before:=Worksheets("sheet1")
ActiveSheet.Name = "验证"
countif函数多条件求和'ActiveSheet.Delete
Dim R As Integer
Dim i As Integer
R = Range("B65536").End(xlUp).Row
For i = R To 1 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(R, 2)), Cells(i, 2)) > 1 Then '充分利⽤Countif函数的功能:统计在指定区域内符合条件的个数,据此:若符合cells(i,2)的单元格个数出现了2个以上,则该⾏⼀定有重复⾏,那么即可把该⾏删掉.
Range(Cells(i, 2), Cells(i, 2)).EntireRow.Delete
End If
Next i
R = Range("B65536").End(xlUp).Row
Dim xm() As String '如果写成Dim xm(R) As String,则会提⽰下标超界,但利⽤ReDim却可以写⼊变量。这个问题终于解决了。
Dim gzl() As Double '建⽴⼯作量数组,存储每位教师的最终⼯作量。
ReDim xm(R)
ReDim gzl(R)
For i = 1 To R
xm(i) = Cells(i + 1, 2).Value
Debug.Print xm(i)
Next i
Worksheets("sheet1").Activate
For i = 1 To R
gzl(i) = Application.WorksheetFunction.SumIf(Range(Cells(2, 2), Cells(79, 2)), xm(i), Range(Cells(2, 3), Cells(79, 3)))
Debug.Print gzl(i)
Next i
Worksheets("验证").Activate
For i = 1 To R
Cells(i + 1, 4).Value = gzl(i)
Next i
Cells(1, 4).Value = "⼯作量合计" End Sub
今天你了么?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。