VBA: Copiar celdas de varias columnas y filas siempre que se cumpla condición. Hay un error en mi macro

Hice una macro con la que pretendo copiar un rango de celdas ("b3:j15") y pegarlas en otra ubicación, solo si cumple una condición, pero algo estoy haciendo mal. Tengo una columna B:B con valores:

Aa

Bb

Cc

Aa

Aa

Busco que la macro inicie su búsqueda en la hoja1, b2, detecte la fila que tiene "aa" y entonces copie el rango b3:j5 de la hoja2 y lo pegué en la hoja3 columna b. Esto se repite cada vez que detecte una celda "aa" en la hoja1, columna b.

Con lo poco que sé de vba hice lo siguiente pero sólo funciona una vez, supongo que hice algo mal con el offset pero no logro entender qué. Gracias de antemano por su ayuda y por su tiempo.

Sheets("hoja1").Select
Range("b2").Select
Do While ActiveCell <> ""
If ActiveCell = "aa" Then
Sheets("hoja2").Select
Range("B3:j5").Select
Selection.Copy
Sheets("hoja3").Select
Range("b3").Select
Do While ActiveCell <> ""
ActiveCell.Offset(4, 0).Select
Loop
ActiveSheet.Paste
End If
Sheets("hoja1").Select
ActiveCell.Offset(4, 0).Select
Loop
'
End Sub

1 respuesta

Respuesta
1

No está muy clara la idea por lo que te dejo una imagen de cómo queda con los cambios.

Me parece que tu problema está en que al regresar a la hoja1 saltas 4 filas en lugar de pasar a la fila siguiente para controlar si se trata de 'AA'

Sub espaciado()
Sheets("Hoja1").Select
Range("b2").Select
'recorre col B hasta encontrar celda vacía
Do While ActiveCell <> ""
    If ActiveCell = "Aa" Then
        Sheets("hoja2").Range("B3:j5").Copy
        Sheets("hoja3").Select
        Range("b3").Select
        'va buscando cada 4 filas hasta encontrar una vacía
        Do While ActiveCell <> ""
            ActiveCell.Offset(4, 0).Select
        Loop
        ActiveSheet.Paste
        'regresa a la hoja1
        Sheets("hoja1").Select
    End If
    'pasa a la fila siguiente
    ActiveCell.Offset(1, 0).Select
Loop
End Sub

Si esto no es lo que intentas obtener aclara con una imagen cómo debieran presentarse en la Hoja3.

Si esto resuelve tu consulta no olvides valorarla. Desde la sección Macros de mi sitio podrás encontrar otros métodos mejores para encontrar la primer celda libre.

Mil gracias por tu tiempo y compartir tu conocimiento. Efectivamente, al cambiar el offset como tu lo pusiste la macro copia el rango de celdas en todas las ocasiones que aparece "Aa" sin ningún problema. Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas