Menu

DESREF en Excel: rangos dinámicos y totales móviles (OFFSET)

=DESREF(A1;3;2) devuelve la celda que está 3 filas más abajo y 2 columnas a la derecha de A1. Con un alto devuelve un rango entero, y así se suman las últimas N filas o se construye un promedio móvil.

Todas las hojas de esta página están vivas: cambia un número o una fórmula y se recalculan.

=DESREF(A1;3;2) devuelve la celda que está 3 filas más abajo y 2 columnas a la derecha de A1, es decir, C4. Dale además un alto y un ancho y devuelve un rango entero, que es para lo que más se usa DESREF: totales y promedios sobre un rango que se mueve o crece. DESREF se llama OFFSET en inglés, y la tabla muestra la fórmula en inglés; también acepta las fórmulas escritas en español, con punto y coma (o con comas, como en México).

Moverse desde A1
G2
ABCDEFG
1ProductCategoryPriceRowsColsResult
2AppleFruit$1.2032$0.80
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
Haz clic en una celda para ver su fórmula. Cambia un número o una fórmula y la hoja se recalcula.En Excel en español: =DESREF(A1;E2;F2)

3 filas hacia abajo y 2 a la derecha de A1 caen en C4, el precio de Carrot, $0.80. Pon Cols en 0 para obtener el nombre Carrot, o Rows en 5 para la fila de Milk. Las filas y columnas pueden ser negativas para moverse hacia arriba o hacia atrás, y salirse por el borde superior o lateral de la hoja da #¡REF! (#REF! en inglés; la tabla muestra los nombres de error en inglés).

Sintaxis de DESREF

=OFFSET(reference, rows, cols, [height], [width])
  • reference (ref): la celda (o rango) inicial.
  • rows, cols (filas, columnas): cuánto moverse. 0 significa quedarse.
  • height, width (alto, ancho): el tamaño del rango que se devuelve, contado desde la celda a la que se llega. Si se omiten, son el tamaño de reference.

Sola en una celda, una DESREF que devuelve varias celdas se desborda en Excel 365; las versiones antiguas suelen mostrar #¡VALOR! (#VALUE! en inglés). Dentro de SUMA, PROMEDIO, CONTAR o MAX funciona como un rango.

Sumar las últimas N filas

El trabajo clásico de DESREF: un total que siempre cubre las filas más recientes, por muchas que se añadan. CONTAR (COUNT en inglés) averigua cuántos valores hay, DESREF baja hasta el primero de los últimos N y el alto toma N filas.

Total de los últimos N meses
F2
ABCDEF
1MonthSalesLast NTotal
2Jan4,200314,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Haz clic en una celda para ver su fórmula. Cambia un número o una fórmula y la hoja se recalcula.En Excel en español: =SUMA(DESREF(B1;CONTAR(B2:B13)-E2+1;0;E2;1))

Hay 7 valores, así que DESREF empieza 7-3+1, 5 filas por debajo de B1, en B6, y toma 3 filas: de May a Jul, 14,900. En Excel en español la fórmula de F2 es =SUMA(DESREF(B1;CONTAR(B2:B13)-E2+1;0;E2;1)). Escribe 4900 en B9 (agosto) y el total pasa a Jun, Jul y Aug, porque CONTAR encuentra ahora 8. El rango B2:B13 deja sitio para el resto del año. La columna no debe tener celdas vacías en medio, o CONTAR se queda corto y la ventana cae en el sitio equivocado.

Un promedio móvil

Copiada hacia abajo en una columna, DESREF con un desplazamiento de filas negativo da a cada fila una ventana de las filas de arriba: aquí el promedio del mes actual y de los dos anteriores.

Promedio móvil de tres meses
C4
ABC
1MonthSales3-month average
2Jan4,200
3Feb3,900
4Mar4,8004,300
5Apr5,1004,600
6May4,6004,833
7Jun5,3005,000
8Jul5,0004,967
Haz clic en una celda para ver su fórmula. Cambia un número o una fórmula y la hoja se recalcula.En Excel en español: =PROMEDIO(DESREF(B4;-2;0;3;1))

C4 promedia B2:B4 (de Jan a Mar), 4,300. Cada fila de abajo mueve la ventana una posición. En Excel en español la fórmula de C4 es =PROMEDIO(DESREF(B4;-2;0;3;1)). Cambia el 3 por 6 y el -2 por -5 para un promedio de seis meses (entonces la fórmula empieza en la fila 7). Este caso concreto no necesita DESREF: =PROMEDIO(B2:B4) copiada hacia abajo desde C4 hace lo mismo, porque las referencias relativas ya se mueven. DESREF se gana su sitio cuando el tamaño de la ventana sale de una celda.

Por qué INDICE suele ser mejor opción

DESREF es volátil: Excel recalcula cada DESREF después de cualquier edición en cualquier parte del libro, porque no puede saber de antemano a qué celdas apuntará. Una hoja con miles de ellas se vuelve lenta. INDICE (INDEX en inglés) también devuelve una referencia, y un rango escrito como inicio:INDICE(...) crece igual sin ser volátil:

=SUM(OFFSET(B2, 0, 0, E2, 1))        first E2 rows, volatile
=SUM(B2:INDEX(B2:B13, E2))           same rows, not volatile

En Excel en español: =SUMA(DESREF(B2;0;0;E2;1)) y =SUMA(B2:INDICE(B2:B13;E2)). Las dos leen las primeras E2 filas de la columna. DESREF además es más difícil de auditar: Rastrear precedentes y los contornos de colores que Excel dibuja mientras editas la fórmula muestran la celda inicial y los argumentos, no el rango que DESREF termina devolviendo. Usa DESREF para un modelo rápido o el rango de un gráfico; prefiere INDICE en libros grandes. INDICE explica más sobre devolver rangos, e INDIRECTO es la otra función de referencia volátil.

Práctica: total de los primeros N meses

Ventas mensuales
F2
ABCDEF
1MonthSalesFirst NTotal
2Jan4,2004
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Haz clic en una celda para ver su fórmula. Cambia un número o una fórmula y la hoja se recalcula.

Tu turno: En F2, usa DESREF dentro de SUMA para sumar los primeros N meses, donde N está en E2.

Preguntas frecuentes

¿Qué hace DESREF en Excel?

Devuelve una referencia que está a un número dado de filas y columnas de una celda inicial, y opcionalmente con otro tamaño. =DESREF(A1;3;2) es la celda 3 filas más abajo y 2 columnas a la derecha de A1, es decir, C4.

¿Cómo sumo las últimas N filas en Excel?

Empieza en el encabezado y baja hasta el primero de los últimos N valores: =SUMA(DESREF(B1;CONTAR(B2:B100)-N+1;0;N;1)). CONTAR averigua cuántos valores hay, y el alto N toma esa cantidad de filas. Solo funciona cuando la columna no tiene huecos.

¿Por qué DESREF es volátil?

Excel recalcula cada DESREF después de cualquier cambio en el libro, porque las celdas a las que apunta solo se conocen después de ejecutarla. En libros grandes eso ralentiza todo. Un rango construido con INDICE, como B2:INDICE(B2:B100;N), hace el mismo trabajo sin ser volátil.

¿Cuáles son los argumentos de DESREF?

DESREF(ref; filas; columnas; [alto]; [ancho]): la celda inicial, cuántas filas hacia abajo (negativo es hacia arriba), cuántas columnas a la derecha (negativo es hacia atrás) y, opcionalmente, el tamaño del rango que se devuelve.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR