Quiero copiar una fila entera en otra hoja si se cumplen 3 condiciones. MACRO

Estoy necesitando algún macro que me copie las filas de la hoja1 a la hoja2 que cumplan 3 condiciones: que en la columna B tengan un valor 1, en la columna M también tenga el valor 1 y que la fecha que esta en la columna C sea mayor al 23/1/2017 (si es posible que la fecha se pueda modificar aplicándola desde por ejemplo A1 de la hoja2 mejor, sino no hay problema).

Unicamente que las copie si las 3 condiciones se cumplen simultáneamente.

Agradezco eternamente! Me vuelvo loco para facturar lo que cobro, me vendría de 10 esta ayuda.

2 Respuestas

Respuesta
1

Puedes mostrar una imagen de la hoja para adecuar el código.

Necesito por ejemplo la fila empieza tus datos de la hoja1, también la fila para copiar en la hoja2, ¿por último irá incrementando tus registros en la hoja2?

hola, gracias por tu respuesta! 

 ese es el principio de la planilla.

no, no ira incrementando, yo a fin de mes lo que quiero hacer con este macro es que todas las ventas que cumplan estas 3 condiciones se copien en esa planilla, y luego editar el macro para otras 3 condiciones y que aparezcan las filas que cumplen estas 3 nuevas condiciones, las que no lo cumplen (es decir las primeras que me aparecieron) quiero que no aparezcan.

cualquier otra consulta avisame, disculpas por no haberlo expresado en un principio. saludos

H o l a 

la condiciones lo digitas en A1, A2, A3 de la hoja2

Sub Copiar_Filas()
'Act. por Aortiz
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Rows("4:" & Rows.Count).ClearContents
    '
    cond1 = h2.[A1] ' condición B
    fecha = h2.[A3] ' condición C
    cond2 = h2.[A2] ' condición M
    j = 4
    For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "B") = Val(cond1) And _
           h1.Cells(i, "M") = Val(cond2) And _
           h1.Cells(i, "C") > fecha Then
            h1.Rows(i).Copy h2.Rows(j)
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub
Respuesta
2

H o l a: Te anexo la macro, con lo siguiente.

  • En la hoja2 en la celda A1 tienes que poner la fecha
  • Cada que ejecutes la macro, se limpiará la hoja2 a partir de la fila 2 y se pondrán los nuevos registros.
  • La macro iniciará a revisar los registros de la hoja1 a partir de la fila 2.
  • Cambiar en la macro "Hoja1" y "Hoja2" por los nombres de tus hojas.

Sub Copiar_Filas()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Rows("2:" & Rows.Count).ClearContents
    '
    fecha = h2.[A1]
    j = 2
    For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "B") = 1 And _
           h1.Cells(i, "M") = 1 And _
           h1.Cells(i, "C") > fecha Then
            h1.Rows(i).Copy h2.Rows(j)
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

EXCELENTE! funciona a la perfeccion! te agradezco mucho por tu ayuda.

te molesto con 1 problemita, te comento, en la Columna D (Codigo interno) tengo un =si que de acuerdo al codigo del producto suma +1 al anterior codigo interno distinto de 0, o le pone 0, y cuando copio con el macro a la hoja2, el codigo interno no se copia, me tira un REF!

adjunto imagenes tanto de la hoja desde la que copio las filas (   ) como a la Hoja2 donde llegan las filas (   ).

te agradezco, ya pude valorar la ayuda anterior.

el =si del que te hablo, por ejemplo en la celda D665 es: =SI(Y(F665>0;F665<20);SI(D664>0;D664+1;SI(D663>0;D663+1;SI(D662>0;D662+1;D661+1)));0)

Puede ser por el número de fila, prueba con lo siguiente:

Sub Copiar_Filas()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Rows("4:" & Rows.Count).ClearContents
    '
    fecha = h2.[A1]
    j = 4
    For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "B") = 1 And _
           h1.Cells(i, "M") = 1 And _
           h1.Cells(i, "C") > fecha Then
            h1.Rows(i).Copy h2.Rows(j)
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

O tal vez te valdría copiar como valor, prueba con esto:

Sub Copiar_Filas()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    h2.Rows("2:" & Rows.Count).ClearContents
    '
    fecha = h2.[A1]
    j = 4
    For i = 4 To h1.Range("B" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "B") = 1 And _
           h1.Cells(i, "M") = 1 And _
           h1.Cells(i, "C") > fecha Then
            h1.Rows(i).Copy 
            h2.Range("A" & j).pastespecial xlvalues
            j = j + 1
        End If
    Next
    MsgBox "Fin"
End Sub

sal u dos

Gracias! Con la 2da opción funciona, pero separadamente de que fecha elija, me tira las primeras 3 filas bien y las siguientes con la fecha mal y sin formato.

¿Qué puede ser? Gracias por ser tan paciente.

adjunto imagen:  

Cambia esta

H2.Rows("2:" & Rows. Count). ClearContents

por esta

H2.Rows("4:" & Rows. Count). ClearContents

Y en cuanto a la fecha, simplemente cambia el formato de columna al formato de fecha que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas