Está en la página 1de 5

Cmo redondear con VBA en Excel

El redondeo de nmeros es muy comn en las hojas de clculo y en ocasiones necesitamos


redondear en VBA al programar una funcin UDF para obtener algn clculo especfico. Para
implementar el redondeo de nmeros utilizaremos la funcin ROUND la cual revisaremos con
detenimiento en esta ocasin.

No es lo mismo REDONDEAR que ROUND


Antes de iniciar debo decir que es desafortunado encontrar algunos artculos en Internet que
hablan de cmo redondear con VBA y sin embargo hacen una mezcla de la funcin
REDONDEAR de Excel con la funcin ROUND de VBA. Es muy importante que todo usuario
de Excel sepa que las funciones VBA y las funciones de Excel son diferentes y aunque algunas
de ellas hacen cosas muy similares, no significa que son lo mismo y lo voy a demostrar a
continuacin.

En la siguiente imagen puedes observar en la columna B el comportamiento de la funcin de


Excel REDONDEAR sobre el conjunto de nmeros de la columna A y en la columna C podrs
observar los resultados devueltos por la funcin ROUND:

Pon especial atencin al resultado devuelto en la fila 7 de la hoja. La funcin REDONDEAR


hizo el redondeo del nmero hacia arriba mientras que la funcin ROUND lo hizo hacia abajo.
Esta es una prueba evidente de que las funciones son totalmente diferentes.

Tal vez este malentendido se ve ayudado por el hecho de que, si tienes Excel en ingls, ambas
funciones se llamarn ROUND y podras pensar que, si tienen el mismo nombre, entonces son la
misma funcin. Pero ya que t ests en el camino para convertirte en un experto en Excel,
debers distinguir muy bien entre las funciones de Excel y las funciones VBA.
La funcin ROUND en VBA
La funcin ROUND en VBA devuelve un nmero redondeado a una cantidad especificada de
dgitos y para ello cuenta con dos argumentos:

Number (Obligatorio): La expresin numrica que ser redondeada.


NumDigitsAfterDecimal (Opcional): La cantidad de decimales a las que ser
redondeada la expresin numrica. Si se omite este parmetro, se devolver un valor
entero.

En la siguiente imagen puedes observar el comportamiento de la funcin ROUND con diferentes


valores para su segundo argumento. Para la columna B he omitido por completo el segundo
argumento pero en las columnas C y D he colocado los valores 1 y 2 respectivamente.

Redondear al nmero par ms cercano


Cuando hablamos de redondear nmeros siempre tenemos alguna postura respecto a los nmeros
que terminan con el decimal 5, ya sea que necesitamos que el nmero sea redondeado hacia
arriba o hacia abajo, pero la funcin ROUND no tiene ninguno de esos comportamientos.

La funcin ROUND implementa una lgica conocida como redondeo al nmero par ms cercano
es decir, si el ltimo decimal es un 5, el redondeo se har hacia el nmero par ms cercano ya sea
hacia arriba o hacia abajo. Para dejar en claro este comportamiento, en la siguiente imagen
podrs observar el resultado de la funcin al redondear este tipo de nmeros:
Todos los nmeros de la columna A terminan con el decimal 5 y todos los nmeros redondeados
de la columna B terminan con un nmero par. Observa que el nmero 2.15 es redondeado hacia
arriba, mientras que el nmero 2.25 es redondeado hacia abajo, lo cual comprueba que la funcin
ROUND utiliza la lgica de redondeo al nmero par ms cercano.

Es de vital importancia que recuerdes este comportamiento al utilizar la funcin ROUND ya que
muchos usuarios piensan que estn obteniendo resultados incorrectos aunque en realidad ese sea
el comportamiento natural de la funcin.

Redondear hacia arriba en VBA


SI lo que necesitas es redondear el decimal 5 hacia arriba, tendras la opcin de crear tu propia
funcin UDF, pero no hay necesidad de hacerlo ya que podemos utilizar la funcin
REDONDEAR de Excel desde nuestro cdigo VBA. Para hacer eso debemos utilizar la siguiente
instruccin:

Application.WorksheetFunction.Round

Las funciones de Excel pueden ser accedidas desde VBA a travs del objeto WorksheetFunction
el cual contiene todas las funciones de la hoja de clculo y la nica condicin es que tendremos
que especificar su nombre en ingls. El siguiente cdigo utiliza la funcin ROUND de VBA en
la columna B y la funcin REDONDEAR (ROUND) de Excel en la columna C para redondear
los nmeros de la columna A:

1Private Sub CommandButton1_Click()


2
3For i = 2 To 10
Cells(i, 2).Value = Round(Cells(i, 1).Value, 1)
4 Cells(i, 3).Value = Application.WorksheetFunction.Round(Cells(i,
51).Value, 1)
6Next i
7
8End Sub
En la siguiente imagen puedes ver los resultados de este cdigo y podrs notar que la columna C
hace el redondeo hacia arriba.

Observa que los nmeros de la columna C terminan en par o impar, ya que la funcin de Excel
har el redondeo del decimal 5 siempre hacia arriba mientras que la funcin de VBA lo har
hacia el nmero par ms cercano.

Redondear hacia abajo en VBA


Si alguna vez necesitas hacer el redondeo del decimal 5 hacia abajo, entonces ser necesario
aplicar un truco a la funcin REDONDEAR de Excel y que ser restar una cantidad muy
pequea al nmero antes de redondearlos. Por ejemplo, a nuestro cdigo anterior agregar una
nueva lnea para hacer el redondeo hacia abajo en la columna D:

1Private Sub CommandButton1_Click()


2
For i = 2 To 10
3 Cells(i, 2).Value = Round(Cells(i, 1).Value, 1)
4 Cells(i, 3).Value = Application.WorksheetFunction.Round(Cells(i,
51).Value, 1)
6 Cells(i, 4).Value = Application.WorksheetFunction.Round(Cells(i,
1).Value - 0.000001, 1)
7Next i
8
9End Sub

Observa que estoy restando el valor 0.000001 al nmero que voy a redondear y como
consecuencia obtendr un redondeo hacia abajo. La nica condicin es que el valor a restar debe
tener muchos ms decimales que los nmeros que ests redondeando de manera que no afecte el
resultado final.