Necesito realizar una macro que me cree la función si.conjunto()

Se que dicha función esta disponible pero solo con suscripción en Excel 365. Y la necesito utilizar en el trabajo. La única que se me ocurrió es crear la propia función con macros y luego Añadirla como complemento. Les agradecería mucho si me pueden dar una mano para realizarla.

1 respuesta

Respuesta
2

Te anexo la Función SumarSiConjunto3 para sumar hasta 3 criterios de rangos

Function SumarSiConjunto3(rango_suma As Range, rango_criterios1 As Range, criterio1, _
                         Optional rango_criterios2 As Range, Optional criterio2, _
                         Optional rango_criterios3 As Range, Optional criterio3)
    Dim numeros()
    Dim criterios1()
    Dim criterios2()
    Dim criterios3()
    '
    If rango_suma.Count <> rango_criterios1.Count Then
        SumarSiConjunto3 = "#¡VALOR!, las matrices de suma y criterios no son del mismo tamaño"
        Exit Function
    End If
    ReDim numeros(rango_suma.Count - 1)
    ReDim criterios1(rango_criterios1.Count - 1)
    '
    If Not rango_criterios2 Is Nothing Then
        If rango_suma.Count <> rango_criterios2.Count Then
            SumarSiConjunto3 = "#¡VALOR!, las matrices de suma y criterios no son del mismo tamaño"
            Exit Function
        End If
        ReDim criterios2(rango_criterios2.Count - 1)
    End If
    '
    If Not rango_criterios3 Is Nothing Then
        If rango_suma.Count <> rango_criterios3.Count Then
            SumarSiConjunto3 = "#¡VALOR!, las matrices de suma y criterios no son del mismo tamaño"
            Exit Function
        End If
        ReDim criterios3(rango_criterios3.Count - 1)
    End If
    '
    n = 0
    For Each celda In rango_suma
        'valor = celda.Value
        numeros(n) = celda.Value
        n = n + 1
    Next
    n = 0
    For Each celda In rango_criterios1
        criterios1(n) = celda.Value
        n = n + 1
    Next
    If Not rango_criterios2 Is Nothing Then
        n = 0
        For Each celda In rango_criterios2
            criterios2(n) = celda.Value
            n = n + 1
        Next
    End If
    If Not rango_criterios3 Is Nothing Then
        n = 0
        For Each celda In rango_criterios3
            criterios3(n) = celda.Value
            n = n + 1
        Next
    End If
    '
    For i = 0 To rango_suma.Count - 1
        If criterios1(i) = criterio1 Then
            If Not rango_criterios2 Is Nothing Then
                If Not rango_criterios3 Is Nothing Then
                    If criterios2(i) = criterio2 Then
                        If criterios3(i) = criterio3 Then
                            wsuma = wsuma + numeros(i)
                        End If
                    End If
                Else
                    If criterios2(i) = criterio2 Then
                        wsuma = wsuma + numeros(i)
                    End If
                End If
            Else
                wsuma = wsuma + numeros(i)
            End If
        End If
    Next
    SumarSiConjunto3 = wsuma
End Function

Avísame si necesitas más rangos opcionales. E spero te funcione para lo que necesitas.

.

. S aludos. Dante Amor. R ecuerda valorar la respuesta. G racias

.

Te lo agradezco mucho! la verdad no te quiero molestar pero si agregar rangos opcionales no es complicado, me gustaría agregarlos, ya que tengo que anidar 7 funciones SI en mi excel.

Si no, te pido si me explicas como agregarlos y yo mismo lo hago.

De todas formas muchas Gracias!

A disculpa la función que necesito es SI.CONJUNTO() la cual reemplaza el SI()

Prueba con la siguiente, anidé hasta 9 si

Function Sis(condicion1, dato1, _
              Optional condicion2, Optional dato2, _
              Optional condicion3, Optional dato3, _
              Optional condicion4, Optional dato4, _
              Optional condicion5, Optional dato5, _
              Optional condicion6, Optional dato6, _
              Optional condicion7, Optional dato7, _
              Optional condicion8, Optional dato8, _
              Optional condicion9, Optional dato9)
'Si.Conjunto
'Por Dante Amor
    If Not IsError(condicion1) Then If Evaluate(condicion1) Then Sis = dato1: Exit Function
    If Not IsError(condicion2) Then If Evaluate(condicion2) Then Sis = dato2: Exit Function
    If Not IsError(condicion3) Then If Evaluate(condicion3) Then Sis = dato3: Exit Function
    If Not IsError(condicion4) Then If Evaluate(condicion4) Then Sis = dato4: Exit Function
    If Not IsError(condicion5) Then If Evaluate(condicion5) Then Sis = dato5: Exit Function
    If Not IsError(condicion6) Then If Evaluate(condicion6) Then Sis = dato6: Exit Function
    If Not IsError(condicion7) Then If Evaluate(condicion7) Then Sis = dato7: Exit Function
    If Not IsError(condicion8) Then If Evaluate(condicion8) Then Sis = dato8: Exit Function
    If Not IsError(condicion9) Then If Evaluate(condicion9) Then Sis = dato9: Exit Function
    Sis = "Ninguna condición se cumple"
End Function

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas