Este tutorial le mostrará cómo usar PasteSpecial en VBA para pegar solo ciertas propiedades de celda (ej. Valores, formatos)
En Excel, cuando copia y pega una celda, copia y pega todas las propiedades de la celda: valores, formatos, fórmulas, formato de números, bordes, etc.
En su lugar, puede "Pegar especial" para pegar solo determinadas propiedades de la celda. En Excel, se puede acceder al menú Pegado especial con el atajo CTRL + ALT + V (después de copiar una celda):
Aquí puede ver todas las combinaciones de propiedades de celda que puede pegar.
Si graba una macro mientras usa el menú Pegar especial, simplemente puede usar el código generado. Esta es a menudo la forma más fácil de usar VBA para Pegar Especial.
Pegar valores
Pegar valores solo pega el "valor" de la celda. Si la celda contiene una fórmula, Paste Values pegará el resultado de la fórmula.
Este código copiará y pegará valores para una sola celda en la misma hoja de trabajo:
12 | Rango ("A1"). CopiarRango ("B1"). PasteSpecial Paste: = xlPasteValues |
Copiar y pegar valor en una hoja diferente
Este ejemplo copiará y pegará valores para celdas individuales en diferentes hojas de trabajo
12 | Hojas ("Hoja1"). Rango ("A1"). CopiarHojas ("Hoja2"). Rango ("B1"). PasteSpecial Paste: = xlPasteValues |
Estos ejemplos copiarán y pegarán valores para un rango de celdas:
Copiar y pegar rangos de valor
12 | Rango ("A1: B3"). CopiarRango ("C1"). PasteSpecial Paste: = xlPasteValues |
Copiar y pegar columnas de valor
12 | Columnas ("A"). CopiarColumnas ("B"). PasteSpecial Paste: = xlPasteValues |
Copiar y pegar valores de filas
12 | Filas (1). CopiarFilas (2) .PasteSpecial Paste: = xlPasteValues |
Pegar valores y formatos numéricos
Pegar valores solo pegará el valor de la celda. No se pega ningún formato, incluido el formato de números.
A menudo, cuando pegue valores, probablemente desee incluir también el formato de número para que sus valores permanezcan formateados. Veamos un ejemplo.
Aquí valoraremos pegar una celda que contenga un porcentaje:
12 | Hojas ("Hoja1"). Columnas ("D"). CopiarHojas ("Hoja2"). Columnas ("B"). Pegar Pegado especial: = xlPasteValues |
Observe cómo se pierde el formato del número de porcentaje y, en su lugar, se muestra un valor decimal descuidado.
En su lugar, usemos los formatos Pegar valores y números:
12 | Hojas ("Hoja1"). Columnas ("D"). CopiarHojas ("Hoja2"). Columnas ("B"). PasteSpecial Paste: = xlPasteValuesAndNumberFormats |
Ahora puede ver que el formato de número también se pega, manteniendo el formato de porcentaje.
.Value en lugar de .Paste
En lugar de pegar valores, puede usar la propiedad Value del objeto Range:
Esto establecerá el valor de celda de A2 igual al valor de celda de B2
1 | Rango ("A2"). Valor = Rango ("B2"). Valor |
También puede establecer un rango de celdas igual al valor de una sola celda:
1 | Rango ("A2: C5"). Valor = Rango ("A1"). Valor |
o un rango de celdas igual a otro rango de celdas de tamaño idéntico:
1 | Rango ("B2: D4"). Valor = Rango ("A1: C3"). Valor |
Es menos escribir para usar la propiedad Value. Además, si desea dominar Excel VBA, debe estar familiarizado con el trabajo con la propiedad Value de las celdas.
Valor de celda frente a propiedad Value2
Técnicamente, es mejor usar la propiedad Value2 de una celda. Value2 es un poco más rápido (esto solo importa con cálculos extremadamente grandes) y la propiedad Value puede darle un resultado truncado de la celda con formato de moneda o fecha. Sin embargo, más del 99% del código que he visto usa .Value y no .Value2. Yo personalmente no uso .Value2, pero debe tener en cuenta que existe.
1 | Rango ("A2"). Valor2 = Rango ("B2"). Valor2 |
Copiar pegar constructor
Hemos creado un "Creador de código para copiar y pegar" que facilita la generación de código VBA para copiar (o cortar) y pegar celdas. El constructor es parte de nuestro Complemento de VBA: AutoMacro.
AutoMacro también contiene muchas otras Generadores de código, una extensa Biblioteca de códigoy poderoso Herramientas de codificación.
Pegado especial: formatos y fórmulas
Además de Pegar valores, las opciones de Pegado especial más comunes son Pegar formatos y Pegar fórmulas.
Pegar formatos
Pegar formatos le permite pegar todos los formatos de celda.
12 | Rango ("A1: A10"). CopiarRango ("B1: B10"). PasteSpecial Paste: = xlPasteFormats |
Pegar fórmulas
Pegar fórmulas pegará solo las fórmulas de celda. Esto también es extremadamente útil si desea copiar fórmulas de celda, pero no desea copiar colores de fondo de celda (u otro formato de celda).
12 | Rango ("A1: A10"). CopiarRango ("B1: B10"). PasteSpecial Paste: = xlPasteFormulas |
Pegar fórmulas y formatos numéricos
De manera similar a Pegar valores y formatos numéricos anteriores, también puede copiar y pegar formatos numéricos junto con fórmulas
Aquí copiaremos una fórmula de celda con formato de número de contabilidad y fórmulas de pegado únicamente.
12 | Hojas ("Hoja1"). Rango ("D3"). CopiarHojas ("Hoja2"). Rango ("D3"). PasteSpecial xlPasteFormulas |
Observe cómo se pierde el formato del número y, en su lugar, se muestra un valor no redondeado descuidado.
En su lugar, usemos los formatos Pegar fórmulas y números:
12 | Hojas ("Hoja1"). Rango ("D3"). CopiarHojas ("Hoja2"). Rango ("D3"). PasteSpecial xlPasteFormulasAndNumberFormats |
Ahora puede ver que el formato de número también se pega, manteniendo el formato de contabilidad.
Pegado especial: transponer y omitir espacios en blanco
Pegado especial - Transponer
Paste Special Transpose le permite copiar y pegar celdas cambiando la orientación de arriba a abajo a izquierda-derecha (o viceversa):
12 | Hojas ("Hoja1"). Rango ("A1: A5"). CopiarHojas ("Hoja1"). Rango ("B1"). Pegar Transposición especial: = Verdadero |
Pegado especial - Saltar espacios en blanco
Omitir espacios en blanco es una opción especial de pegado que no parece usarse con tanta frecuencia como debería. Le permite copiar solo celdas que no están en blanco al copiar y pegar. Por tanto, las celdas en blanco no se copian.
En este ejemplo a continuación. Copiaremos la columna A, haremos un pegado regular en la columna B y saltaremos los espacios en blanco pegados en la columna C. Puede ver que las celdas en blanco no se pegaron en la columna C en la imagen a continuación.
123 | Hojas ("Hoja1"). Rango ("A1: A5"). CopiarHojas ("Hoja1"). Rango ("B1"). PasteSpecial SkipBlanks: = FalseHojas ("Hoja1"). Rango ("C1"). PasteSpecial SkipBlanks: = True |
Otras opciones especiales de pegado
Pegar especial - Comentarios
1 | Hojas ("Hoja1"). Rango ("A1"). Copiar hojas ("Hoja1"). Rango ("E1"). PasteSpecial xlPasteComments |
Pegado especial: validación
12 | Hojas ("Hoja1"). Rango ("A1: A4"). CopiarHojas ("Hoja1"). Rango ("B1: B4"). PasteSpecial xlPasteValidation |
Pegado especial: todo con el tema fuente
123 | Libros de trabajo (1) .Hojas ("Hoja1"). Rango ("A1: A2"). CopiarLibros de trabajo (2). Hojas ("Hoja1"). Rango ("A1"). PasteSpecialLibros de trabajo (2). Hojas ("Hoja1"). Rango ("B1"). PasteSpecial xlPasteAllUsingSourceTheme |
Pegado especial: todos excepto los bordes
123 | Rango ("B2: C3"). CopiarRango ("E2"). PasteSpecialRango ("H2"). PasteSpecial xlPasteAllExceptBorders |
PasteSpecial - Anchos de columna
Uno de mis favoritos personales. PasteSpecial Column Widths copiará y pegará el ancho de las columnas.
123 | Rango ("A1: A2"). CopiarRango ("C1"). PasteSpecialRango ("E1"). PasteSpecial xlPasteColumnWidths |
PasteSpecial - Todos los formatos mergingconditional
123 | Rango ("A1: A4"). CopiarRango ("C1"). PasteSpecialRango ("E1"). PasteSpecial xlPasteAllMergingConditionalFormats |