Copiar filas de hoja1 a hoja2 si una celda cumple con una condición

Necesitaría una macro que copie una fila entera de una hoja1 si esa misma celda cumple con la palabra "Vencido" y pegue la fila entera una debajo de la otra en la hoja2 de forma seguida.

Respuesta

22/08/16

Hola, Federico

En el caso de que busqués una macro para hacerlo en una única linea, esta es la rutina que necesitás.

Accedé al Editor de VBA (Atajo: Alt + F11), insertá un módulo - si no tuvieras uno ya- y pegá el siguiente código:

Sub Copia1Fila()
'-------
'Federico, te dejo las variables que te pueden servir para adaptar la rutina a tu planilla:
LaPalabra = "Vencido" ' Palabra que indica que esa fila debe ser transferida a la hoja:
HojaDest = "Hoja2" ' Hoja donde pegar la fila de Hoja1
CeldaDest = "A2" ' Primera celda ocupada en la hoja de destino
'--------  
CeldaPega = Sheets(HojaDest). Range(CeldaDest). Offset(Sheets(HojaDest). Range(CeldaDest). CurrentRegion. Rows. Count). Address
If ActiveCell.Value = LaPalabra Then
    ActiveCell.EntireRow.Copy
    Sheets(HojaDest).Range(CeldaPega).PasteSpecial xlPasteValues
    Sheets(HojaDest).Range(CeldaPega).PasteSpecial xlFormats
    Application.CutCopyMode = False
End If
End Sub

Pero, por alguna razón,  me imagino que estás buscando una rutina cíclica que haga eso sobre un listado donde varias celdas tienen la palabra "Vencido" y quieres que se ejecute continuamente.

En tal caso, la rutina a utilizar es la siguiente:

Sub CopiaVencidos()
'-------
'Federico, te dejo las variables que te pueden servir para adaptar la rutina a tu planilla:
Celdatos = "A3" 'aquí la primera celda de la columna donde está la palabra clave.
LaPalabra = "Vencido" ' Palabra que indica que esa fila debe ser transferida a la hoja:
HojaDest = "Hoja2" ' Hoja donde pegar la fila de Hoja1
CeldaDest = "A2" ' Primera celda ocupada en la hoja de destino
'--------
'Aplication.ScreenUpdating = False
CeldaPega = Sheets(HojaDest). Range(CeldaDest). Offset(Sheets(HojaDest). Range(CeldaDest). CurrentRegion. Rows. Count). Address
For LaFila = 0 To Range(Celdatos).CurrentRegion.Rows.Count
    If Range(Celdatos).Offset(LaFila).Value = LaPalabra Then
       Range(Celdatos).Offset(LaFila).EntireRow.Copy
        Sheets(HojaDest).Range(CeldaPega).PasteSpecial xlPasteValues
        Sheets(HojaDest).Range(CeldaPega).PasteSpecial xlFormats
        Application.CutCopyMode = False
        Cont = Cont + 1
        CeldaPega = Sheets(HojaDest). Range(CeldaDest). Offset(Sheets(HojaDest). Range(CeldaDest). CurrentRegion. Rows. Count). Address
    End If
Next
MsgBox "Listo! " & Chr(10) & "Se agregaron " & IIf(Cont, Cont, "CERO ") & " lineas en " & HojaDest, vbInformation, "TERMINADO"
End Sub

Tené en cuenta que hay una variable más que colocar en el código, cual es la celda desde donde iniciar el control de Vencidos

Dado que el procedimiento inicia revisando las celdas desde la que le indiques, puede ser que dupliques filas en la hoja2. Por lo tanto, puedes eliminar lo que haya pasado, o modificar la celda de inicio en el código.

Como siempre, recomiendo que trabajes sobre un archivo de prueba para ver el comportamiento.

Avisame si es lo que estabas buscando o si tenemos que hacerle un ajuste.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas