Copiar y pegar valores en Excel es una tarea muy común por lo que será casi inevitable que en algún momento necesites hacer un copiado y pegado de celdas dentro de una macro. Para copiar y pegar celdas con VBA haremos uso de los métodos Copy y PasteSpecial del objeto Range.
Copiar y pegar celdas en la misma hoja
Si los valores serán pegados dentro de la misma hoja, entonces puedes utilizar un código como el siguiente:
Este código copiara el contenido de la celda A1 y lo pegará en la celda B1. El argumento xlPasteAll ocasiona que se pegue todo el contenido en la celda B1incluyendo el formato de la celda y las fórmulas. Finalmente la instrucción Application.CutCopyMode = False hace que Excel de por finalizada la acción de copiado y pegado.
Copiar y pegar los valores de una celda con VBA
Si en lugar de copiar todo el contenido de una celda deseas copiar solamente los valores, entonces debes hacer una pequeña modificación en el argumento del método PasteSpecial de la siguiente manera:
Observa que ahora el argumento utilizado es xlPasteValues el cual ocasionará que se peguen solamente los valores de las celdas copiadas.
Copiar y pegar una fila o columna con VBA
Es posible copiar y pegar columnas con VBA si modificamos el rango indicado en el método Range. Por ejemplo, para copiar la columna A en la columna B utiliza el siguiente código:
Si en lugar de copiar la columna A, necesitas copiar la fila 1 y pegarla en la fila 2, entonces puedes usar el siguiente código:
Copiar y pegar a otra hoja
Para pegar los valores a una hoja diferente, solamente debemos especificar la hoja destino haciendo uso del objeto Worksheets de la siguiente manera:
Ahora bien, si tanto la hoja origen como la hoja destino son diferentes a la hoja activa, entonces será necesario indicar el nombre de la hoja tanto al momento de copiar como al momento de pegar. En el siguiente código estoy suponiendo que el botón que ejecuta la macro se encuentra en la Hoja1 y copiaré todo el contenido de la celda A1 de la Hoja2 hacia la celda B1 de la Hoja3:
Método abreviado para copiar celdas con VBA
En todos los ejemplos anteriores he utilizado el método PasteSpecial para pegar los valores en las celdas destino. Una ventaja de ese método es que puedo elegir si deseo copiar el contenido completo de la celda (xlPasteAll) o solo sus valores (xlPasteValues) sin embargo existe otro método alterno en caso de querer copiar siempre todo el contenido de una celda. Observa el siguiente código:
Este código copia todo el contenido de la celda A1 (incluyendo fórmulas y formato) a la celda B1 de la misma hoja. El argumento Destination es el que nos permite especificar el rango en el cual se pegarán los valores. A continuación puedes observar, en el mismo bloque de código, diferentes ejemplos utilizando este mismo método abreviado para copiar celdas con VBA:
Como has visto en los ejemplos de este artículo, el primer método que utilizamos nos ofrece una gran flexibilidad a través del método PasteSpecial el cual nos permite elegir si deseamos pegar todo el contenido de una celda o solo sus valores. Pero si estás seguro de querer copiar siempre todo el contenido de las celdas, entonces el método abreviado, utilizando el argumento Destination del método Copy, será suficiente para lograr nuestro objetivo.
Ahora ya sabes cómo copiar y pegar celdas con VBA y solo es cuestión de que elijas el método adecuado a tus necesidades.