Macro para copiar datos de hoja1 a hoja2 según condicional.

Quisiera copiar datos de la hoja1 a hoja2, en base a condicional.

Quiero copiar filas completas de la hoja1 a la hoja2 (A:K), si es que la columna DE es igual o mayor a 1 (>=1).

Ahora, quisiera poder saber si se pueden quitar estos mismos datos, es decir:Por ejemplo, en la fila 52, el valor de "D52=2", el valor de "C52=5". Si se pasaran los datos de la fila con valor en "D52=2" a la hoja2, entonces debería quedar en la hoja1 un valor de fila en C52=3. Anexo unas imágenes a modo ilustrativo, en caso de ser necesario.

1 Respuesta

Respuesta
3

H o l a:

Te anexo la macro

Sub CopiarDatos()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    j = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
    For i = 2 To h1.Range("D" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "D") >= 1 Then
            h1.Rows(i).Copy
            h2.Rows(j).PasteSpecial xlValues
            h1.Cells(i, "C") = h1.Cells(i, "C") - h1.Cells(i, "D")
            h1.Cells(i, "D") = 0
            j = j + 1
        End If
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "Se copiaron los datos y se ajustaron las cantidades", vbInformation, "COPIAR DATOS"
End Sub

¡Muchísimas gracias! Funciona de maravilla.

Tengo una pequeña duda, la macro no copia la primera fila (A), donde están los datos de referencia como nombre de producto, etc.

¿Qué debería de añadirle al código para que también copiará esos datos?

¡Nuevamente, muchas gracias!

Una ultima pregunta, no se si sea posible pero... Debido a que la hoja es un inventario se actualiza la información con constancia, entonces debo copiar los datos en más de una ocasión, pero al momento de realizar la segunda copia los datos los duplica generando 2 celdas con los mismos nombres pero con datos diferentes.

No se si si puedesé haber una solución a este inconveniente.

¡Gracias!

Saludos

Dante, pido una enorme disculpa por tanto confusión de mi parte.

Primero, hablando sobre el copiado de la primera fila, considero que no es importante el tratar ese asunto. Puesto que la solución ya la encontré.

Ahora. Quisiera anexarte el documento para referenciar mi 2da duda.

Cómo te explicaba, el problema que me surge es al realizar más de 2 copias en el mismo archivo.

Tomando en cuenta el ejemplo que te mandó, podemos hablar sobre el copiado de la fila 3 en la hoja1, si realizo un segundo copiado (actualización) en la segunda hoja se notará un duplicado del producto, pero con "ingresos" diferentes.

Por ejemplo: En el primer "inventario" se contemplan 6 productos totales en "stock"-(Celda C2) y vendidos 3-(Celda D2) (Realizó la copia y actualización)

Entonces se motrarán 3 productos en "stock" en la hoja1, si se vendieran otros 3 productos, al realizar la 2da copia, en la hoja2 aparecería un duplicado.

Bien podría descartarse en la hoja2 la columna C, pero lo que me interesa sería la sumatoria de los demás campos. Eh pensado en hacer uso de tablas dinámica, pero como la hoja1 recibe cambios constantes, las tablas dinámicas no se actualizarían en la hoja2.

https://onedrive.live.com/edit.aspx?cid=f7cd112991deaf52&page=view&resid=F7CD112991DEAF52!107&parId=F7CD112991DEAF52!105app=Excel

Espero no generar demasiadas molestias.

¡Gracias!

PD. El archivo lo adjunte con Onedrive... si deseas, lo puedes ver online.

Mejor envíame tu archivo por correo, explícame en una cómo están tus datos, en la hoja2 cómo los pone la macro y en la hoja3 cómo es el resultado que esperas.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “OMG Yannis” y el título de esta pregunta.

¡Listo!

Acabó de enviarte el archivo.

¡Gracias!

Saludos!

Te anexo la macro actualizada.

Sub CopiarDatos()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Hoja2")
    '
    For i = 2 To h1.Range("D" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "D") >= 1 Then
            Set b = h2.Columns("B").Find(h1.Cells(i, "B"), lookat:=xlWhole)
            If Not b Is Nothing Then
                h2.Cells(b.Row, "D") = h2.Cells(b.Row, "D") + h1.Cells(i, "D")
            Else
                h1.Rows(i).Copy
                j = h2.Range("D" & Rows.Count).End(xlUp).Row + 1
                h2.Rows(j).PasteSpecial xlValues
            End If
            h1.Cells(i, "C") = h1.Cells(i, "C") - h1.Cells(i, "D")
            h1.Cells(i, "D") = 0
        End If
    Next
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    MsgBox "Se copiaron los datos y se ajustaron las cantidades", vbInformation, "COPIAR DATOS"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas