Cómo copiar determinadas columnas, sin encabezados, de todas las hojas de un libro a otro libro diferente.

Para realizar mi proyecto necesito copiar diferentes columnas de todas las hojas del libro ABC a la hoja RESUMEN, que se encuentra en el libro XYZ.

Las columnas que he de copiar no son siempre las mismas en cada una de las hojas. Por ejemplo en la hoja 1 se copiarán las columnas B, C, H, I, J, M; en la hojas2 se copiarán las columnas A, B, G, H, R; en la hoja3 se copiarán las columnas B, C, F, H, J… y así en el resto de hojas del libro ABC. No se copiarán los encabezamientos que se encuentran en la fila 1.

Como llevo varios días buscando soluciones y no sé cómo resolverlo, acudo a vds. Para solicitar su inestimable ayuda.

Respuesta
1

Está claro qué quieres copiar y de dónde lo quieres copiar.

Lo que no explicaste es en dónde exactamente lo quieres pegar.

Entiendo que lo quieres pegar en el libro "xyz", en la hoja "resumen", pero no explicaste en cuáles columnas ni en cuáles filas.

Por ejemplo, quieres copiar de "abc", "hoja1", "B, C, H, I, J, M", en dónde quieres la columna B, en dónde la C, etc.

Luego quieres copiar "abc", "hoja2", "A, B, G, H, R", en dónde quieras la columna A, ¿la quieres a la derecha de la última columna de la hoja1?

Suponiendo que quieres "B, C, H, I, J, M", en las columnas A, B, C, D, E, F y después en la columna H quieres iniciar con el siguiente grupo de columnas, entonces te anexo la macro:

Instrucciones:

  • Los libros "abc.xlsx" y "xyz.xlsx" deberán estar abiertos.
  • En un tercer libro deberás poner la macro.
  • En este tercer libro debes crear una hoja con el nombre parámetros
  • La hoja parámetros la debes llenar de la siguiente forma:

La macro:

Sub Copiar_Columnas()
'Por Dante Amor
    'copia columnas de libro origien a libro destino
    '
    Set l0 = ThisWorkbook
    Set h0 = l0.Sheets("parametros")    'hoja con parametros de hoja y columnas
    Set l1 = Workbooks("ABC.xlsx")      'libro origen
    Set l2 = Workbooks("XYZ.xlsx")      'libro destino
    Set h2 = l2.Sheets("RESUMEN")       'hoja destino
    '
    h2.Cells.ClearContents
    k = 1
    For i = 2 To h0.Range("A" & Rows.Count).End(xlUp).Row
        hoja = h0.Cells(i, "A").Value
        cols = Split(h0.Cells(i, "B").Value, ",")
        For j = LBound(cols) To UBound(cols)
            col = WorksheetFunction.Trim(cols(j))
            u = l1.Sheets(hoja).Range(col & Rows.Count).End(xlUp).Row
            l1.Sheets(hoja).Range(col & "2:" & col & u).Copy
            h2.Cells(1, k).PasteSpecial xlValues
            k = k + 1
        Next
    Next
    MsgBox "Fin"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Muchas gracias Dante Amor por tu respuesta. Quizás no completé bien mi pregunta. Las columnas a copiar de la hoja1 del libro ABC, se pegarán en la B2 del libro XYZ. Las columnas a copiar de la hoja2 del libro ABC, se pegarán también en la colmuna B del libro XYZ, a continuación de la última fila pegada. Y así para el resto de hojas. No pasa nada que el número de columnas a copiar sea diferentes. Se pegarán todas unas a continuación de las otras, porque pertenecen al mismo concepto.

Un cordial saludo

Podrías ser más gráfico de cómo se van a pegar.

Por ejemplo, quieres copiar de "abc", "hoja1", "B, C, H, I, J, M", en dónde quieres la columna B, en dónde la C, etc.

Luego quieres copiar "abc", "hoja2", "A, B, G, H, R", en dónde quieras la columna A, ¿la quieres a la derecha de la última columna de la hoja1?

Tienes que poner el ejemplo completo

Llevas razón, a veces me precipito y doy por supuesto algunas cosas que no son tan evidentes. Le he puesto un ejemplo de dos hojas y unas columnas. Habrás más hojas y las columnas pueden variar también.

Saludos y gracias

Te anexo la macro

Sub Copiar_Columnas()
'Por Dante Amor
    'copia columnas de libro origien a libro destino
    '
    Application.ScreenUpdating = False
    Set l0 = ThisWorkbook
    Set h0 = l0.Sheets("parametros")    'hoja con parametros de hoja y columnas
    Set l1 = Workbooks("ABC.xlsx")      'libro origen
    Set l2 = Workbooks("XYZ.xlsx")      'libro destino
    Set h2 = l2.Sheets("RESUMEN")       'hoja destino
    '
    h2.Cells.ClearContents
    For i = 2 To h0.Range("A" & Rows.Count).End(xlUp).Row
        hoja = h0.Cells(i, "A").Value
        cols = Split(h0.Cells(i, "B").Value, ",")
        u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
        k = 1
        For j = LBound(cols) To UBound(cols)
            col = WorksheetFunction.Trim(cols(j))
            u = l1.Sheets(hoja).Range(col & Rows.Count).End(xlUp).Row
            l1.Sheets(hoja).Range(col & "2:" & col & u).Copy
            h2.Cells(u2, k).PasteSpecial xlValues
            k = k + 1
        Next
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas