DESREF devuelve una referencia situada a un número determinado de filas y columnas de una celda de partida. Su verdadera fuerza está en construir rangos dinámicos: referencias que crecen o se encogen a medida que agregas datos, y que están detrás de muchos gráficos que se expanden solos y de los totales acumulados.
Sintaxis
=DESREF(referencia; filas; columnas; [alto]; [ancho])
- referencia: la celda o el rango de partida.
- filas: cuántas filas moverse (positivo = hacia abajo, negativo = hacia arriba).
- columnas: cuántas columnas moverse (positivo = a la derecha, negativo = a la izquierda).
- alto: opcional. El número de filas que debe abarcar el rango devuelto.
- ancho: opcional. El número de columnas que debe abarcar el rango devuelto.
Devolver una sola celda
Parte de A1 y muévete 3 filas hacia abajo y 1 columna a la derecha para llegar a B4:
=DESREF(A1; 3; 1)
Devolver un rango y sumarlo
Los argumentos de alto y ancho permiten que DESREF devuelva un bloque, que puedes pasar a otra función. Suma un bloque de 5 filas y 1 columna que empiece una fila por debajo de A1:
=SUMA(DESREF(A1; 1; 0; 5; 1))
Construir un rango de suma dinámico
Un uso clásico es sumar desde un punto fijo hasta la última fila, sean las que sean. Con valores en la columna B y una cuenta en una celda auxiliar:
=SUMA(DESREF(B2; 0; 0; CONTAR(B:B); 1))
CONTAR(B:B) aporta el alto, así que el rango sumado se estira para ajustarse a la cantidad de números que haya en la columna B. Agrega una fila y el total la incluye, sin tocar la fórmula.
Total acumulado hasta la fila actual
Dentro de una tabla puedes sumar desde la primera fila de datos hasta la actual:
=SUMA(DESREF($B$2; 0; 0; FILA()-1; 1))
Problemas habituales
- #¡REF!: el desplazamiento apunta fuera de la hoja (por ejemplo, filas negativas por encima de la fila 1). Revisa los desplazamientos de fila y columna.
- #¡VALOR!: el alto o el ancho son 0 o negativos. Ambos deben ser números enteros positivos.
- El resultado se recalcula constantemente. DESREF es una función volátil: se recalcula con cualquier cambio en cualquier punto del libro, incluso con ediciones que no tienen nada que ver. En hojas grandes eso ralentiza Excel. Cuando la velocidad importa, prefiere INDICE o una tabla para los rangos dinámicos.
DESREF frente a INDICE para rangos dinámicos
INDICE también puede construir rangos dinámicos y no es volátil, así que suele ser la opción más rápida. =SUMA(B2:INDICE(B:B; CONTAR(B:B)+1)) suma un rango que crece sin el coste de recálculo de DESREF. Recurre a DESREF cuando necesites concretamente mover una referencia un número variable de filas o columnas.
Preguntas frecuentes
¿Qué hace la función DESREF?
DESREF devuelve una referencia situada a un número determinado de filas y columnas de una celda de partida y, opcionalmente, un rango de un alto y un ancho dados. Se usa para apuntar a un objetivo móvil o para definir un rango que cambia de tamaño según se agregan datos.
¿Por qué DESREF ralentiza mi hoja de cálculo?
DESREF es volátil, lo que significa que se recalcula cada vez que cambia algo en el libro, no solo sus propios datos de entrada. Con muchas fórmulas DESREF eso se acumula. Sustitúyelas por INDICE o por referencias estructuradas de tabla, que no son volátiles.
¿Cuál es la diferencia entre DESREF e INDICE?
Ambas pueden devolver una celda o un rango dinámico. DESREF se mueve un número de filas y columnas y es volátil. INDICE devuelve una posición dentro de un rango y no es volátil, así que INDICE es preferible para rangos dinámicos donde el rendimiento importa.
¿Cómo hago un rango dinámico que crezca con mis datos?
Usa DESREF con una cuenta como alto: =DESREF(B2; 0; 0; CONTAR(B:B); 1) abarca tantas filas como números haya en la columna B. Para una versión más rápida y no volátil, una tabla o un rango basado en INDICE hacen el mismo trabajo.