UDF: IB·CAMBIAR que permite realizar cambios condicionales en Excel

La función IB·CAMBIAR es una función personalizada de VBA que se ha creado con el propósito de sustituir una expresión por un valor específico, teniendo en cuenta condiciones proporcionadas. A diferencia de la función CAMBIAR, que solo se aplica a valores exactamente iguales, esta función complementa perfectamente dicha limitación, ofreciendo una alternativa eficiente a la anidación de funciones SI, a la función SI.CONJUNTO, o  a las funciones BUSCARV, BUSCARH y BUSCARX, si lo que se busca es no utilizar tablas auxiliares. 

A continuación se presenta una descripción de los parámetros y la funcionalidad de esta función:

Sintaxis: 

La sintaxis de la función "IB·CAMBIAR" es la siguiente:

=IB·CAMBIAR(Expresión, Valor1, Resultado1, Valor2, Resultado2, ..., [ValorN], [ResultadoN])

Parámetros:

Expresión: La expresión que se evaluará para determinar si se cumple una condición.

Valor: Un array de valores y condiciones. Los valores impares (1, 3, 5, ...) del array representan las condiciones, mientras que los valores pares (2, 4, 6, ...) representan los valores correspondientes que se devolverán si se cumple una condición.

Funcionalidad:

La función IB·CAMBIAR se utiliza para realizar reemplazos condicionales en VBA, donde se evalúa una expresión y se devuelve un valor específico si se cumple una de las condiciones proporcionadas en el array Valor.

La función IB·CAMBIAR recibe la Expresión y el array Valor como parámetros. Utiliza un bucle For para iterar a través de los elementos del array Valor, comenzando desde el primer elemento hasta el penúltimo elemento.

En cada iteración, se verifica si la Expresión cumple con la condición correspondiente. Esto se hace llamando a la función privada OdC (Operador de Comparación), esta función auxiliar  realiza las comparaciones, analiza las condiciones especificadas para determinar si la expresión cumple con dichas condiciones.

Si la Expresión cumple con la condición, se asigna el valor correspondiente (el siguiente valor después de la condición en el array Valor). 

Si no se cumple ninguna de las condiciones anteriores, se verifica si la cantidad de elementos en el array Valor es par o impar.

🔹 Si es par, se asigna "Ninguna coincidencia"
🔹 Si es impar, se asigna el último valor que se devolverá de no existir ninguna coincidencia.

Finalmente, la función IB·CAMBIAR devuelve el valor asignado durante el proceso.

Código: 

Function IB·CAMBIAR(Expresión As Variant, ParamArray Valor() As Variant) As Variant
    Dim i As Integer
    For i = 0 To UBound(Valor) - 1 Step 2
        If OdC(Expresión, Valor(i)) Then
            IB·CAMBIAR = Valor(i + 1)
            Exit Function
        End If
    Next i
    If UBound(Valor) Mod 2 = 0 Then
        IB·CAMBIAR = Valor(UBound(Valor))
    Else
        IB·CAMBIAR = "Ninguna coincidencia"
    End If
End Function

Private Function OdC(Valor As Variant, c As Variant) As Boolean
    Dim o As String, cv As Variant
    o = Left(c, 1)
    cv = Mid(c, 2)
    If IsNumeric(cv) Then
        Select Case o
            Case "<"
                OdC = Valor < CDbl(cv)
            Case ">"
                OdC = Valor > CDbl(cv)
            Case Else
                OdC = False
        End Select
    Else
        Select Case o
            Case "="
                OdC = Valor = cv
            Case Else
                OdC = False
        End Select
    End If
    If Left(c, 2) = "<=" Then
        OdC = Valor <= CDbl(Right(c, Len(c) - 2))
    ElseIf Left(c, 2) = ">=" Then
        OdC = Valor >= CDbl(Right(c, Len(c) - 2))
    End If
End Function


Comentarios