Macro para seleccionar datos de una hoja y pegarlos en otras hojas del mismo libro

Tengo un libro de excel con 28 hojas.

La hoja 1 es un catálogo de productos y de la hoja 2 a la 28 son formatos.

En la hoja 1, filas A, C, E, G, I, K, M, O, Q, S, U, W, Y, AA, AC, AE, AG, AI, AK, AM, AO, AQ, AS, AU, AW, AY, BA y BC tengo Códigos de productos.

Y en las filas B, D, F, H, J, L, N, P, R, T, V, X, Z, AB, AD, AF, AH, AJ, AL AN, AP, AR, AT, AV, AX AZ, BB, BD tengo las cantidades en existencia de los códigos correspondientes, por ejemplo:

COLUMNA A COLUMNA B COLUMNA C COLUMNA D…

Codigo1 4 Codigo3 10

Codigo2 0 Codigo2 25

Codigo4 80 Codigo5 0

Esto se repite para las columnas antes descritas.

Lo que necesito es pasar esos datos a los diferentes formatos (que tienen la misma estructura pero encabezados diferentes)

Las columnas A y B del catálogo corresponden al formato de la hoja 2.

Las columnas C y D del catálogo corresponden al formato de la hoja 3.

Las columnas E y F del catálogo corresponden al formato de la hoja 4.

Y así sucesivamente.

Ahora lo que busco es solo pasar aquellos códigos cuya cantidad sea mayor a 0.

Entonces mis formatos quedarían:

Hoja2:

Columna a columna b

Codigo 1 4

Codigo4 80

Hoja3:

Columna a columna b

Codigo3 10

Codigo2 25

El número de filas es variable

¿Alguna idea para lograr esto?

En la columna A de mis formatos no puedo poner fórmulas por el tipo de uso que le voy a dar.

Traté de usar lo descrito aquí por @aprendemos

Macro que vea si se cumple una condición y copie otra celda de la fila, si no que baje y re-evalúe

Pero me deja filas en blanco y no sé cómo hacer para que queden todos los códigos seguidos y tampoco sé cómo podría recorrer todas las columnas y copiar en todos los formatos.

Agradezco su ayuda para mi idea o la sugerencia de otras para facilitar esto.

1 respuesta

Respuesta
1

H o l a:

Te anexo la macro, no mencionaste en cuál fila empiezan los códigos, la macro empieza a leer códigos desde la fila 1. Si tienes encabezados, y los códigos empiezan en otra fila, entonces debes cambiar el 1 en esta línea de la macro por el número de fila en la que empiezan los códigos:

For i = 1 To h1.Cells(Rows.Count, j).End(xlUp).Row


Sub SeleccionarCodigos()
'Por.Dante Amor
    Set h1 = Sheets(1)
    h = 2
    For j = 1 To h1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2
        For i = 1 To h1.Cells(Rows.Count, j).End(xlUp).Row
            If Cells(i, j + 1) <> 0 Then
                Set h2 = Sheets(h)
                u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                h2.Cells(u, "A") = h1.Cells(i, j)
                h2.Cells(u, "B") = h1.Cells(i, j + 1)
            End If
        Next
        h = h + 1
    Next
    MsgBox "Proceso terminado"
End Sub

Muchas gracias por la respuesta, aunque cometí un gran error :(

Al redactar la pregunta puse Hoja2, Hoja3, Hoja4 etc. y el código funciona perfectamente para lo que pedí, pero en realidad mis hojas tienen nombres diferentes como Estacionamiento, Escuela, Torre, Edificio...

Los códigos empiezan en A2 y deben pegarse o copiarse a partir de A11 de las demás hojas.

No importa cómo se llamen las hojas, lo importante es que la hoja de catálogo de productos esté en la primera posición de todas las hojas, y las demás hojas, estén desde la 2 hasta la 28.

Actualicé la macro para que lea desde la fila 2 y actualice en las demás hojas en la fila 11.

Sub SeleccionarCodigos()
'Por.Dante Amor
    Set h1 = Sheets(1)
    h = 2
    For j = 1 To h1.Cells(1, Columns.Count).End(xlToLeft).Column Step 2
        For i = 2 To h1.Cells(Rows.Count, j).End(xlUp).Row
            If h1.Cells(i, j + 1) <> 0 Then
                Set h2 = Sheets(h)
                u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
                If u < 11 Then u = 11
                h2.Cells(u, "A") = h1.Cells(i, j)
                h2.Cells(u, "B") = h1.Cells(i, j + 1)
            End If
        Next
        h = h + 1
    Next
    MsgBox "Proceso terminado"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas