Macro que copie la fila completa si se cumple una condición a otra hoja del libro en la sgte fila vacia

Estoy entrampada en lo sgte. Favor ayuda. Tengo en un libro 2 hojas, necesito que al cumplirse la condición SI en la columna P de la hoja1, se copie la fila completa a la sgte fila vacia de la hoja2. Tomando en cuenta que cuando copie no vuelva a copiar los. Que ya estan traspasados.

Estaria enormemente agradecida.

2 Respuestas

Respuesta
1

[Hola

Te paso la macro

Saludos!
Sub copiar()
'Por Adriel ortiz
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    Application.ScreenUpdating = False
'
    For i = 2 To h1.Range("P" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "P") = "SI" Then
            u = h2.Range("P" & Rows.Count).End(xlUp).Row + 1
            h1.Rows(i).Copy
            h2.Range("A" & u).PasteSpecial xlValues
         End If
    Next i
    '
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "fin"
End Sub
Respuesta
1

Te anexo una opción, para saber cuáles registros ya fueron copiados.

La macro revisa si en la columna "P" dice "SI", si es así copia el registro a la hoja2, entonces en la columna "Z" pone la palabra "copiado". Para que en la siguiente ejecución, revisa si en la columna "P" dice "SI", pero también en la columna "Z" debe estar en blanco.

Sub Copiar_Fila()
'Por Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    For i = 2 To h1.Range("P" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "P").Value = "SI" And h1.Cells(i, "Z").Value = "" Then
            u2 = h2.Range("P" & Rows.Count).End(xlUp).Row + 1
            h1.Rows(i).Copy h2.Rows(u2)
            h1.Cells(i, "Z").Value = "copiado"
        End If
    Next
    MsgBox "Registros copiados", vbInformation, "FIN"
End Sub

Cambia en la macro las columnas "Z" por la letra de la columna que tengas disponible para tal efecto.


.

.

Hola Dante: mira...necesito que me ayudes a mejorarlo...que copie la fila completa de la hoja "Auxiliar Provisorio" cuándo en la columna AG tenga la palabra "SI", se copie esa fila completa a la sgte fila vacia  de la hoja "Auxiliar SCT", desde la columna A, sin que se repitan los ya copiados. 

Lo que no hace esta macro es copiarlos a la hoja "Auxiliar SCT" en la sgte fila vacia que encuentre. ayúdame porfavor

Sub Copiar_SI()
    Set h1 = Sheets("Auxiliar Provisorio")
    Set h2 = Sheets("Auxiliar SCT")
    '
    For i = 2 To h1.Range("AG" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "AG").Value = "SI" And h1.Cells(i, "AI").Value = "" Then
            u2 = h2.Range("AG" & Rows.Count).End(xlUp).Row + 1
            h1.Rows(i).Copy h2.Rows(u2)
            h1.Cells(i, "AI").Value = "copiado"
        End If
    Next
    MsgBox "Registros copiados", vbInformation, "FIN"
End Sub

DANTE, a lo anterior ya lo tengo casi casi...mira este código, lo que me estaría faltando son 2 cosas:

1.- Cuando copie la fila completa a la hoja "Auxiliar SCT" lo haga en la sgte fila vacia que encuentre...pero desde la sgte vacia, desde la fila A6 hacia abajo, (ya que como hay títulos, los está copiando debajo del titulo). En la fila A6 hacia abajo se deberian copiar los datos que cumplan con el requisito.

2.- Que omita el copiado de la columna AG (de la hoja "Auxiliar Provisorio", columna que contiene la frase "SI"), al pegar en la hoja "Auxiliar SCT". este es el código que tengo

Sub Copiar_SI()

Set h1 = Sheets("Auxiliar Provisorio")

Set h2 = Sheets(" Auxiliar SCT")

    Application.ScreenUpdating = False

    For i = 2 To h1.Range("AG" & Rows.Count).End(xlUp).Row

        If h1.Cells(i, "P") = "SI" Then

            u = h2.Range("P" & Rows.Count).End(xlUp).Row + 1

            h1.Rows(i).Copy

            h2.Range("A" & u).PasteSpecial xlValues

         End If

    Next i

    '

    Application.CutCopyMode = False

    Application.ScreenUpdating = True

        For i = 2 To h1.Range("AG" & Rows.Count).End(xlUp).Row

        If h1.Cells(i, "AG").Value = "SI" And h1.Cells(i, "AI").Value = "" Then

            u2 = h2.Range("AG" & Rows.Count).End(xlUp).Row + 1

            h1.Rows(i).Copy h2.Rows(u2)

            h1.Cells(i, "AI").Value = "copiado"

        End If

    Next

    MsgBox "Registros copiados", vbInformation, "FIN"

End Sub

No entiendo por qué ahora tienes 2 ciclos.

Tampoco entiendo en cuál columna está "Si" y en cuál columna va a se la "Z"

Disculpa mi enredo, estoy tratando de mejorar, no sé casi nada de vba. ahora tengo 1 ciclo, te explico:

el "SI" esta en la columna AG de la hoja "Auxiliar Provisorio". La Z ahora es la columna AI  de la misma hoja (Actualize a mi archivo real).

Necesito que si se cumple la condición "SI" de la hoja "Auxiliar Provisorio", se copien los datos de esa fila (pero sólo desde la columna A a la V) a la hoja "Auxiliar SCT", en la sgte fila vacia que encuentre, (sin volver a copiar los que esten listos), pero desde la fila 6 en adelante que este vacia, porque me los copia en la fila 2 y ahí yo tengo títulos (que con éste código me los reemplaza). Necesito tu ayuda Dante, disculpa las molestias. Gracias.

tengo este código que trate de mejorar: obviamente está malo, no sé qué hacer

Sub Copiar_SI()

    Set h1 = Sheets("Auxiliar Provisorio")

    Set h2 = Sheets("Auxiliar SCT 2")

    Application.CutCopyMode = False

    Application.ScreenUpdating = True

        For i = 2 To h1.Range("AG" & Rows.Count).End(xlUp).Row

        If h1.Cells(i, "AG").Value = "SI" And h1.Cells(i, "AI").Value = "" Then

            u2 = h2.Range("AG" & Rows.Count).End(xlUp).Row + 1

            h1.Rows(i).Copy h2.Rows(u2)

            h1.Cells(i, "AI").Value = "copiado"

        End If

    Next

MsgBox "Registros copiados a Auxiliar SCT", vbInformation, "VERIFICACION OK"

End Sub

Te anexo la macro

Sub Copiar_Fila()
'Por Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Auxiliar Provisorio")
    Set h2 = Sheets("Auxiliar SCT 2")
    '
    For i = 2 To h1.Range("AG" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "AG").Value = "SI" And h1.Cells(i, "AI").Value = "" Then
            u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
            If u2 < 6 Then u2 = 6
            h1.Range("A" & i & ":V" & i).Copy
            h2.Rows(u2).PasteSpecial xlValues
            h1.Cells(i, "AI").Value = "copiado"
        End If
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Registros copiados", vbInformation, "FIN"
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas