Excel - Macro para redondear valores de celdas con contenido

   
Vista:

Macro para redondear valores de celdas con contenido

Publicado por LUIS H (9 intervenciones) el 28/09/2017 07:47:46
Buenas noches
Tengo la siguiente macro en excel que hasta el momento funciona bien:

1
2
3
4
5
Public Sub Aprox_normal()
For Each cell In Selection
cell.Formula = Application.WorksheetFunction.Round(cell.Value, 0)
Next
End Sub

Basicamente la macro toma todas las celdas seleccionadas y aplica la formula Round, el problema es que cuando selecciono una columna completa, se demora un monton por que aplica la formula para el millon de celdas de excel, quiero saber que le agrego para que omita cualquier celda vacia en la selección y que cumpla su función para con las celdas que si tienen datos.

De antemano, muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo

Macro para redondear valores de celdas con contenido

Publicado por Andres Leonardo (894 intervenciones) el 28/09/2017 15:34:59
Hola te explico un poco para que tu tomes la decision de como corregirlo----

For Each cell In Selection ' Por cada celda de la seleccion has lo que tdebas en este caso redondear la verdad no se si tan facil es seleccionar y formato numero redondeado a 2 pero bueno... es tu libro jejejej e...

volviendo ....entonces el Limite es recorre todas las celdas de la seleccion ejemplo de la columna el millon de registros por ende habria que hacer algo para que salga .. ejemplo una validacion y romper el ciclo una de las maneras seria romper la validacion haceindo una pregunta que si ya recorrio N numeor de celdas exit for o exit sub
1
2
3
4
5
6
7
8
Public Sub Aprox_normal()
x = 1
For Each cell In Selection
cell.Formula = Application.WorksheetFunction.Round(cell.Value, 0)
x = x+1
if x > 1300 then exit sub  ' aqui recorreria 1300  tu le puedes poner el numero que desees
Next
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Macro para redondear valores de celdas con contenido

Publicado por LUIS H (9 intervenciones) el 29/09/2017 16:23:50
Muchas gracias la pondré a prueba y te comentaré los resultados obtenidos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Macro para redondear valores de celdas con contenido

Publicado por Pedro Martin (31 intervenciones) el 28/09/2017 18:45:15
Hola !

creo que tu macro se tarda tanto por que el utilizar el FOR EACH, existe una perdida de tiempo, por que vba tiene que estar interactuando con excel por cada celda, o sea va a excel toma el valor de la celda lo transforma y despues lo devuelve a excel y vuelve a empezar con la siguiente celda.
es mejor realizar las operaciones en una matriz y despues devolver esa matriz a el rango que estas trabajando.

espero te sirva la macro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Public Sub Aprox_normal2()
    Dim tiempo1, tiempo2 As Double
    'esto es nada mas para medir el tiempo de ejecucion de la macro
    tiempo1 = Timer
 
    Dim MiArray() As Variant
    Dim MiRango As Range
    Dim filas, columnas  As Integer
    'asigno a Mirango lasd celdas seleccionadas
    Set MiRango = Selection.Cells
 
    filas = MiRango.Rows.Count
    columnas = MiRango.Columns.Count
 
    'redimenciono mi matriz para que sea del mismo tamaño que el del rango
    ReDim MiArray(1 To filas, 1 To columnas)
 
    'vacio el rango a la matriz
    MiArray() = MiRango
 
    'aqui hago las operaciones pero en la matriz
    For i = 1 To filas
            For j = 1 To columnas
        If MiArray(i, j) <> Empty Then MiArray(i, j) = Application.WorksheetFunction.Round(MiArray(i, j), 0)
        Next j
    Next i
 
    'devuelvo las operaciones ya ejecutadas de la matriz al rango
    MiRango = MiArray
    'esto es nada mas para medir el tiempo de ejecucion final de la macro
    tiempo2 = Timer
    'muestra cuanto tiempo transcurrio de la macro
    MsgBox Format(tiempo2 - tiempo1, "0. 00 \s\ec")
 
End Sub


todo lo de timer se lo puedes quitar es solo para ver cuanto se tardaba macro


Saludos desde México (Huejutla,,Hgo.),
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Macro para redondear valores de celdas con contenido

Publicado por LUIS H (9 intervenciones) el 29/09/2017 16:25:57
Martin, muchas gracias la. Pondré a prueba y te comentaré los resultados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar