1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Option Explicit
Public Function MAXIF(ByVal rgeCriteria As Range, _ ByVal sCriteria As String, _ ByVal rgeMaxRange As Range) As Single Dim iconditioncolno As Integer Dim inumberscolno As Integer Dim lrowno As Long Dim sngmax As Single Dim vcellvalue As Variant
Call Application.Volatile(True) iconditioncolno = rgeCriteria.Column inumberscolno = rgeMaxRange.Column For lrowno = 1 To rgeCriteria.Rows.Count vcellvalue = rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, inumberscolno).Value If rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, iconditioncolno).Value = sCriteria And _ IsNumeric(vcellvalue) = True Then If sngmax = 0 Then sngmax = vcellvalue If vcellvalue > sngmax Then sngmax = vcellvalue End If If sngmax <> 0 And IsEmpty(vcellvalue) = True Then Exit For Next lrowno For lrowno = 1 To rgeCriteria.Rows.Count vcellvalue = rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, inumberscolno).Value If rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, iconditioncolno).Value = sCriteria And _ IsNumeric(vcellvalue) = True Then If rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, inumberscolno).Value > sngmax Then sngmax = rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, inumberscolno).Value End If End If If sngmax <> 0 And IsEmpty(vcellvalue) = True Then Exit For Next lrowno MAXIF = sngmax End Function
|