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 MINIF(ByVal rgeCriteria As Range, _ ByVal sCriteria As String, _ ByVal rgeMinRange As Range) As Single Dim iconditioncolno As Integer Dim inumberscolno As Integer Dim lrowno As Long Dim sngmin As Single Dim vcellvalue As Variant Call Application.Volatile(True)
iconditioncolno = rgeCriteria.Column inumberscolno = rgeMinRange.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 sngmin = 0 Then sngmin = vcellvalue If vcellvalue < sngmin Then sngmin = vcellvalue End If If sngmin <> 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 < sngmin Then sngmin = rgeCriteria.Parent.Cells(rgeCriteria.Row + lrowno - 1, inumberscolno).Value End If End If If sngmin <> 0 And IsEmpty(vcellvalue) = True Then Exit For Next lrowno MINIF = sngmin End Function
|