我在excel中有一个中等大小的数据集,我希望从中提取B列中值的最大值,但是那些只对应于A列中满足特定条件的单元格的值。
所需的功能类似于SUMIF
或COUNTIF
的功能,但这些功能都不会返回必要的数据。没有MAXIF
功能;我该如何模仿一个?
答案 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