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:
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:
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:
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.
¡¡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