6 febrero, 2025

PROGRAMAR LA FUNCIÓN SI.CONJUNTO EN VBA

Hola a todos!.

Esta semana recibí una consulta en la que me pedían que mostrase la sintaxis de la función SI.CONJUNTO en VBA. En realidad, creo que se refería a cómo se podía programar la función.

Esta función está disponible en Office 365, Excel 2019 y Excel 2016 y básicamente actúa como varias funciones SI anidadas. Os podéis informar sobre sus características en el link que os he dejado en el párrafo anterior.

Pero en VBA no la tenemos como función de hoja o como aplicación, es decir, lo que tenemos es lo que nos muestra el editor de VBA cuando grabamos una macro, algo así:

ActiveCell.FormulaR1C1 = "=IFS(RC[-2]=0,""OK"")"

Es decir con notación R1C1. Por lo que la programación de esta forma resulta bastante tediosa y es necesario realizar los ajuste necesarios para hacerla más dinámica. Para ello, vamos a utilizar variables que nos van a ayudar con nuestro proyecto.

Veamos un ejemplo muy simple:

PROGRAMAR LA FUNCION SI.CONJUNTO EN VBA

Supongamos estas reglas y que las queremos programar. Si en una celda ponemos un número superior a 89, indicaremos una A, si es superior a 79 indicaremos una B, y así sucesivamente.

Este sería el ejemplo:

PROGRAMAR LA FUNCION SI.CONJUNTO EN VBA_1

Para hacerlo operativo lo he programado en un evento de hoja «Worksheet_SelectionChange»:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Declaramos variables
Dim Cond As Variant, SICONJUNTO As String
With Sheets(1)
'Si dejamos la celda vacía, le damos valor 0
Cond = IIf(.Cells(2, 4) = "", 0, .Cells(2, 4))
'Programamos la función según reglas y utilizamos variable anterior
SICONJUNTO = "=IFS(" & Cond & " >89 , ""A"", " & Cond & " > 79, ""B"", " & Cond & " > 69 , ""C"" , " & Cond & " > 59 , ""D"" ," & Cond & " <= 59 , ""F"")"
'Igualamos el valor de la celda "D5" al resultado de la función
.Cells(5, 4) = SICONJUNTO
End With
End Sub

Como podéis observar, he programado la función SI.CONJUNTO utilizando cadenas de texto e incluyendo la variable Cond para pasar el criterio seleccionado.

El resultado que vamos a buscar es escribir la fórmula en la celda utilizando VBA, una técnica muy útil cuando no podemos invocar la función desde la propiedad Application.WorksheetFunction:

PROGRAMAR LA FUNCION SI.CONJUNTO EN VBA_2

Y eso es todo. Me gustaría indicar que hasta cierto punto la función Si.Conjunto en VBA es fácilmente replicable con IF y Else o ElseIf o con un Select Case. No obstante, aquí dejo la forma de hacerlo en VBA.

El archivo os lo paso con extensión .xls (dado que wordpress no admite .xlsm. Por otra parte, si usáis versiones que no admiten la función SI.CONJUNTO la macro no funcionará correctamente.

Descarga el archivo de ejemplo pulsando en: PROGRAMAR LA FUNCIÓN SI.CONJUNTO EN VBA

 

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies