Pregunta

Tenía una aplicación para devolver coincidencias más cercanas a ciertos valores en un gran grupo de valores (como en mi anterior question ) y elegí una solución VBA. Mientras utilizaba dicha aplicación, observé que los resultados para el valor de 0.5 no eran correctos. Había estado usando la función VBA Round que encontré que devolvía 0 para 0.5 redondeado a entero mientras que la función round de la hoja de trabajo devuelve 1. Extrañamente, la función VBA round devuelve 2 para 1.5. Tuve que sustituir la función de hoja de trabajo en lugar de la de VBA.

¿Me estoy perdiendo algo?

¿Fue útil?

Solución

Es un problema conocido. La función VBA Round () usa el redondeo de Banker mientras que la función de celda de la hoja de cálculo usa el redondeo aritmético. Verifique los detalles aquí:

PRB: función redonda diferente en VBA 6 y hoja de cálculo Excel

La solución propuesta por Microsoft es escribir una función personalizada para obtener los resultados deseados.

El

redondeo bancario siempre redondea 0,5 al número par más cercano y es estándar en contabilidad, razón por la cual Excel funciona de esa manera. Redondeo aritmético redondea 0,5 hasta el siguiente número.

Otros consejos

Pregunta respondida completamente aquí y copiada aquí (por permiso del autor :):

Tenga cuidado, la función VBA Round utiliza el redondeo de Banker, donde redondea .5 a un número par, así:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

Mientras que la función de hoja de cálculo de Excel se redondea, siempre redondea .5 hacia arriba.

He realizado algunas pruebas y parece que el redondeo hacia arriba .5 (redondeo simétrico) también se usa en el formato de celda, y también para el redondeo de Ancho de columna (cuando se usa el formato de Número general). El indicador 'Precisión como se muestra' no parece redondearse, solo usa el resultado redondeado del formato de celda.

Intenté implementar la función SymArith de Microsoft en VBA para mi redondeo, pero descubrí que Fix tiene un error cuando intentas darle un número como 58.55; La función da un resultado de 58.5 en lugar de 58.6. Luego finalmente descubrí que puedes usar la función Redonda de hoja de cálculo de Excel, así:

  

Application.Round (58.55, 1)

Esto le permitirá hacer redondeos normales en VBA, aunque puede que no sea tan rápido como algunas funciones personalizadas. Me doy cuenta de que esto ha cerrado el círculo de la pregunta, pero quería incluirlo para completarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top