martes, 22 de marzo de 2022

Modificar distintas celdas mediante el uso del bucle while en VBA para Microsoft Excel

Podemos movernos por las celdas de Microsoft Excel modificando los valores de la función Cells mediante un bucle while en VBA.

En lugar de utilizar la variable contador del bucle while para modificar el valor de la celda, la usaremos para indicar celdas distintas.



A continuación muestro el código usado. 



El resultado de la ejecución de los bucles es el que se muestra a continuación.



Este es el código listo para copiar.


Sub bucleWhile()


Dim contador

contador = 1


While (contador < 10)

    Cells(contador, contador).Value = contador

'    Range("c4").Value = contador

    contador = contador + 1

Wend


End Sub






lunes, 21 de marzo de 2022

Introducción al uso del bucle while en VBA para Microsoft Excel

Hoy introducimos el bucle más sencillo en lenguaje VBA.

El bucle while permite repetir instrucciones mientras se cumpla una condición.

Esto hace que sea muy sencillo repetir una instrucción un número de veces usando como condición que el valor de una variable sea menor que uno dado.

Eso sí, recordad modificar el valor de la variable, o crearéis vuestro primer bucle infinito.






El código usado es el siguiente


El resultado es tan rápido que parece que solo se ha ejecutado la última instrucción. Sin embargo se ha ejecutado 99 veces.


Es importante darse cuenta de que cuando la variable alcanza el valor de 100 la condición ya no se cumple y el bucle finaliza.




Aquí lo podéis copiar


Sub bucleWhile()


Dim contador

contador = 1


while (contador <100)

    Cells(1, 1).Value = contador

    contador = contador + 1

Wend


End Sub




Es posible modificar el código añadiendo un retardo para ver como se ejecuta el código.

En la imagen una  pausa de 5 segundos en cada  iteración del bucle.



viernes, 18 de marzo de 2022

Estableciendo una pausa entre intrucciones mediante VBA para Microsoft Excel.

Estableciendo una pausa entre instrucciones mediante VBA para Microsoft Excel. 

El tercer elemento que necesitaremos para entender los bucles es la posibilidad de reproducirlo a cámara lenta.

Para ello lo que haremos es establecer una pausa entre las instrucciones.



El código usado en el ejemplo es el siguiente:



Primero mediante la instrucción Now se puede obtener la fecha y la hora actual.


Este es el aspecto que tiene.


TimeValue nos permite transformar una cadena de texto en un valor tipo fecha hora.


Mediante un MsgBox vemos su aspecto.



Si unimos estas dos instrucciones, podemos conseguir que mediante un condicional, no se ejecute la siguiente instrucción hasta que pase una cantidad de tiempo que sumemos al momento actual.

Suele sumarse un número de segundos a Now.

En el ejemplo sumamos 5 segundos  TimeValue("00:00:05")



Se muestra un primer mensaje, y tras pulsar el botón Aceptar ....

Tras cinco angustiosos segundos de espera, se ejecuta la siguiente instrucción, mostrando el segundo mensaje.


Usaremos esta técnica para poder ver como se van ejecutando  cada segundo las instrucciones en los bucles, ya que de forma contraria podría parecer que se ejecutan en un único paso.


Aquí tenéis el código VBA completo por si lo queréis copiar:


Option Explicit

Sub establecerPausa()

'con Now obtenemos la fecha y hora actual

MsgBox (Now)


'TimeValue permite transformar una cadena de texto en un valor Time de VBA

'TimeValue ("00:00:01") representa 1 segundo

MsgBox (TimeValue("00:00:01"))



'Application.Wait estable una pausa en el código hasta la fecha y hora indicadas

'Application.Wait(TimeValue("31/12/2999 00:00:00"))

'solo se ejecuratá el día de fin de año del año 2999


'Por lo tanto, si al momento actual Now le sumamos un segundo,

'estaremos creando una pausa

'en este caso vamos a establecer una pausa de 5 segundos


MsgBox ("Mensaje Uno.")


If Application.Wait(Now + TimeValue("00:00:05")) Then

    MsgBox ("Mensaje Dos.")

End If

    

End Sub

martes, 15 de marzo de 2022

Modificando color de fondo en celdas mediante VBA para Microsoft Excel

Hoy os muestro como cambiar el color de fondo (background) de una celda en una celda de Microsoft Excel mediante VBA.



Estas instrucciones serán muy útiles a la hora de usarlas en bucles, ya que harán muy visual la ejecución del bucle.

Para ello usaremos la instrucción Cells(n, m).Interior.Color, a la que asignaremos el color deseado.

Para definir el color usaremos el método RGB(rrr, ggg, bbb), que a partir de los valores de los tres colores primarios da como resultado el color elegido.

Podéis encontrar información sobre los componentes RGB en la wikipedia, por ejemplo en la siguiente url https://es.wikipedia.org/wiki/RGB

En este caso he usado el selector de color de Microsoft Paint para mostraros el color que se va a obtener.


El código usado en el ejemplo es el siguiente:


Y el resultado el que se muestra a continuación:



El código usado en el ejemplo es el siguiente (para copiar y pegar):


Option Explicit

Sub cambiarColorFondoCelda()

    Cells(4, 2).Interior.Color = RGB(0, 255, 255)

End Sub


lunes, 14 de marzo de 2022

Escribiendo en celdas mediante VBA para Microsoft Excel

Hoy os muestro como escribir un número o un texto en una celda de Microsoft Excel mediante VBA.

Estas instrucciones serán muy útiles a la hora de usarlas en bucles, para repetir el proceso.




El código usado en el ejemplo es el siguiente:


Y el resultado el siguiente. Los valores numéricos se asignan directamente o mediante variables, mientras que los textos se indican entre comillas.



Por si lo queréis copiar.

Option Explicit

Sub escribirEnCelda()

        Cells(2, 3).Value = 6

        Cells(3, 2).Value = "Hola"

End Sub


miércoles, 9 de marzo de 2022

Uso de Case 1,2,3 en VBA para Microsoft Excel

Para finalizar la introducción a la instrucción Selct Case en VBA, veremos la posibilidad de crear un Case que se aplique a varios casos aislados.

Para ello pondremos en el Case, separados por comas los valores para los que deseemos ejecutar las instrucciones.


La instrucción que usaremos es esta:



El  código completo del programa:



Option Explicit

Sub condicional()

    

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As Integer

    dato = Range("B2").Value

    Select Case dato

        Case 1, 3, 5, 7:

            MsgBox ("Dia impar")

        Case 2, 4, 6:

            MsgBox ("Dia par")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

    End Select

End Sub


miércoles, 2 de marzo de 2022

Uso de Case N To M en VBA para Microsoft Excel

En un Select Case de VBA para Microsoft Excel es posible crear un Case que se ejecute entre dos valores, para ello usaremos la instrucción Select M To N.

Esto permite crear en una única instrucción una respuesta a varios valores de la variable de control.



La línea de código que hemos modificado es la siguiente:


El código completo es el siguiente:



El resultado es el mismo que el código que veíamos ayer con menos líneas.




El código completo a conticuación:

Option Explicit

Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As Integer

    

    dato = Range("B2").Value

    Select Case dato

        Case 1 To 5:

            MsgBox ("Dia laborable")

        Case 6 To 7:

            MsgBox ("Fin de semana")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

    End Select

End Sub




martes, 1 de marzo de 2022

Uso de Case Else en VBA para Microsoft Excel

En un Select Case de VBA para Microsoft Excel es posible crear un Case que se ejecute cuanto no se cumplan las condiciones de ninguno de los anteriores.




La instrucción concreta es la siguiente.




Esto sustituye en nuestro ejemplo con una sola instrucción a tres condicionales en nuestro ejemplo original.

Este es el código completo del ejemplo.





Sub condicional()

    'Declaramos una variable numerica

    Dim dia As Integer

    Dim dato As String

    

    dato = Range("B2").Value

    

    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")

        Case Else:

            MsgBox ("Dato incorrecto introduzca un numero del uno al siete")

            

    End Select

    

End Sub