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
Publicar un comentario