Macro para copiar y pegar celdas en Excel

Hace unos días me pidió un compañero de trabajo que le ayudara a automatizar una tarea que hacía todos los días. La tarea es muy sencilla, copiar y pegar celdas en Excel de una hoja a otra. La solución fue con una macro muy sencilla como verás a continuación.

macro para copiar y pegar celdas en Excel con VBA

La información de partida

La información que os presentamos es falsa… absolutamente falsa, pero nos servirá para nuestro ejemplo. La tabla que puedes ver en la imagen consta de 100 filas con datos aleatorios… y el campo clave es la edad.

Lo que queremos hacer es: copiar todas las filas que cumplan con la condición de que en la columna Edad (B) ponga más de 30. En la siguiente imagen podéis ver las filas que queremos copiar sombreadas en verde claro:

Y aunque esto se puede hacer con un filtro avanzado sin necesidad de usar macros vamos a hacerlo mediante código VBA.

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 🙂

[sociallocker]

Soluciones de ejercicio de Excel con funciones

[/sociallocker]

¿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

Un curso de VBA para convertirte en un profesional

Si eres como yo, de los que le encanta automatizar tareas y tienes curiosidad por aprender a programar te recomiendo que le eches un vistazo al Curso de VBA que hemos preparado para que aprendas desde 0. De verdad, estoy seguro de que te va a venir fenomenal… además, puedes elegir las partes que quieres leer.

aprender VBA

(Visited 243.708 times, 1 visits today)
Categorías VBA

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies