Macro para copiar siempre en el mismo rango

Les hago una consulta. Con la siguiente macro copio todos los datos de la Hoja1 que en la columna A tienen el número 1 y lo pego en la última fila con datos de la Hoja2.

La consulta es cómo modificar la macro para que al ejecutarla, primero borre todos los datos que podría haber pegado anteriormente en la Hoja2 (dado que los datos de la Hoja1 son dinámicos), y en segundo lugar que ya no los pegue en la última fila con datos de la Hoja2, sino que los pegue siempre a partir del rango B2.

Sub copiar()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    col = "A"
    u = h2.UsedRange.Rows(h2.UsedRange.Rows.Count).Row + 1
    For i = 1 To h1.Range(col & Rows.Count).End(xlUp).Row
        If h1.Cells(i, col) = 1 Then
            h2.Range("B" & u) = h1.Range("B" & i)
            h2.Range("C" & u) = h1.Range("C" & i)
            h2.Range("D" & u) = h1.Range("D" & i)
            u = u + 1
        End If
    Next
End Sub

Desde ya...

1 Respuesta

Respuesta
1

Te anexo una macro, realiza lo mismo pero utiliza otro enfoque.

Sub copiar()
  Application.ScreenUpdating = False
  Sheets("Hoja2").Rows("2:" & Rows.Count).ClearContents
  With Sheets("Hoja1")
    If .AutoFilterMode Then .AutoFilterMode = False
    .Range("A1:D" & .Range("A" & Rows.Count).End(3).Row).AutoFilter 1, 1
    .AutoFilter.Range.Offset(1).Copy
    Sheets("Hoja2").Range("A2").PasteSpecial xlPasteValues
    .AutoFilterMode = False
  End With
  Application.ScreenUpdating = True
  Application.CutCopyMode = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas