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.

lunes, 27 de diciembre de 2021

Condicional IF ELSE anidado en VBA para Microsoft Excel

Dentro de un bloque de código se puede escribir cualquier código, incluso un nuevo bloque de código.

Esto se denomina anidamiento, y permite, por ejemplo, incluir un condicional dentro de otro condicional.

La mayoría de los lenguajes de programación imponen un máximo de niveles de anidamiento.

En el ejemplo de hoy veremos un condicional con anidamiento en una macro de Microsoft Excel programada en VBA.


Este es el código del ejemplo.




Option Explicit


Sub condicionalAnidado()

    Dim edad As Integer

    edad = InputBox("Introduce tu edad:")

    

    If edad < 18 Then

        If edad < 17 Then

            If edad < 16 Then

                If edad < 15 Then

                    If edad < 14 Then

                        If edad < 13 Then

                            If edad < 12 Then

                                If edad < 11 Then

                                    If edad < 10 Then

                                        MsgBox ("tienes menos de 10 años")

                                    End If

                                    MsgBox ("tienes menos de  11 años")

                                End If

                                MsgBox ("tienes menos de  12 años")

                            End If

                            MsgBox ("tienes menos de  13 años")

                        End If

                        MsgBox ("tienes menos de  14 años")

                    End If

                    MsgBox ("tienes menos de  15 años")

                End If

                MsgBox ("tienes menos de  16 años")

            End If

            MsgBox ("tienes menos de  17 años")

        End If

        MsgBox ("tienes menos de 18 años")


    Else

        MsgBox ("Eres mayor de edad")

    End If

    End Sub


Dentro de la primera estructura condicional if se encuentra todo el código que hemos resaltado en azul.
Cómo se puede contar son otros 8 condicionales if.

Dentro del segundo se incluirían los resultados a continuación.


Siendo el condicional más interno y resaltado en la siguiente imagen.

En este código si el dato introducido es menor que 10 se valoran todos los condicionales hasta llegar a este.


Si se cumple este condicional se mostrara el mensaje indicando que se es menor de 10 años.

Y también todos los mensajes indicando que 6 menor de 11 12 13 14 15 16 17 y 18.



domingo, 26 de diciembre de 2021

Condicional if else en VBA para Microsoft Excel - Ejemplo Mayoría de edad

Cuando creamos una estructura condicional de tipo IF ELSE en VBA para Microsoft Excel, es muy importante evaluar correctamente el valor del límite, para estar seguros de que se ejecuta el código correcto para este caso.

Para este ejemplo de la mayoría de edad se trata de evaluar correctamente el valor de 18 años.


Este es el código que usaremos:




 Option Explicit


Sub condicional()

    

    'Declaramos una variable numerica

    Dim edad As Integer

        

    edad = InputBox("Introduce tu edad:")

    

    If edad > 18 Then

        MsgBox ("Eres mayor de edad")

    Else

        MsgBox ("Eres menor de edad")

    End If


End Sub




Aunque aparentemente el código es correcto cuando lo tengo esperemos que tiene un problema en la condición.

Es muy importante siempre evaluar el el valor límite de la condición.

En este caso se trata de evaluar la edad la cual se pasa de ser menor de edad al mayor.

Este valor es el 18 r introduciendo este valor deberíamos obtener como respuesta que es mayor de edad.

Cómo vemos no es así la condición que hemos usado es que fuera mayor que 18, pero realmente con 18 ya debería ser mayor de edad.

Por lo tanto esta condición es incorrecta.

Como solución podemos comparar edad con maior que 17.

Otra opción es evaluar si el valor es mayor o igual al límite.

En este caso es el que elegiremos.


En este caso el resultado es correcto.


Siempre es muy importante evaluar el correcto funcionamiento del valor límite, para asegurarse de que el código funciona correctamente.

sábado, 25 de diciembre de 2021

Calendario Vital

Cada vez más entendemos que el tiempo es lo único que no se puede comprar.

Hoy día de Navidad os traigo algo para reflexionar.

Se trata de un calendario vital que he creado en Google Drive y os comparto.

https://docs.google.com/spreadsheets/d/1OVmBHiNf9mzn5wfE-A2C6KoNDlFElxYqNPC7VoxJ_XE/edit?usp=sharing

No es más que un conjunto de celdas que representan las semanas de nuestra vida.

En él he resaltado, la semana actual (resaltada en azul), la de nuestra jubilación en España (con 67 años resaltada en rosa) y la de nuestra muerte estimada (resaltada en rojo).

Si alguna vez os habéis preguntado que haríais si supieseis cuanto tiempo os queda de vida, solo tenéis que elegir vuestro país, vuestro sexo y poner la fecha de nacimiento (Ninguno de estos datos se almacena).



Como veis en mi caso aún me quedan algunas semanas de trabajo por delante.


viernes, 24 de diciembre de 2021

Condicional con bloque Else en VBA para Microsoft Excel

Aunque es posible evaluar si una condición es verdadera con un bucle IF y con otro bucle IF evaluar si es falsa, este es un proceso poco práctico.

En todos los lenguajes de programación existe la estructura IF ELSE.

Se trata de un condicional IF, que en su parte ELSE incluye las instrucciones que se ejecutarán si no se cumple la condición. De esta forma es posible definir el funcionamiento del programa tanto si se cumple como si no se cumple la condición.


El código del ejemplo de hoy es este:

Option Explicit

Sub condicional()

    'Declaramos una variable numerica

    Dim numeroSecreto As Integer

    Dim respuesta As Integer

        

    'asignamos un valor por error a una variable con otro nombre

    numeroSecreto = 4

    

    respuesta = InputBox("dime un numero")

 

    If numeroSecreto = respuesta Then

        'mostramos mensaje

        MsgBox ("Has acertado")

    Else

        'mostramos mensaje

        MsgBox ("No has acertado")

    End If

End Sub


Partimos del código del ejemplo que mostrábamos el último día.

En este ejemplo se va el vamos si hay número era igual a otro almacenar una variable y eso quedamos en instrucción.

Y a continuación en otro condicional evaluamos la condición contraria esto es si el valor almacenado era distinto al indicado.


El usar dos condiciones por separado, una y la inversa puede provocar que al crear la condición inversa nos equivoquemos y dejemos alguna posibilidad sin tener en cuenta.

Editar este inconveniente todos los lenguajes de programación e incluyendo un condicional if else if.

En la parte b en valoremos aquellas instrucciones que deben ejecutarse si se cumple la condición y en la parte él se las que deben ejecutarse si no se cumple la condición.

Para transformar el código anterior, lo único que tenemos que hacer es eliminar el ENF IF del primer bucle y la condición del segundo y sustituirlo por la instrucción ELSE.

El código queda como se muestra a continuación.

Debemos tener en cuenta que dentro de cualquier bloque de instrucciones es posible incluir cualquier instrucción.

Esto hace posible crear bucles anidados.