viernes, 11 de febrero de 2022

Introduciendo la instrucción Select Case en VBA para Microsoft Excel

Una forma más simple de escribir un conjunto de instrucciones condicionales en VBA es usando la instrucción Select Case.



El código de hoy es el siguiente:




Option Explicit


Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

    

    dato = Range("B2").Value


    If (Not IsNumeric(dato)) Then

        MsgBox ("Error, has introducido un valor no numérico")

    Else

        dia = CInt(dato)

    

    Select Case dato

        Case 1:

            MsgBox ("lunes")

        Case 2:

            MsgBox ("martes")

        Case 3:

            MsgBox ("miercoles")

        Case 4:

            MsgBox ("jueves")

        Case 5:

            MsgBox ("viernes")

        Case 6:

            MsgBox ("sabado")          

        Case 7:

            MsgBox ("domingo")

    End Select 

    End If

End Sub



La instrucción es mucho más sencilla de escribir que un grupo de condicionales.

En la siguiente imagen vemos la estructura básica.

En la primera línea identificamos la variable a evaluar, y en cada select indicamos las instrucciones que ejecuta si contiene ese valor.




Esta instrucción es mucho más potente, y lo iremos viendo en próximas publicaciones.

jueves, 10 de febrero de 2022

Usando celdas con nombre en VBA para Microsoft Excel

A diferencia de las formulas de Microsoft Excel en las cuales si insertamos una columna las referencias de las celdas se actualizan automáticamente, en Visual Basic no sucede eso.

Si en visual Basic, una vez que ya tenemos el código programado, introducimos en el Excel una columna, el programa no se entera del cambio de dirección de la celda y sigue usando la referencia original, provocando de esta manera que se acceda a celdas incorrectas.

Una posible solución a esto, es usar celdas con nombre ya que al cambiar la ubicación de la celda el nombre acompañada a la celda.

Para ello usaremos el método Range con el nombre de la celda en lugar de la referencia.





Este es el código que usamos en el ejemplo de hoy:



Option Explicit

Sub condicional()
    
    'Declaramos una variable numerica
    Dim dia As Integer
    Dim dato As String
    
    dato = Range("celdaAmarilla").Value

    If (Not IsNumeric(dato)) Then
        MsgBox ("Error, has introducido un valor no numérico")
    Else
        dia = CInt(dato)
    
        If (dia = 1) Then MsgBox ("lunes")
    
        If (dia = 2) Then MsgBox ("martes")
    
        If (dia = 3) Then MsgBox ("miercoles")
    
        If (dia = 4) Then MsgBox ("jueves")
    
        If (dia = 5) Then MsgBox ("viernes")
    
        If (dia = 6) Then MsgBox ("sabado")
    
        If (dia = 7) Then MsgBox ("domingo")
        
        If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")
        
        If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")
        
    End If
    
End Sub



En concreto la instrucción que nos va a permitir no depender de la ubicación de la celda es la que se muestra a continuación resaltada.

dato = Range("celdaAmarilla").Value




Una vez asignado el nombre a una celda o rango, este va a acompañar a la celda aunque se inserten o eliminen filas o columnas.

Originalmente la columna con el número del día estaba en la celda "B2".

En esta posición le asignamos el nombre "celdaAmarilla".


Posteriormente, insertamos una columna, pasando a estar la celda en la ubicación "C2".



Pero como vemos, la celda sigue manteniendo el nombre asignado.



miércoles, 9 de febrero de 2022

Accediendo al valor de una celda mediante el Objeto Cells en VBA para Microsoft Excel

Mediante el objeto Cells es posible acceder a los valores almacenados en las celdas de Microsoft Excel.

Para ello a Cells debemos de pasarle como parámetro, el número de fila y el número de columna en la que se encuentra la celda objetivo.

La ventaja con respecto al uso del método Range, es que podremos utilizar bucles para incrementar el valor de la fila y la columna, permitiendo recorrer un conjunto de celdas de forma sencilla.




Este es el código del ejemplo de hoy.



Option Explicit

Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

        

    dato = Cells(2, 2).Value

    If (Not IsNumeric(dato)) Then

        MsgBox ("Error, has introducido un valor no numérico")

    Else

        dia = CInt(dato)

        If (dia = 1) Then MsgBox ("lunes")

        If (dia = 2) Then MsgBox ("martes")

        If (dia = 3) Then MsgBox ("miercoles")

        If (dia = 4) Then MsgBox ("jueves")

        If (dia = 5) Then MsgBox ("viernes")

        If (dia = 6) Then MsgBox ("sabado")

        If (dia = 7) Then MsgBox ("domingo")

        If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")

        If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")

    End If

End Sub



La única instrucción que hemos modificado es la que se resalta en la siguiente imagen:



La ventaja de usar el objeto Cells en lugar del objeto Range está en que podemos usar dos variables para indicar la fila y la columna de la celda y estás variables pueden ser modificadas mediante bucles ya sean For o while a través del código de la macro.

Esto nos permitirá hacer modificaciones en una gran cantidad de celdas.





viernes, 28 de enero de 2022

Introduciendo el Objeto Range en VBA para Microsoft Excel

Mediante el objeto range es posible acceder a los valores almacenados en las celdas de Microsoft Excel.

Para ello a Range debemos de pasarle como parámetro, entre comillas, la referencia a la celda incluyendo la letra de columna y el número de la fila.

A través de este objeto podremos acceder a todas las propiedades de la Celda, entre ellas, la más importante en nuestro ejemplo es Value.

Con esta función podremos acceder al valor almacenado en una celda y usarlo en nuestro código, tras haberlo almacenado en una variable.


Este es el código que usaremos hoy (resaltada en rojo la modificación)

Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String


    dato = Range("B2").Value


    If (Not IsNumeric(dato)) Then

        MsgBox ("Error, has introducido un valor no numérico")

    Else

        dia = CInt(dato)

        If (dia = 1) Then MsgBox ("lunes")

        If (dia = 2) Then MsgBox ("martes")

        If (dia = 3) Then MsgBox ("miercoles")

        If (dia = 4) Then MsgBox ("jueves")

        If (dia = 5) Then MsgBox ("viernes")

        If (dia = 6) Then MsgBox ("sabado")

        If (dia = 7) Then MsgBox ("domingo")

        If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")

        If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")

    End If

    

End Sub


El código de hoy, recogerá el valor de la celda B2 en lugar de solicitarlo a través de una ventana mediante un InputBox.



Para ello buscamos otra forma de almacenar en la variable dato, el valor deseado.

Para ello usamos el objeto Range de Excel, con el cual accederemos al valor de la celda.

Debemos pasarle como parámetro la referencia de la celda entre comillas.

Y accederemos a la propiedad Value para obtener el valor.

Al ejecutar vemos que no se muestra la ventana, y el resultado depende del valor de la celda indicada.


e

Este es, quizás, el objeto más importante de Microsoft Excel.


miércoles, 26 de enero de 2022

Introduciendo Isnumeric, Not y Cint en VBA para Microsoft Excel

Mejoramos el ejemplo de las fechas, controlando la posibilidad de que se introduzca un texto.




El código que usaremos hoy es el siguiente:



Option Explicit


Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

    dato = InputBox("Introduce el número de dia entre 1 y 7:")

    If (Not IsNumeric(dato)) Then

        MsgBox ("Error, has introducido un valor no numérico")

    ele

        dia = CInt(dato)

        If (dia = 1) Then MsgBox ("lunes")

        If (dia = 2) Then MsgBox ("martes")

        If (dia = 3) Then MsgBox ("miercoles")

        If (dia = 4) Then MsgBox ("jueves")

        If (dia = 5) Then MsgBox ("viernes")

        If (dia = 6) Then MsgBox ("sabado")

        If (dia = 7) Then MsgBox ("domingo")

        If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")

        If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")

    End If

    

End Sub

Usamos la función Isnumeric para saber si se ha introducido un número, y en caso contrario se muestra un mensaje de error.

Es preciso almacenar la respuesta del Inputbox en una variable de tipo String, para evitar la ruptura del programa, y luego si es un número convertirla mediante Cint, y almacenarla en una variable numérica.




En este caso también, en realidad, usamos la función Not, que niega lo que se le pase por parámetro, para saber si el valor introducido no es numérico.

If (Not IsNumeric (dato)) ...


En ocasiones es más sencillo aplicar la lógica negativa para resolver un problema, como es en este caso.


martes, 25 de enero de 2022

Condicional if en VBA para Microsoft Excel - Comparativa para valores mayores o menores que uno dado.

Usamos dos condicionales if, para gestionar los valores mayores y menores que los deseados.

El código de hoy es el siguiente:


Option Explicit


Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    

    If (dia = 1) Then MsgBox ("lunes")

    If (dia = 2) Then MsgBox ("martes")

    If (dia = 3) Then MsgBox ("miercoles")

    If (dia = 4) Then MsgBox ("jueves")

    If (dia = 5) Then MsgBox ("viernes")

    If (dia = 6) Then MsgBox ("sabado")

    If (dia = 7) Then MsgBox ("domingo")

    If (dia < 1) Then MsgBox ("Error, has introducido un error demasiado pequeño")

    If (dia > 7) Then MsgBox ("Error, has introducido un error demasiado grande")

End Sub





En el primero controlamos los valores menores que uno.

En el segundo los valores mayores que siete.






viernes, 21 de enero de 2022

Días de la semana en VBA mediante condicional IF

Usamos siete condicionales if para comprobar como podemos detectar el día de la semana a partir del número de día.

En el ejemplo de hoy usamos varios condicionales para solucionar un problema sencillo.

En futuras publicaciones veremos cómo mejorar este código, pero también como utilizarlo ayudándonos de la validación de celdas en Microsoft Excel.



Este es el código de hoy.


Option Explicit


Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    dia = InputBox("Introduce el número de dia entre 1 y 7:")

    If (dia = 1) Then MsgBox ("lunes")

    If (dia = 2) Then MsgBox ("martes")

    If (dia = 3) Then MsgBox ("miercoles")

    If (dia = 4) Then MsgBox ("jueves")

    If (dia = 5) Then MsgBox ("viernes")

    If (dia = 6) Then MsgBox ("sabado")

    If (dia = 7) Then MsgBox ("domingo")

End Sub


Cómo vemos al incluir solo una instrucción, es posible escr6el condicional if en una sola línea, sin tener que finalizarlo con la instrucción END IF


Probamos el código con el calor 5.


Al ejecutar el código paso a paso, vemos que se evalúan todos los condicionales.

Esto podría ser un problema si el número de condiciones fuese muy grande, pero en este caso es asumible.


Con el valor 5 se cumple la condición, y se ejecuta la instrucción asociada.


Mostrando que el día 5 es Viernes.


Sin embargo, el código no finaliza aquí, y continúa comprobando todas las condiciones.


Es un ejemplo muy sencillo de como usar un condicional en VBA para Microsoft Excel.