Macro para copiar columnas

Hola Dam,

estoy utilizando esta macro que me enviaste que lee los títulos que tengo en la columna A de una hoja llamada "columnas", los busca en mi hoja de datos y los copia una hoja nueva.

Sub copiadatos()
'Por.Dam
'para crear una hoja nueva
Set actual = Sheets("columnas")
Set datos = Sheets("hoja de datos")
Sheets.Add
hnueva = ActiveSheet.Name
Set destino = Sheets(hnueva)
actual.Select
ufila = Range("A" & Rows.Count).End(xlUp).Row
ucol = 1
For i = 2 To ufila
wcol = Application.Match(Cells(i, 1), _
datos.Range("1:1"), 0)
datos.Columns(wcol).Copy _
Destination:=destino.Cells(1, ucol)
ucol = destino.Range("A1").SpecialCells(xlLastCell).Column + 1
Next
End Sub

Me funciona perfectamente, pero he visto que, en algunos casos, el número de columnas no es siempre igual, y si llama a una columna que no existe, da error.

He intentado modificar el código para tener cinco macros (son cinco grupo de datos, cada uno con un número variable de columnas). Necesitaría tener, en la hoja "columnas", un grupo de títulos de columnas en la columna A, otro grupo en la columna B, otro en la C, D y E. Asi, si da error, puedo identificarlo más fácilmente. Es decir:

Columna A

1 respuesta

Respuesta
1

Primero, en la hoja que te envié, hay un aviso que dice: "Los nombres de las columnas deberán escribirse exactamente como aparecen en el archivo de datos"

No sería más fácil, en lugar de tener grupos, ¿te digo cuál nombre de columna no existe en la hoja de datos?

Todos los nombres los puedes poner en la misma columna A y ponerle un color a cada grupo, así, si en futuro tienes 20 grupos, no necesitarás modificar la macro o crear 20 macros, sólo tienes que identificar tus grupos con un color o en la columna B, puedes agregar el nombre del grupo, así

A B
1 Nombres Grupos
2 Cargos grupo-contabilidad
3 Abonos grupo-contabilidad
4 Saldo grupo-contabilidad
5 mesas grupo-mobiliario
6 sillas grupo-mobiliario
7 cama grupo-mobiliario
8 cuchara grupo-cocina
9 tenedor grupo-cocina

Bueno eso se me ocurre, pero tú decides cómo nos complicamos la vida, como dice la frase: "Para que hacerlo fácil si lo puedes hacer difícil" por. Dam

es mucho más fácil como dices, diciendo qué nombre de la columna no existe y poniendo un color a cada grupo. Así en la hoja nueva ya los tendría identificados por grupos con los colores, les añado una cabecera con el nombre del grupo y listo.

Gracias Dam, me parece perfecto para lo que necesito

Te cambio la macro.

En la hoja columnas, tienes que poner el color de tu preferencia a cada nombre de reporte, la macro tomará este color que tú pusiste y se lo pondrá a la columna copiada en la hoja nueva.

Sub copiacol()
'Por.Dam
'Copia columnas en una hoja nueva y les pone color
Set actual = Sheets("columnas")
Set datos = Sheets("hoja de datos")
Sheets.Add
hnueva = ActiveSheet.Name
Set destino = Sheets(hnueva)
actual.Select
ufila = Range("A" & Rows.Count).End(xlUp).Row
ucol = 1
On Error Resume Next
For i = 2 To ufila
    wcol = Application.Match(Cells(i, 1), _
            datos.Range("1:1"), 0)
    wcolor = actual.Cells(i, 1).Interior.ColorIndex
    If IsNumeric(wcol) Then
        datos.Columns(wcol).Copy _
        Destination:=destino.Cells(1, ucol)
        destino.Cells(1, ucol).Interior.ColorIndex = wcolor
        ucol = destino.Range("A1").SpecialCells(xlLastCell).Column + 1
        actual.Cells(i, 3) = "Copiada"
    Else
        actual.Cells(i, 3) = "Error, nombre no existe: " & Cells(i, 1)
    End If
Next
End Sub

Saludos.Dam
Podrías

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas