Macro para copiar datos de una hoja a otra en Excel

Cuando necesitas copiar celdas de una hoja a otra en Excel existe la opción de copiar los datos mediante fórmulas, sin embargo dicho método hace un uso extensivo de funciones y además es necesario agregar una hoja intermedia para remover los datos no deseados.

Hoy crearemos una macro para copiar datos de una hoja a otra y podrás ver que este método es mucho más directo y además deja nuestras hojas sin tantas fórmulas. Al desarrollar esta macro nos aseguraremos de que se pueda copiar un rango completo de celdas o que se puedan copiar solamente las celdas visibles después de haber aplicado un filtro. Para nuestro ejemplo trabajaremos con los siguientes datos:

Macro para copiar datos de una hoja a otra en Excel

Declarar e inicializar objetos

Comenzaré por agregar un módulo de código y definir la subrutina CopiarCeldas que será la encargada de realizar la copia de los datos y que contendrá los objetos necesarios para referenciar las hojas de origen y destino así como los rangos de celdas correspondientes.  De hecho, para la técnica utilizada en esta macro, solo será necesario indicar la esquina superior izquierda del rango que deseamos copiar.

Macro para copiar datos de una hoja a otra

Al momento de personalizar esta macro para copiar tus propios datos, deberás realizar las siguientes configuraciones:

  • Configurar los objetos wsOrigen y wsDestino con el nombre de la hoja que contiene los datos originales y la hoja hacia la cual serán copiados.
  • Configurar la constante celdaOrigen con la referencia de celda ubicada en la esquina superior izquierda del rango de celdas que será copiado. La macro detectará y copiará automáticamente las columnas y filas adyacentes.
  • Configurar la constante celdaDestino con la referencia de celda en donde se comenzará a pegar el rango copiado.

Las últimas dos instrucciones del código mostrado anteriormente inicializan las variables rngOrigen y rngDestino con la información de los objetos previamente configurados.

Copiar y pegar datos con VBA

Después de haber definido los objetos a utilizar solo nos restará copiar las celdas de la hoja origen y pegarlas en la hoja destino.

Copiar de forma rápida de una hoja a otra con una macro en Excel

La primera línea hace la selección de la celda origen, que es la esquina superior izquierda del rango de datos original. En seguida se aumenta la selección hacia abajo (xlDown), hasta la última fila adyacente y posteriormente hacia la derecha (xlToRight). Pronto verás que esta técnica de selección de celdas será útil para copiar las celdas visibles.

Finalmente se llama el método Copy y en seguida el método PasteSpecial sobre el rango destino. El parámetro xlPasteValues pega solamente los valores, pero si quieres pegar inclusive el formato de las celdas, entonces deberás utilizar el parámetro xlPasteAll.

Macro para copiar datos en Excel

Ahora que ya tienes una idea clara de las instrucciones utilizadas en la elaboración de esta macro, te dejo el código completo de la subrutina CopiarCeldas:

Sub CopiarCeldas()

'Definir objetos a utilizar
Dim wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
rngDestino As Excel.Range

'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Origen")
Set wsDestino = Worksheets("Destino")

'Indicar la celda de origen y destino
Const celdaOrigen = "A1"
Const celdaDestino = "A1"

'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)

'Seleccionar rango de celdas origen
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues
Application.CutCopyMode = False

End Sub

Copiar datos de una hoja a otra

Para probar nuestra macro recién creada insertaré un botón de formulario en la hoja que contiene los datos originales y al momento de que Excel muestre el cuadro de diálogo Asignar macro seleccionaré la subrutina CopiarCeldas. Como resultado tendremos un botón que nos permitirá copiar datos de una hoja a otra en Excel.

Cómo pasar datos de una hoja a otra en Excel

Para nuestra primera prueba dejaré el código de la macro tal como fue desarrollado, es decir con la celdaOrigen haciendo referencia a la celda A1 y lo mismo para la celdaDestino. Al pulsar el botón copiar, la hoja Destino de nuestro libro se verá de la siguiente manera:

Macro para copiar datos de una tabla a otra hoja de Excel

Los datos se han copiado correctamente de la hoja Origen a la hoja Destino. Las celdas no tienen formato porque la instrucción VBA que usamos para pegar hace uso del parámetro xlPasteValues.

Copiar celdas visibles

Para el segundo ejemplo haremos los siguientes ajustes. Primero borraré los datos de la hoja Destino. Después aplicaré un filtro a la columna Categoría en los datos de la hoja Origen.

Cómo copiar celdas de una hoja a otra en Excel

Finalmente editaré la macro (línea 28) para cambiar el parámetro xlPasteValues por el parámetro xlPasteAll de la siguiente manera:

rngDestino.PasteSpecial xlPasteAll

Con estos ajustes realizados, pulsaremos el botón Copiar ubicado en la hoja Origen y obtendremos el siguiente resultado en la hoja Destino:

Cómo copiar rangos o celdas en Excel con una macro

En esta ocasión se han copiado solamente las celdas visibles y además tienen el mismo formato que las celdas originales.

Ahora descarga el libro de trabajo y comienza a utilizar la macro para copiar datos de una hoja a otra en Excel. Solo recuerda que debes configurar cada una de las variables en el código VBA de acuerdo al nombre de las hojas de tu libro e indicar las referencias a las celdas de origen y destino.

Artículos relacionados
Cómo copiar y pegar celdas con VBA