Funcíon de min y max si (personalizada)
Lo que deseo es crear una fórmula para buscar el valor minimi (min) o máximo (max) evaluando unos criterios y si se cumplen con ellos
Para ello construí la siguiente fórmula que me funciona perfectamente con el max, pero con el min no. Espero me pueda indicar cual es la falla que tengo.
'=====================
Function MaxSI(Criterios As Range, Condicion As String, _
Datos As Range) As Double
On Error GoTo Controlar
Dim NumeroFil As Integer
NumeroFil = Application.WorksheetFunction.CountIf(Criterios, Condicion)
Dim Criterio As Range
ReDim MatrizDatos(NumeroFil) As Double
Dim OtroRango As Range
Dim Siguiente As Integer
Dim Coincide As Boolean
Dim Valor As Double
For Each Criterio In Criterios
Siguiente = Siguiente + 1
Coincide = LCase(Criterios(Siguiente)) = LCase(Condicion)
If Coincide Then
otro = otro + 1
MatrizDatos(otro) = Datos(Siguiente) 'Not IsEmpty(Datos.Cells(Siguiente))
Debug.Print MatrizDatos(otro)
End If
Next
Valor = (Application.WorksheetFunction.Min(MatrizDatos))
MaxSI = Valor
Salida:
Exit Function
Controlar:
MsgBox Err.Description, vbCritical, TituloPer
End Function
'====================
Para ello construí la siguiente fórmula que me funciona perfectamente con el max, pero con el min no. Espero me pueda indicar cual es la falla que tengo.
'=====================
Function MaxSI(Criterios As Range, Condicion As String, _
Datos As Range) As Double
On Error GoTo Controlar
Dim NumeroFil As Integer
NumeroFil = Application.WorksheetFunction.CountIf(Criterios, Condicion)
Dim Criterio As Range
ReDim MatrizDatos(NumeroFil) As Double
Dim OtroRango As Range
Dim Siguiente As Integer
Dim Coincide As Boolean
Dim Valor As Double
For Each Criterio In Criterios
Siguiente = Siguiente + 1
Coincide = LCase(Criterios(Siguiente)) = LCase(Condicion)
If Coincide Then
otro = otro + 1
MatrizDatos(otro) = Datos(Siguiente) 'Not IsEmpty(Datos.Cells(Siguiente))
Debug.Print MatrizDatos(otro)
End If
Next
Valor = (Application.WorksheetFunction.Min(MatrizDatos))
MaxSI = Valor
Salida:
Exit Function
Controlar:
MsgBox Err.Description, vbCritical, TituloPer
End Function
'====================
1 Respuesta
Respuesta de Raul Hernandez
1