quitar - herramientas de analisis de datos en excel
Función redonda en Excel, función de hoja de cálculo frente a VBA (3)
Tenía una aplicación para devolver coincidencias más cercanas a ciertos valores en un gran grupo de valores (como en mi pregunta anterior) y elegí una solución de VBA. Mientras estaba usando dicha aplicación, observé que los resultados para el valor de 0.5 no eran correctos. He estado usando la función VBA Round, que encontré que devuelve 0 para 0.5 redondeado a entero, mientras que la función Round Round de la hoja de trabajo devuelve 1. Curiosamente, la función VBA Round devuelve 2 para 1.5. Tuve que sustituir la función de hoja de cálculo en lugar de la de VBA.
¿Me estoy perdiendo de algo?
Puede culpar a Microsoft por este: http://support.microsoft.com/kb/194983
Aquí hay una lista de formas de hacerlo: http://www.excelforum.com/excel-programming/401104-worksheet-rounding-vs-vba-rounding.html
Es un problema conocido. La función VBA Round () utiliza el redondeo de Banker, mientras que la función de celda de hoja de cálculo utiliza el redondeo aritmético. Verifique los detalles aquí:
PRB: función de ronda diferente en VBA 6 y Excel Spreadsheet
La solución propuesta por Microsoft es escribir una función personalizada para obtener los resultados deseados.
El redondeo del banco siempre redondea 0.5 al número par más cercano y es estándar en contabilidad, por lo que Excel funciona de esa manera. El redondeo aritmético redondea 0.5 hasta el siguiente número.
Pregunta respondida completamente aquí y copiada aquí (con permiso del autor :):
Tenga cuidado, la función VBA Round usa el redondeo 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 ronda de funciones de la hoja de cálculo de Excel, siempre redondea .5 hacia arriba.
He hecho algunas pruebas y parece que el redondeo de .5 (redondeo simétrico) también se usa para el formato de celdas y también para el redondeo de ancho de columna (cuando se usa el formato de Número General). La bandera ''Precisión como se muestra'' no parece hacer ningún redondeo, solo usa el resultado redondeado del formato de celda.
Traté de implementar la función SymArith de Microsoft en VBA para mi redondeo, pero encontré 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. Finalmente descubrí que puede usar la función de hoja de cálculo de Excel, de la siguiente manera:
Application.Round (58.55, 1)
Esto le permitirá redondear normalmente en VBA, aunque puede no ser tan rápido como una función personalizada. Me doy cuenta de que esto ha cerrado el círculo de la pregunta, pero quería incluirlo para completarlo.