Excel MAX IF功能还是仿真?

时间:2010-03-23 03:31:55

标签: excel excel-formula

我在中有一个中等大小的数据集,我希望从中提取B列中值的最大值,但是那些只对应于A列中满足特定条件的单元格的值。

所需的功能类似于SUMIFCOUNTIF的功能,但这些功能都不会返回必要的数据。没有MAXIF功能;我该如何模仿一个?

3 个答案:

答案 0 :(得分:5)

您可以使用数组公式。在您希望最大计算的单元格中输入:= Max(If([test],[if true],[if false]),其中替换方括号中的值测试,如果为真则返回什么,如果为假则返回什么。例如:

=MAX(IF(MOD(A2:A25,2)=0,A2:A25,0)

在此公式中,如果值除以2没有余数,则返回A列中的值。请注意,我在比较中使用了一系列单元格,如果是false则使用值而不是单个单元格。

现在,在编辑单元格的同时,按Ctrl + Shift + Enter(同时按住Ctrl键和Shift键然后按回车键。)

这将创建一个数组公式,该公式作用于范围中的每个值。

编辑 BTW,你想以编程方式还是手动方式执行此操作?如果以编程方式,那么您使用的是什么环境? VBA? C#?

编辑如果通过VBA,您需要使用FormulaArray属性和R1C1引用,如下所示:

Range("A1").Select
Selection.FormulaArray = "=MAX(IF(MOD(R[1]C:R[24]C,2)=0,R[1]C:R[24]C,0))"

答案 1 :(得分:3)

当您想要使用动态或命名范围时,数组公式不能很好地工作(例如,“当前行上方与当前行具有相同交易对象的行的最大应付金额)。如果您不这样做想要使用数组公式,你总是可以求助于VBA做这样的事情:

Function maxIfs(maxRange As Range, criteriaRange As Range, criterion As Variant) As Variant

  maxIfs = Empty
  For i = 1 To maxRange.Cells.Count
    If criteriaRange.Cells(i).Value = criterion Then
        If maxIfs = Empty Then
            maxIfs = maxRange.Cells(i).Value
        Else
            maxIfs = Application.WorksheetFunction.Max(maxIfs, maxRange.Cells(i).Value)
        End If
    End If
  Next
End Function

答案 2 :(得分:1)

目前提供的代码限制是您只能使用2个条件。我决定进一步使用此代码不限制MaxIfs函数的条件数。请在此处查看代码:

        Function MaxIfs(MaxRange As Range, ParamArray Criteria() As Variant) As Variant
        Dim n As Long
        Dim i As Long
        Dim c As Long
        Dim f As Boolean
        Dim w() As Long
        Dim k As Long
        Dim z As Variant

        'Error if less than 1 criteria
        On Error GoTo ErrHandler
        n = UBound(Criteria)
        If n < 1 Then
            'too few criteria
            GoTo ErrHandler
        End If
            'Define k
            k = 0            

        'Loop through cells of max range
        For i = 1 To MaxRange.Count

        'Start by assuming there is a match
        f = True

            'Loop through conditions
            For c = 0 To n - 1 Step 2

                'Does cell in criteria range match condition?
                If Criteria(c).Cells(i).Value <> Criteria(c + 1) Then
                    f = False
                End If

            Next c

            'Define z
            z = MaxRange

            'Were all criteria satisfied?
            If f Then
                k = k + 1
                ReDim Preserve w(k)
                w(k) = z(i, 1)
            End If

        Next i

        MaxIfs = Application.Max(w)

        Exit Function
        ErrHandler:
        MaxIfs = CVErr(xlErrValue)

    End Function

此代码允许1到多个条件。

此代码是参考Hans V在Eileen's Lounge发布的多个代码而开发的。

快乐编码

Diedrich