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.

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.

Establecemos el rango con la instrucción SET:

Escribimos el 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 €»

Ejecutamos con F5, y este es el resultado:

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.

El resto del código no cambia:

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.

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.

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

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

Declaramos una variable de tipo long para el número de la última fila del rango: 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.

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

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

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.

Presionamos la tecla F5 y vemos el resultado:

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