eliminar filas

speed_methal

New Member
Joined
May 8, 2010
Messages
14
Buenas a todos, soy nuevo en excel y necesito realizar una operación con macros. Estoy aprendiendo el lenguaje VBA pero aún desconozco gran parte del mismo.
He de eliminar ciertas filas de la siguiente configuración.
En la celda A3 empieza mi columna como sigue:
0
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11
0.12
.
.
.
y necesito transformarla en esta:
0
0.04
0.08
0.12
.
.
.
es decir dejar una y eliminar tres
He generado una macro rudimentaria que lo hace pero son muchisimos datos y tarda un montón.

Sub EliminaFilasDesplazamientos()
'Elimina filas alternas (pares o impares) de modo que se eleminen los tiempos
'intermedios generados por la doble interpolación al pasar de aceleración a
'a desplazamiento
ultimacelda = 10007
'Número de la fila que contiene el último valor de la columna
Do Until n = 2
n = n + 1
For i = 4 To ultimacelda
Cells(i, "A").EntireRow.Delete
'4 se refiere al numero de la celda siguiente a la de t = 0.
Next i
Loop
End Sub

Mis dudas son si hay alguna manera de hacer esto de un sólo barrido para reducir el tiempo de ejecución. A modo de aprendizaje; la fila hasta la que se ha de hacer la operación la meto a pelo. Habría alguna manera de definir la variable ultimacelda para que sea el número de la última celda de la columna A que tiene información?? ya que en el primer bucle no se pierde tiempo, reduciéndose las filas a la mitad; pero en el segundo bucle la variable ultimacelda hace que se ejecute todas las filas anteriores suponiendo un extra de tiempo inecesario.

Espero me podais ayudar.
Saludos a todos
 

Excel Facts

When did Power Query debut in Excel?
Although it was an add-in in Excel 2010 & Excel 2013, Power Query became a part of Excel in 2016, in Data, Get & Transform Data.
Hola,

de pronto puedas evitar el bucle y usar filtro avanzado. Suponiendo que tus datos están en la Hoja1, en la columna A y empiezan en A1, esto insertará una nueva columna B con el resultado que buscas:

Code:
Sub Prueba()
    
    Application.ScreenUpdating = False
    
    With Sheets("Hoja1")
        .Range("b:c").Insert
        .Range("b2").Formula = "=mod(row(a1),4)=0"
        .Columns(1).AdvancedFilter 2, .Range("b1:b2"), .Range("c1")
        .Columns(2).Delete
    End With
    
    Application.ScreenUpdating = True
    
End Sub
 
Upvote 0
muchas gracias funciona perfectamente. soy nuevo con las macros te importaría explicarme que significan los comandos y el funcionamiento que tienen en esta macro,
de nuevo gracias
 
Upvote 0
Hola de nuevo,

Me alegra que haya funcionado la macro.

Acá copio nuevamente la macro con algunos comentarios para que te sea más fácil entenderla.

Para entenderla del todo, tendrás que empaparte un poco de filtros avanzados y entender la función Residuo y como la he usado acá (prueba ingresando la fórmula =residuo(fila(a1);4)=0 en B1 y copiala hacia abajo para que te hagas una idea de lo que está haciendo):

Code:
Sub Prueba()
    
    'Desactiva la actualización de pantalla
    Application.ScreenUpdating = False
    

    'La hoja con la que vamos a trabajar
    With Sheets("Hoja1")

        'Inserta dos columnas al lado de la columna A
        'Esto solo es por si hay datos al lado de tus datos,
        'para no sobreescribirlos.
        .Range("b:c").Insert

        'Ingresa la fórmula =RESIDUO(FILA(A1);4)=0 en la celda B2
        'Esta es la fórmula que se va a usar para el filtro avanzado
        .Range("b2").Formula = "=mod(row(a1),4)=0"

        'Aplica el filtro avanzada para extraer los datos según la
        'fórmula (criterio) en B2 y copia el resultado de la extracción
        'en la columna C
        .Columns(1).AdvancedFilter 2, .Range("b1:b2"), .Range("c1")

         'Borra la columna B que contiene el criterio de extracción para
         'el filtro avanzado
        .Columns(2).Delete

    End With
    
    'Activa la actualización de pantalla
    Application.ScreenUpdating = True
    
End Sub

En todo caso, puedes ver lo que va haciendo la macro paso a paso si la ejecutas con F8 desde el Editor de Visual Basic.
 
Upvote 0
Gracias por tu comentario Greg, me alegra recibirlo y más viniendo de ti. Me impulsa a seguir aprendiendo :D.
 
Upvote 0

Forum statistics

Threads
1,215,052
Messages
6,122,878
Members
449,097
Latest member
dbomb1414

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top