MAGUU

Cargando

Formato moneda con VBA

formato moneda con VBA
  • Ene, Vie, 2021
VBA

Formato moneda con VBA

¿Cómo podemos aplicar el formato de moneda a los datos procedentes de nuestro equipo de ventas?

Recibimos los datos de nuestro equipo de ventas y necesitamos darles formato de moneda para nuestros informes.

Automatizar esta tarea con VBA es muy sencillo. Tenemos dos formas posibles de hacerlo: conociendo completamente la referencia del rango, o conociendo parcialmente la referencia del rango.

Conocemos la referencia completa del rango

Conocemos la celda de comienzo y de final del rango. En nuestro ejemplo, el rango de datos que nos interesa es C3:C16, cuyos valores no tienen el formato de moneda.

datos sin formato

Con este método usaremos un bucle FOR EACH para dar formato de moneda al rango que contiene los valores.

Declaramos la variable rango de tipo range, para referirnos al rango de celdas, y la variable celda (también de tipo range para poder recorrer las celdas del rango.

declaramos variables tipo range

Establecemos el rango con la instrucción SET:

SET rango

Escribimos el bucle FOR EACH

bucle FOR … EACH

La instrucción FOR EACH … NEXT repite un grupo de instrucciones para cada elemento de una matriz o una colección, es decir, ejecuta un bloque de código en bucle. En nuestro caso, ejecuta una acción en cada celda del rango de las ventas (la matriz); cuando se haya ejecutado el bloque de código en la primera celda, el bucle seguirá con la siguiente celda hasta recorrerlas todas.

Ahora escribimos dentro del bloque FOR EACH, la acción a ejecutar, en este caso dar formato moneda. Se trata de la propiedad NumberFormat del objeto range.

Para conseguir el punto de millar y dos decimales empleamos la máscara: «#,##0.00 €, y por si existieran valores negativos que tuviéramos que resaltar en rojo, añadimos la máscara: [Red]-#,##0.00 €»

máscara formato moneda

Ejecutamos con F5, y este es el resultado:

formato moneda aplicado

Este es el código:

Sub Metodo1()
    Dim rango As Range
    Dim celda As Range
    
    Set rango = Range("C3:C16")
    
    For Each celda In rango
        celda.NumberFormat = "#,##0.00 € ;[Red]-#,##0.00 €"
    Next celda    
End Sub

BONUS

¿Y cuando el rango es muy grande y no sabemos cuál es la última celda?

Solo tenemos que definir el rango usando la propiedad End(direction). En este caso, la dirección de la propiedad es xlDown (hacia abajo). Esta propiedad detecta la última celda con valores en esa columna y estira el rango hasta ella.

propiedad End(xlDown)

El resto del código no cambia:

propiedad NumberFormat

Tenemos una referencia aproximada del rango

Cuando los datos entran en una columna procedentes de una fuente externa, por ejemplo, y no sabemos el número exacto de filas que tendrá el rango, podemos usar otro método para dar formato moneda a los valores de las ventas.

Con la instrucción FOR … NEXT no tenemos que preocuparnos por el número total de celdas del rango. Solo necesitamos saber el número de columna adonde llegan los datos.

En lugar del objeto range, usaremos el objeto cells.

datos sin formato

Abrimos el editor de VBA (ALT+F11)

Insertamos un módulo (menú Insertar >> Módulo, y damos un nombre al procedimiento: Metodo2(). Evitamos las tildes para el nombre del método.

Con este método usaremos un bucle FOR … NEXT para dar formato de moneda al rango que contiene los valores.

insertamos módulo

Tomamos la celda C3 como referencia para el comienzo del rango:

celda comienzo del rango

Declaramos una variable integer que actuará como contador del bucle FOR … NEXT: i

la variable i

Declaramos una variable de tipo long para el número de la última fila del rango: ultimaFila

la variable ultimaFila

La variable ultimaFila es el valor de la propiedad row, que nos devuelve un número de fila. En nuestro caso, usamos la propiedad End(xlDown) para indicarle cuál será la última fila del rango.

valor de ultimaFila

Con las dos variables tenemos la celda de comienzo y la celda final del rango. Por lo tanto, ya podemos iterar sobre las celdas del rango.

El bucle comenzará en la celda que le indiquemos (i = 3) y recorrerá todas las celdas hasta el final (ultimaFila).

bucle FOR … NEXT

Usamos el objeto cells, para indicarle la fila (que será el valor de i) y la columna que será 3 para todas las celdas (es decir, la columna C).

objeto Cells

Ahora escribimos dentro del bloque FOR NEXT, la acción a ejecutar, en este caso dar formato moneda. Ya hemos visto anteriormente que es la propiedad NumberFormat.

Después del signo igual, hemos incluido el guion bajo porque nos permite dividir líneas de código muy largas y así hacerlo más legible.

propiedad NumberFormat

Presionamos la tecla F5 y vemos el resultado:

formato moneda aplicado

Este es el código:

Sub Metodo2()
    Dim i As Integer
    Dim ultimaFila As Long
    
    ultimaFila = Range("C3").End(xlDown).Row

    For i = 3 To ultimaFila
        Cells(i, 3).NumberFormat = _
        "#,##0.00 € ;[Red]-#,##0.00 €"
    Next i
End Sub

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *