miércoles, 29 de marzo de 2017

Macro para copiar columna

Descargar el ejemplo

Usualmente en Excel no se trabaja en términos de columnas. La mayoría de las plantilllas se elaboran pensando en ampliar el rango de datos en términos de filas. Comparto decididamente esta premisa, especialmente porque una hoja tiene más filas que columnas, exactamante 1048576 filas * 16384 columnas (Office 2013). Pero cuando es inevitable ampliar nuestro número de columnas, nada mejor que hacerlo automáticamente mediante un código de VBA.

En el presente ejemplo se pretende copiar la última columna con datos y pegarla en una columna subsiguiente para ir ampliando el rango paulatinamente. En el modelo de datos que se presenta, se copió la columna J y se pegó en la columna K.

Quiero agradecer al experto "GREGORI00001" de todoexpertos, quien desinteresadamente me dio una mano para terminar el código que implemente en otra plantilla y que da vida a la presente nota.

Aquí el modelo de datos:














El código es el siguiente:
Sub copiar()
Dim Col As Integer
Col = ActiveSheet.Range("XFD1").End(xlToLeft).Column
ActiveCell.Offset(0, -1).Select
Selection.EntireColumn.Insert
ActiveCell.Offset(0, -1).Select
ActiveCell.EntireColumn.Select
Selection.Copy
ActiveCell.Offset(0, 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.Offset(2, 0).Select
End Sub
Explicando paso a paso:

1. Col = ActiveSheet.Range("XFD1").End(xlToLeft).Column, recorre la fila uno desde la última columna hasta la primera columna donde encuentre dato.

2. ActiveCell.Offset(0, -1).Select, se posiciona una columna hacia la izquierda respecto de la primera columna con dato que encuentra.

3. Selection.EntireColumn.Insert, Inserta una columna en columna activa.

4. ActiveCell.Offset(0, -1).Select, se posiciona una columna hacia la izquierda respecto de la columna insertada, que es la columna con datos que requiero copiar.

5. ActiveCell.EntireColumn.Select
    Selection.Copy
Selecciona y copia la columna activa.

6. ActiveCell.Offset(0, 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Se posiciona una columna hacia la derecha respecto de la posición de la columna copiada y,  deshabilita el modo copiar.

7.     ActiveCell.Offset(2, 0).Select
Finalmente, se posiciona dos filas debajo de la fila activa. 


No hay comentarios.:

Publicar un comentario