2011-03-18 15 views
8

En uno de mis programas necesito calcular el promedio en un rango de números. El problema es que a veces la respuesta llega a un gran decimal y tengo que tratar de obtener hasta dos decimales como máximo.VBA Round Function

He visto algo llamado Excel.WorksheetFunction.Round(...) pero, hasta donde yo sé, solo funciona con un número específico o una celda específica. Me preguntaba si alguien sabía cómo implementar esto para que redondee todos los decimales en un rango de celdas.

Excel.WorksheetFunction.Round(ActiveSheet.Range(g_first_Function_Col & "2:" & g_first_Function & g_totalRow).Select, 2) 

El código anterior intenta utilizar la función circular en un rango de celdas. El g_first_Function_Col es una columna (como la columna "H") y g_totalRow es la última fila que tiene algún valor. Cuando intento ejecutar este código, me dice "=" esperado. Básicamente, estoy tratando de seleccionar una columna completa y redondearla.

Gracias,

Jesse Smothermon

+0

enfoque interesante, se puede saber por qué necesita para completar cada célula? Me parece por su pregunta que sumando el total y luego el redondeo eso funcionaría? –

+0

Básicamente, el programa acepta hasta cuatro entradas de usuario para el tipo de operación que desea (que se puede aplicar a un rango de celdas) como suma, promedio, mediana, máximo, etc. Realmente no sé cuáles son las respuestas hasta que estén en la salida porque solo uso las funciones de Excel, en realidad no guardo nada en ninguna parte hasta la salida. Como no sé las respuestas, quiero hacer esto en todas las celdas a la vez en caso de que haya una celda aleatoria con muchos lugares decimales –

Respuesta

8

Hay dos maneras que usted puede hacer eso.

-Seleccione su alcance y cambiar el formato de número:

Range("myrange").Select 
Selection.NumberFormat = "0.00" 

lazo -Pulsadores a través de todas las células de su rango y aplicar la función de ronda a cada uno de ellos. En VBA no podrá usar la función Round en un rango completo a la vez.

For Each currentcell In myRange 
    currentcell.Value = Math.Round(currentcell.Value, 2) 
Next 

(pseudocódigo anterior, lo necesitará una mejor bucle FOR..NEXT colocar a través de todas las células de su rango.)

+0

Muchas gracias, probé la primera sugerencia y funcionó como yo quería. Realmente quería hacer toda una gama a la vez para tratar de ahorrar tiempo –