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 函数。

以上是从帮助文件里复制出来的,以前没有好好看到这些,以为没什么用处,但现在看来里面真是遍地黄金甲啊!!

效果截图如下:

image

示例解释如下:把属性值(A列)中大于等于200000的(这是条件)对应单元格(B列)(这是实际进行求和的区域)进行求和。

这个函数有什么用处呢?尤其是在学生成绩处理过程中

想来想去,也只能是指把它归为可以进行条件求各而已。

image

二、在VBA中如何实现?

其实可以用在以下情况中,比如可以统计、计算每个人的工作量,而且可以直接填到指定单元格内。如果想在VBA中实现的话,那就需要完成以下两步:

①获取每个人的姓名,存入数组中。这里有个问题,可不是在数组定义中指定常量?②根据数组列表中每个人姓名,以此为条件,计算每个人的工作量。这样就不用要求必须提前排好序,即使是乱序也不要紧了。

下面就实现这个功能吧。以统计各任课教师的工作量为例,样表如下:

image

由上表明显可以看出,B列中有重复列存在,处理过的样表如下:

image

源程序如下:

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

菊子曰 今天你菊子曰了么?
posted @ 2010-03-18 12:12  surfacetension  阅读(15973)  评论(2编辑  收藏  举报