¿Cómo copiar filas que cumplan una condición de una hoja a otra?

Tengo una pequeña duda que creo que es fácil de resolver, pero en mi caso aún no controlo lo suficiente de macros para desarrollarla.

Mi problema es el siguiente. Tengo una hoja (Llamada General) con un montón de datos que quiero filtrar en una segunda hoja (Hoja2), pero solo cuando cuando en una de las columnas se cumpla que el valor sea 1.

El problema además es que no quiero que me copie la fila tal cual, ya que las dos hojas tienen campos distintos. Hoja2 se alimenta por completo de General, pero las columnas están en otro orden y en algunas de ellas no se copian los datos tal cual, sino a través de fórmulas.

En caso de que sea necesario puedo subir un archivo para verlo mejor.

4 respuestas

Respuesta
2

Te anexo la macro con ejemplos y la explicación para que puedas adaptarla a tus hojas.

Sub copiar()
'Por.DAM
    'nombres de hojas
    Set h1 = Sheets("General")
    Set h2 = Sheets("Hoja2")
    'columna para verificar si tiene un 1
    col = "D"
    'última fila con datos de la hoja2
    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
            'Pasar datos a la hoja2,
            'del lado izquierdo pon la columna destino
            'del lado derecho pon la columna origen
            'Por ejemplo si la hoja2 la columna B recibe la columna D
            h2.Range("B" & u) = h1.Range("D" & i)
            'Por ejemplo si la hoja2 la columna A recibe la columna E
            h2.Range("A" & u) = h1.Range("E" & i)
            'Por ejemplo si la hoja2 la columna C recibe la columna M
            h2.Range("C" & u) = h1.Range("M" & i)
            u = u + 1
        End If
    Next
End Sub

Si tienes algún comentario no dudes en contactarme.

Gracias por la ayuda. Lo único que no me ha quedado claro en esa macro es el tema sobre donde indicar la última fila con datos de la Hoja 2.

No se si te has querido referir a Columna en vez de a Fila o simplemente yo no te he entendido (lo más probable), pero precisamente el tema es que yo no se en qué fila acabarán los datos una vez la macro funcione, ya que los datos irán cambiando y las filas aumentarán o disminuirán (las columnas no).
Ahora mismo tengo la macro de esta manera:

Sub copiar()
    Set h1 = Sheets("General")
    Set h2 = Sheets("Hoja2")
        col = "K"
    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("A" & u) = h1.Range("A" & i)
            h2.Range("B" & u) = h1.Range("B" & i)
            h2.Range("E" & u) = h1.Range("E" & i)
            h2.Range("J" & u) = h1.Range("G" & i)
            h2.Range("H" & u) = h1.Range("C" & i)
            h2.Range("K" & u) = h1.Range("D" & i)
            h2.Range("L" & u) = h1.Range("M" & i)
            h2.Range("N" & u) = h1.Range("K" & i)
            h2.Range("Q" & u) = h1.Range("N" & i)
            h2.Range("AX" & u) = h1.Range("W" & i)
            h2.Range("AY" & u) = h1.Range("X" & i)
            h2.Range("AZ" & u) = h1.Range("Y" & i)
            h2.Range("BH" & u) = h1.Range("O" & i)
            h2.Range("BI" & u) = h1.Range("P" & i)
            h2.Range("BJ" & u) = h1.Range("Q" & i)
            h2.Range("BK" & u) = h1.Range("R" & i)
            h2.Range("BL" & u) = h1.Range("S" & i)
            h2.Range("BM" & u) = h1.Range("T" & i)
            h2.Range("BN" & u) = h1.Range("U" & i)
            h2.Range("FK" & u) = h1.Range("F" & i)
            u = u + 1
        End If
    Next
End Sub


¿Qué me quedaría modificar?
Muchas gracias.

Ya no tienes que modificar nada. Tu macro ya está completa.

Lo que hago con esta instrucción, es ubicar la última celda disponible de tu hoja2 para que en esa fila se empiecen a pegar los resultados

u = h2. UsedRange. Rows(h2. UsedRange. Rows. Count). Row + 1

Ya pudiste probar la macro. Si te funciona la solución no olvides valorar la respuesta.

La he probado, pero en cuanto la ejecuto se me bloquea excel. Abajo a al derecha me aparece "Calculando" y así puede quedarse una hora o el tiempo que sea hasta que yo lo cierre por la fuerza.

Cuántas filas tienes en tu hoja "General".

Revisa que en la columna "K" no tengas algún dato muy abajo, revisa que después de tu último dato existan puros blancos, para revisarlo, pon tu cursor en la última celda de la columna "K" con datos, por ejemplo la celda "K567", ahora presiona la tecla Fin y después presiona la flecha hacia abajo revisa que el cursor se detenga hasta el final de tu hoja, si se detiene antes significa que tienes algún dato o algún espacio en esa celda, borra todos esos datos o espacios hasta que compruebes que el cursor llega al final de tu hoja y ejecuta nuevamente la macro.

Si sigues con problemas envíame tu archivo para revisarlo.

Respuesta
1

Puedes mándame tu archivo con un ejemplo manual de lo que quieres para ayudarte mejor

[email protected]

Respuesta

Usando este mismo caso como se haría la macro para rescatar valores mayores a 1.

Respuesta

Para otros números debes modificar la cantidad que aparece marcada con rojo

If h1.Cells(i, col) = 1 Then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas