🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Paste Values en Excel — congela fórmulas en sus resultados de la forma correcta

|

VBA Paste Values en Excel — congela fórmulas en sus resultados de la forma correcta

TL;DR — Pegar valores sustituye una fórmula viva por el número que muestra en ese momento. Ese número queda entonces por su cuenta: puedes borrar las celdas a las que hacía referencia, el libro deja de recalcularlo, y los vínculos externos se callan. La receta con portapapeles es .Copy y luego PasteSpecial Paste:=xlPasteValues — pero el xlPasteValues a secas descarta el formato de número, así que las fechas vuelven como series tipo 45000. Usa xlPasteValuesAndNumberFormats cuando la visualización importe, y para una congelación simple sin portapapeles alguno, dst.Value = src.Value.

' Congela un rango de formulas en sus resultados, conservando la visualizacion:
src.Copy
src.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

' El equivalente sin portapapeles para solo valores (pierde los formatos de numero):
dst.Value = src.Value

Una fórmula es una promesa de recalcular: =Sheet2!A1*1.1 no es un número, es una instrucción que se vuelve a ejecutar cada vez que cambia Sheet2!A1. La mayoría de las veces es exactamente lo que quieres. Pero a veces necesitas que la respuesta deje de ser una promesa y se convierta en un hecho — un mes que estás archivando, una instantánea que vas a enviar por correo, una fórmula volátil que quieres que deje de dar vueltas. Eso es lo que hace pegar valores. Es el rincón más buscado de PasteSpecial, y tiene una trampa que vale la pena conocer antes de usarlo.

Lo que aprenderás

  • El modelo mental — pegar valores convierte una promesa de recalcular en un número plano
  • La regla que salva datos — congela antes de borrar el origen, no después
  • La trampa del formato — xlPasteValues elimina el formato de número y las fechas se vuelven series
  • Los tres trabajos reales — archivar un resultado, frenar volátiles, romper vínculos externos
  • El atajo sin portapapeles — dst.Value = src.Value
  • Cuándo no congelar, porque una fórmula está haciendo su trabajo

El modelo mental: una instantánea, no un vínculo

Una fórmula vincula una celda a sus entradas. Pegar valores corta ese vínculo y deja atrás el número que se mostraba en el momento en que lo hiciste — una instantánea. Los píxeles se ven idénticos; el comportamiento es completamente distinto. Antes, la celda era =A1+A2 y seguiría a A1 y A2 para siempre. Después, la celda es el literal 350, y A1 y A2 pueden cambiar, moverse o desaparecer sin que ella se entere.

Esa única distinción — vínculo frente a instantánea — es toda la decisión. Si te preguntas «¿este número todavía necesita seguir a sus entradas?», la respuesta te dice si dejar la fórmula o congelarla. Pegar valores es tu forma de responder «no, este resultado ya es definitivo».

La regla que más importa: congela antes de borrar el origen

Aquí está el error que destruye datos. Construyes un informe con fórmulas que hacen referencia a una hoja de datos en bruto, y luego borras esa hoja para aligerar el archivo — y cada fórmula colapsa en #REF!, porque las celdas a las que apuntaban ya no existen:

dst.Formula = "=RawData!A1 * 1.1"   ' un vinculo vivo a otra hoja
Worksheets("RawData").Delete         ' el origen desaparece...
' dst ahora muestra #REF! - el numero se perdio

La solución es el orden: congela los resultados en valores primero, luego borra el origen. Una vez que dst.PasteSpecial Paste:=xlPasteValues se ha ejecutado, la celda contiene un número real que no le debe nada a RawData, así que borrar la hoja es seguro. La regla se generaliza: cada vez que estés a punto de quitar, sobrescribir o mover las celdas de las que depende una fórmula, pega valores primero. Un #REF! no se puede deshacer una vez que el archivo se ha guardado y cerrado.

La trampa del formato: solo valores elimina el formato de número

Esta es la sorpresa que hace que la gente vuelva a buscar. xlPasteValues copia el valor — y un valor en Excel es un número desnudo. Una fecha se almacena como un número de serie (días desde 1900), la moneda como un número plano, un porcentaje como un decimal. El formato de número de la fórmula es lo que los mostraba como 2026-03-15, $1,200 y 35%. Pega solo valores y ese formato se queda atrás:

src.Copy
src.PasteSpecial Paste:=xlPasteValues                 ' 2026-03-15 se convierte en 46091
src.PasteSpecial Paste:=xlPasteValuesAndNumberFormats ' 2026-03-15 se queda en 2026-03-15

Así que la opción honesta por defecto para cualquier cosa que lea una persona es xlPasteValuesAndNumberFormats, que lleva el formato de visualización junto con el número. Recurre al xlPasteValues a secas solo cuando de verdad quieras los números subyacentes en bruto — para alimentar un cálculo, exportar a un sistema que reformatea de todos modos.

Tres trabajos que de verdad hace pegar valores

Congelar fórmulas no es una tarea sino tres, y nombrarlas te dice cuándo hacerlo:

  • Archivar un resultado. Un resumen mensual calculado a partir de los datos de este mes no debería cambiar cuando lleguen los datos del mes siguiente. Congélalo y el número es del mes, para siempre.
  • Frenar fórmulas volátiles. NOW(), RAND(), TODAY() y OFFSET() se recalculan en cada edición, lo cual es ruido una vez que ya tienes el valor que querías. Pegar valores las fija.
  • Romper vínculos externos. Un libro lleno de =[Budget.xlsx]Sheet1!A1 molesta a cada destinatario con un aviso de actualización. Congela esas celdas y el archivo lleva sus números sin vínculos que perseguir.

Los tres son la misma operación con intenciones distintas, y los tres son inseguros si borras el origen primero — congela y después retira.

El atajo sin portapapeles: dst.Value = src.Value

Si todo lo que quieres son valores — sin formatos, sin operación, sin transposición — no necesitas el portapapeles en absoluto. Asignar el .Value de un rango a otro escribe los números directamente:

dst.Value = src.Value       ' solo valores, instantaneo, nunca toca el portapapeles

Esta es la forma más rápida de congelar en su sitio — rng.Value = rng.Value sobrescribe las fórmulas de un rango con sus propios resultados en una línea — y esquiva cada modo de fallo del portapapeles de PasteSpecial. Su único límite es que mueve solo valores: sin formatos de número, así que usa PasteSpecial Paste:=xlPasteValuesAndNumberFormats cuando la visualización tenga que sobrevivir, y consulta Copy Destination para el panorama completo de copiar sin el portapapeles.

Cuándo no congelar

Congelar es destructivo — estás desechando una fórmula. No lo hagas con una celda cuyo número debería seguir rastreando sus entradas: un total acumulado, un resumen vinculado, un modelo cuyo sentido entero es recalcular cuando cambian los supuestos. Si congelas esas, el siguiente lector edita una entrada y el «total» deja de moverse en silencio, lo cual es peor que cualquier retraso de recálculo. Congela un resultado que ya es definitivo; deja una fórmula que todavía está trabajando. En caso de duda, congela una copia en una hoja de instantánea y mantén las fórmulas vivas donde están.

Cómo ayuda ExcelMaster

Pegar valores es una idea de una línea con dos formas de perder datos: congelar después de borrar el origen y te da #REF!; usar xlPasteValues a secas en fechas y le envías a alguien por correo una columna de 45000. Ambas compilan, ambas se ejecutan, y ambas parecen correctas hasta que ya es tarde para arreglarlas.

ExcelMaster te deja decir lo que quieres — «congela los números de este mes», «convierte estas fórmulas en valores pero conserva las fechas», «rompe los vínculos antes de enviarlo» — y ordena los pasos de forma segura (congelar primero, borrar después), elige xlPasteValuesAndNumberFormats cuando una persona vaya a leer el resultado, y usa dst.Value = src.Value cuando no hace falta el portapapeles. Tú conservas el libro y el código.

Preguntas frecuentes

¿Cómo convierto fórmulas en valores en VBA?

Congélalas en su sitio: rng.Value = rng.Value sobrescribe cada fórmula con el número que produce en ese momento, en una línea y sin portapapeles. Si necesitas conservar el formato de visualización en fechas o moneda, usa la forma con portapapeles en su lugar — rng.Copy y luego rng.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, seguido de Application.CutCopyMode = False.

¿Por qué mis fechas se convirtieron en números después de pegar valores?

Porque xlPasteValues pega el valor sin el formato de número, y el valor subyacente de una fecha es un número de serie como 45000. El formato era lo que la mostraba como fecha. Usa xlPasteValuesAndNumberFormats para que el formato de visualización viaje también, y las fechas sigan siendo fechas.

¿Cómo detengo una fórmula para que no se recalcule sin borrarla?

Sustitúyela por su resultado — pega valores. Copia las celdas y usa PasteSpecial Paste:=xlPasteValuesAndNumberFormats, o usa rng.Value = rng.Value. Es la solución habitual para fórmulas volátiles como NOW(), RAND() y OFFSET() que siguen cambiando en cada edición: una vez congelado, el número queda fijo.

¿Pegar valores evita que se rompan mis fórmulas si borro la hoja de origen?

Evita justo eso — siempre que congeles primero. Si una fórmula hace referencia a otra hoja y borras esa hoja, la fórmula se convierte en #REF! y el número se pierde. Pega valores antes de borrar, para que la celda contenga un número real que ya no dependa del origen.

¿Cuál es la diferencia entre .Value y .Value2 al congelar?

.Value devuelve fechas y moneda como sus tipos con formato, mientras que .Value2 devuelve el número subyacente en bruto (una fecha como su serie). Para una congelación simple, rng.Value = rng.Value va bien; usa .Value2 solo cuando de verdad quieras las series en bruto sin tipado de moneda o fecha — consulta VBA Value2 para la distinción.

Probado en

Probado en: Excel 365 (Windows 11), VBA 7.1 — última verificación el 09/09/2026.

Guías relacionadas: VBA PasteSpecial · VBA Copy Destination · VBA Copiar y pegar · VBA Formula · VBA Value2