Excel VBA调用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 = "验证"
'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