Está en la página 1de 6

PASO A PASO: MACRO PARA COPIAR Y

PEGAR CELDAS EN EXCEL CON VBA


PASO 1
Para poder hacer esta macro vamos a necesitar un bucle FOR que
recorra todas las filas de la hoja «Datos» donde se encuentra nuestra
tabla de la que queremos copiar las celdas. El bucle recorrerá todas las filas
de una en una empezando por la fila 2 (en la uno están los títulos de las
columnas) y terminando en la 101. Si no sabes cual es la última fila puedes
verlo mediante este tutorial.
For i=2 to 101

'pon aquí tu código

Next

PASO 2
Para saber qué filas debemos copiar tenemos que usar una
condición tipo IF para determinar qué celdas debemos copiar y cuales no
debemos copiar
If Cells(i, "B").Value > 30 Then

'pon aquí tú código

End If

PASO 3
Copiar las celdas si se cumple la condición del paso anterior. Para ello
usaremos la función COPY.
Range(Cells(i, "A"), Cells(i, "D")).Copy

PASO 4
Para pegar los valores deberemos situarnos en la celda donde queramos
copiar dichos valores. Para ello primero tendremos que seleccionar la
hoja donde vamos a copiar y después la celda a la que queremos ir.
Como no sabemos a qué celda queremos ir pues no sabemos cuántas filas
se han copiado necesitamos usar una variable. Nosotros hemos empezado
con la variable j=2 (porque hay títulos en la hoja «Filtros») y ahí es donde
empieza a copiar.
Una vez que haya copiado los datos, para indicar que copie en la siguiente
fila debes sumarle a j una unidad: j=j+1 para que vaya avanzando fila a fila
cuando lo necesite.
Sheets("Filtro").Activate

Cells(j, "A").Select

'pego la fila que hemos copiado

ActiveSheet.Paste

PASO 5
Cierra el condicional IF y el bucle… y habrás terminado. El código completo
lo puedes ver a continuación
Sub Copiar_Filas()

'inicializo la variable j

j=2

'comienzo el bucle

For i = 2 To 101

'activo la hoja donde están mis datos


Sheets("Datos").Activate

'compruebo que el valor de la fecha es mayor que 30

If Cells(i, "B").Value > 30 Then

'copio la fila entera

Range(Cells(i, "A"), Cells(i, "D")).Copy

'selecciono la hoja donde quiero pegar y después la celda

Sheets("Filtro").Activate

Cells(j, "A").Select

'pego la fila que hemos copiado

ActiveSheet.Paste

'aumento la variable j para que vaya a la siguiente fila de la hoja filtros

'cuando encuentre una nueva fila que cumple con la condición de edad

j=j+1

End If

Next
End Sub

DESCARGATE ESTE ARCHIVO PARA


PRACTICAR
Si quieres descargarte este archivo puedes hacerlo muy sencillamente.
Haznos un Like en Facebook en nuestra página para desbloquear este
contenido que ves más abajo… luego si quieres, nos dejas de seguir 🙂

Contenido que debes desbloquear

Me gusta

tweet

+1 us

error

¿HAY UN MÉTODO MÁS RÁPIDO?


Pues claro que lo hay… y no es nada difícil. En vez de cambiar de hoja,
seleccionar la celda y pegar como veíamos en el Paso 4 usaremos la
propiedad Destination.
Esta propiedad nos permite directamente indicar en qué celda queremos
pegar la información que hayamos copiado sin necesidad de movernos de
hoja y de seleccionar la celda que queremos… es mucho mucho más
rápida… y sino, compruébalo tú mismo, aquí tienes el código.
Sub Copiar_Filas_2()

'activo la hoja donde están mis datos


Sheets("Datos").Activate

'inicializo la variable j

j=2

'comienzo el bucle

For i = 2 To 101

'compruebo que el valor de la fecha es mayor que 30

If Cells(i, "B").Value > 30 Then

'copio la fila entera y la pego

Range(Cells(i, "A"), Cells(i, "D")).Copy


Destination:=Sheets("Filtro").Cells(j, "A")

'aumento la variable j para que vaya a la siguiente fila de la hoja filtros

'cuando encuentre una nueva fila que cumple con la condición de edad

j=j+1

End If

Next
End Sub

También podría gustarte