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

Función DESREF en Excel — Una referencia que se mueve (y cuándo INDICE es mejor)

|

Función DESREF en Excel — Una referencia que se mueve (y cuándo INDICE es mejor)

En resumenOFFSET devuelve una referencia que empieza en una celda ancla, camina un número dado de filas hacia abajo y columnas hacia la derecha, y opcionalmente puede tomar un bloque de una altura y anchura dadas. Sintaxis: =OFFSET(referencia, filas, columnas, [alto], [ancho]). =OFFSET(A1, 2, 1) es la celda dos filas abajo y una columna a la derecha de A1 (es decir, B3). Como devuelve una referencia, no un valor, puedes envolverla en SUM, AVERAGE o COUNT y se redimensiona a demanda. Dos advertencias: es volátil (se recalcula ante cada edición), y para simplemente elegir una celda por posición, INDEX no volátil hace el mismo trabajo sin el coste de rendimiento. Reserva OFFSET para ventanas que de verdad se mueven.

=SUM(OFFSET(A1, 0, 0, COUNTA(A:A), 1))   ' suma la columna A por muy alta que crezca
=SUM(OFFSET(B2, COUNT(B:B)-3, 0, 3, 1))  ' suma los últimos 3 números de la columna B

La mayoría conoce OFFSET como el motor detrás de un "rango dinámico" — un rango con nombre o un origen de gráfico que se autoexpande al añadir filas. Es bueno en eso, y en un puñado de problemas de ventana móvil que nada más expresa con tanta elegancia. Pero también es volátil y fácil de sobreexplotar, y el Excel moderno ha dejado obsoletas en silencio la mitad de sus viejos casos de uso. Esta guía te da el modelo mental, las trampas, y una línea clara sobre cuándo cambiar a INDEX.

Lo que vas a aprender

  • El modelo mental: empieza en un ancla, muévete, y luego opcionalmente toma un bloque
  • Por qué OFFSET devuelve una referencia — y por qué eso permite que SUM la envuelva
  • El coste de la volatilidad, y la trampa del #REF! al salirse del borde
  • El clásico rango dinámico con nombre — y por qué una Tabla o un rango de derrame ahora lo superan
  • El nicho genuinamente difícil de reemplazar: ventanas móviles y totales acumulados
  • La decisión de criterio: OFFSET frente a INDEX no volátil

Nota — nombres de funciones en Excel en español. En la interfaz en español, las funciones aparecen así: OFFSET → DESREF, INDEX → INDICE, INDIRECT → INDIRECTO, ADDRESS → DIRECCION, MATCH → COINCIDIR, COUNTA → CONTARA, SUM → SUMA, SUMIFS → SUMAR.SI.CONJUNTO, FILTER → FILTRAR. Además, el error #REF! se muestra en Excel en español como #¡REF!. En los bloques de código mantenemos los nombres en inglés para que puedas copiar y pegar tal cual.

El modelo mental: empieza aquí, camina hasta allí, toma esto

OFFSET tiene cinco argumentos, pero cuentan una sola historia sencilla. Empieza en el ancla, da filas pasos hacia abajo y columnas pasos hacia la derecha para caer en una nueva celda, y luego — si le das alto y ancho — se expande desde esa celda de aterrizaje hasta un bloque de ese tamaño:

=OFFSET(A1, 2, 1)         ' cae en B3 (2 abajo, 1 a la derecha), una celda
=OFFSET(A1, 2, 1, 3, 2)   ' un bloque de 3 filas × 2 columnas empezando en B3  ->  B3:C5
=OFFSET(A1, -1, 0)        ' negativo camina HACIA ARRIBA -> fila encima de A1 (aquí, #REF!)

Los números positivos mueven hacia abajo y a la derecha; los negativos, hacia arriba y a la izquierda. Deja fuera alto y ancho y el resultado tiene el mismo tamaño que el ancla (normalmente una sola celda). Esa es toda la función — un puntero móvil que además puede estirarse hasta formar un rectángulo.

Por qué devuelve una referencia, no un valor

Este es el rasgo que hace útil a OFFSET y confunde a los novatos. OFFSET no devuelve el contenido del bloque — devuelve la referencia al bloque. Por sí solo en una celda, =OFFSET(A1,2,1,3,2) se derramará o mostrará el valor superior, pero su verdadero propósito es alimentar a otra función:

=SUM(OFFSET(A1, 0, 0, 12, 1))     ' suma un bloque de 12 filas anclado en A1
=AVERAGE(OFFSET(A1, 0, 0, 12, 1)) ' promedia ese mismo bloque

Como la altura del bloque es un argumento, puedes hacerla una fórmulaCOUNTA(A:A), MATCH(...), una celda en la que el usuario escribe — y el rango se redimensiona solo. Esa es toda la base de cada "rango dinámico" construido sobre OFFSET.

El clásico rango dinámico — y su reemplazo moderno

Durante años, la forma estándar de hacer que un gráfico o una lista desplegable creciera con tus datos era un rango con nombre basado en OFFSET:

' Nombre "DatosVentas" =  OFFSET($A$1, 0, 0, COUNTA($A:$A), 1)
' se autoexpande a las filas que tenga actualmente la columna A

Funciona. Pero en cualquier versión actual de Excel es el valor por defecto equivocado, por dos razones. Primero, OFFSET es volátil — un libro lleno de estos recalcula ante cada tecla y empieza a sentirse lento. Segundo, Excel ahora tiene herramientas no volátiles que hacen lo mismo de forma más legible:

  • Una Tabla de Excel (Ctrl+T) crece automáticamente; referénciala como Tabla1[Ventas] y cada gráfico, SUMIFS y lista desplegable apuntado a ella se expande solo — sin fórmula, sin volatilidad.
  • Un rango de derrame de una fórmula de matriz dinámica usa el operador #: si =FILTER(...) se derrama desde E2, entonces E2# es el rango vivo, siempre del tamaño correcto.

El veredicto: si estás recurriendo a un rango dinámico con nombre basado en OFFSET en 2026, recurre a una Tabla o a una referencia de derrame en su lugar. Reserva los rangos con OFFSET solo para libros heredados que mantienes, no para los nuevos.

La trampa: caminar fuera del borde devuelve #REF!

OFFSET falla a gritos cuando lo envías a un sitio que no existe. Muévete por encima de la fila 1 o a la izquierda de la columna A — o dimensiona un bloque que se pase de la última fila de la hoja — y obtienes #REF!:

=OFFSET(A1, -1, 0)          ' #REF!  — no hay fila encima de A1
=OFFSET(A1, 0, 0, 0, 1)     ' #REF!  — un bloque no puede tener altura cero

La versión sutil muerde en los rangos dinámicos: si COUNTA($A:$A) cuenta un valor perdido muy abajo en la columna, o cuenta cero en una columna vacía, el argumento de altura sale mal y todo el rango colapsa o da error. Ancla en el verdadero inicio de tus datos y asegúrate de que la fórmula de dimensionado no pueda devolver 0.

El nicho que DESREF conserva: ventanas móviles

Aquí es donde OFFSET todavía se gana su sitio — una ventana que se desliza, donde tanto el inicio como el tamaño se mueven juntos. Los totales acumulados y las "últimas N filas" son los casos emblemáticos:

' Suma acumulada de las 3 entradas más recientes de la columna B
=SUM(OFFSET(B2, COUNT(B2:B1000)-3, 0, 3, 1))

' Valor N filas debajo de un encabezado encontrado (un punto de lectura móvil)
=OFFSET($A$1, MATCH("Total", $A:$A, 0)-1, 1)

Ese movimiento de "ancla, salta a una posición que calcula una fórmula, y luego lee una ventana alrededor de ella" es genuinamente incómodo de expresar de cualquier otra forma. Incluso aquí, un total acumulado basado en fechas suele quedar más limpio como SUMIFS con una condición ">="&corte — pero para una ventana posicional, por conteo de filas, OFFSET sigue siendo la herramienta más ajustada.

La decisión de criterio: DESREF frente a INDICE

La única regla que arreglará la mayor parte del sobreuso de OFFSET: si estás usando OFFSET para indexar en un rango — "dame la celda en esta posición" — cambia a INDEX. INDEX también devuelve una referencia, hace la misma elección posicional, y no es volátil:

=OFFSET($A$1, n, 0)     ' forma volátil de obtener la (n+1)-ésima celda de la columna A
=INDEX($A:$A, n+1)      ' la misma celda, no volátil, y Excel puede rastrearla
  • Elegir una celda/fila/columna por posiciónINDEX. No volátil, rastreable, se lee con más claridad. Esto cubre la gran mayoría de para lo que la gente usa OFFSET.
  • Hacer crecer un rango al añadir datos → una Tabla o una referencia de derrame #.
  • Una ventana que de verdad se mueve (total acumulado, últimas N filas, lectura alrededor de una coincidencia) → OFFSET sigue siendo la elección correcta, usada deliberadamente y en pocas cantidades.

La opinión fuerte: OFFSET es un especialista, no un básico. Cada OFFSET volátil que reemplaces con INDEX, una Tabla o un rango de derrame hace el libro más rápido y más fácil de rastrear para la siguiente persona — y no pierdes nada salvo el retardo del recálculo.

Cómo ayuda ExcelMaster

Las fórmulas con OFFSET son donde las hojas de cálculo se vuelven lentas e ilegibles — COUNTA anidados, alturas con error de uno, y volatilidad que nadie nota hasta que el archivo se arrastra. ExcelMaster lee el objetivo — un gráfico que crece con los datos, un total acumulado de 3 meses, el valor junto a la fila que dice "Total" — y lo escribe a la manera moderna: una Tabla o rango de derrame cuando solo necesitas crecimiento, INDEX cuando indexas por posición, y un OFFSET ajustado solo cuando una ventana móvil realmente lo pide. Consigues el comportamiento dinámico sin heredar una fórmula volátil que hay que cuidar.

Preguntas frecuentes

¿Qué hace la función DESREF en Excel?

Devuelve una referencia situada a un número dado de filas y columnas desde un ancla de partida, opcionalmente redimensionada a un bloque: =OFFSET(A1, 2, 1) es la celda dos filas abajo y una columna a la derecha de A1. Como devuelve una referencia, normalmente la envuelves en SUM, AVERAGE o COUNT.

¿Por qué se considera volátil a DESREF?

Excel no puede predecir a qué celdas apuntará OFFSET hasta que calcula, así que lo reevalúa en cada recálculo, no solo cuando cambian sus entradas. Unas pocas son inofensivas; miles ralentizan el libro de forma notable. Esa es la razón principal para preferir INDEX o una Tabla donde puedas.

DESREF frente a INDICE — ¿cuál debería usar?

Para elegir una celda por posición, usa INDEX — devuelve una referencia igual que OFFSET pero es no volátil y rastreable. Reserva OFFSET para ventanas que de verdad se mueven (totales acumulados, "últimas N filas") donde el inicio y el tamaño se desplazan juntos.

¿Cómo hago un rango dinámico con DESREF?

El patrón clásico es =OFFSET($A$1, 0, 0, COUNTA($A:$A), 1) en un rango con nombre, que crece a medida que se rellena la columna A. En el Excel moderno, prefiere una Tabla de Excel o una referencia de derrame (A2#) en su lugar — ambas se autoexpanden sin volatilidad.

¿Por qué mi DESREF devuelve #REF!?

Te has salido del borde de la hoja (filas negativas por encima de la fila 1, más allá de la última columna) o le has dado a un bloque una altura o anchura de 0. En rangos dinámicos, esto normalmente significa que la fórmula de altura (como COUNTA) devolvió 0 o un conteo inesperado. Revisa el ancla y los argumentos de dimensionado.

Probado en

Probado en: Excel 365 (Windows 11) — última verificación el 2026-07-01.

Guías relacionadas: Excel INDIRECTO · Excel DIRECCION · Excel SUMAR.SI.CONJUNTO · Excel FILTRAR · Excel BUSCARX