top of page

La función DESREF

Actualizado: 17 may 2023

Vamos con la función DESREF.


Esta función nos devuelve una referencia a un rango de celdas que ha sido desplazado respecto a otra referencia que hemos especificado es complicado explicarlo, pero la función DESREF es uno de esos tesoros escondidos de Excel, nos permite obtener un valor a partir de un punto de partida, de una referencia, de un origen, de tal manera, que especificándole las filas y columnas que nos queremos mover, obtenemos un valor, también te puede permitir obtener un rango.


· Ref. (obligatorio): La referencia a la celda o rango donde se iniciará el

· desplazamiento.

· Filas (obligatorio): El número de filas a moverse. Si el valor es positivo

· se moverá hacia abajo y si es negativo se moverá hacia arriba.

· Columnas (obligatorio): El número de columnas a moverse. Si el valor

· es positivo se moverá hacia la derecha y si es negativo se moverá a la

· izquierda.

· Alto (opcional): El número de filas que deseamos que nos devuelva

· como resultado.

· Ancho (opcional): El número de columnas que deseamos que nos

· devuelva como resultado.


Imaginemos que podemos dar a Excel un conjunto de instrucciones para ir a una celda determinada.


Tenemos los siguientes datos.

ree












Vamos a partir de la celda ORIGEN, que es la celda D10.


Queremos llegar a estas celdas, con los valores A, B, C, D, y, E.


Vamos a ver cómo nos vamos a mover, cuantas filas, cuantas columnas tenemos que movernos.


Para esto, hay algunas reglas que debemos tener en cuenta.


En Excel, los desplazamientos hacia abajo y hacia la derecha son positivos, y los desplazamientos hacia la izquierda y hacia arriba son negativos.


Cuando usemos funciones en Excel, lo primero que tenemos que indicar son las filas y después las columnas.


Para llegar desde la celda ORIGEN a la celda que contiene el valor de A, debo de moverme desde ORIGEN, dos filas hacia abajo y dos columnas a la derecha.

ree













Obtenemos la letra A.

ree




Para llegar a la celda que contiene el valor B, debemos de movernos 5 filas hacia abajo y una columna hacia la derecha.

ree














Bien, ahora para llegar a la celda con el valor C, debo de moverme dos filas a la izquierda y dos columnas abajo, por lo que dicho número debemos de ponerlo en negativo.

ree














Para llegar a la celda que contiene el valor de D, debemos de movernos 1 columna hacia la izquierda, y, 6 filas hacia arriba, ambos valores deben de ser negativos.

ree















Para llegar a la letra E, debemos de movernos cuatro filas hacia arriba, lo que es valor es negativo, y, una columna a la derecha.

ree














Bien, esto es la función DESREF en su mínima expresión.


Ahora, veamos otro ejemplo, donde voy a usar el cuarto y quinto argumento, es decir, alto y ancho, lo que me va a devolver más de un valor.


Tengo los siguientes datos.

ree









Si escribimos, =DESREF(A6;3;2), le estamos diciendo que a partir de la celda A6, se mueva tres filas hacia abajo, y, y dos columnas a la derecha.


Nos devuelve el valor 306.


Ahora, vamos a usar el cuarto y quinto argumento, el cuarto argumento es alto, quiere decir, a partir de una celda, el rango hacia abajo, o, hacia arriba que debe de tomar, y, como ultimo argumento es ancho, es decir, numero de columnas, a la derecha, o, a la izquierda que debe de tomar, si usamos la siguiente sintaxis:


=SUMA(DESREF(I6;3;2;2;2))


Le estamos diciendo igual que antes, que se mueva desde I6, tres filas, y, dos columnas, una vez en el destino, que tome un alto de dos, y, un ancho de dos también.


Si no usamos la función SUMA, DESREF nos devolverá más de un valor, 306, 349, 190, y, 102, por lo que nos devolverá un error, pero como queremos el total, pues, delante ponemos la función SUMA.

ree






Decir, que cuando especificamos el tercer y cuarto argumento, a diferencia de cuando especificamos los argumentos fila y columna, empieza a contar desde la celda donde esta, no en la siguiente.


Bien, veamos otro ejemplo, este ejemplo es un caso real de un alumno mío.


Teniendo los siguientes datos.

ree











El manualmente, calculaba la diferencia de ventas hasta el mes actual entre el año primer y segundo año, el cual, me comentaba que era una tarea tediosa, si había alguna manera de poder automatizarlo.


Pensé que con la función DESREF, era probable que se pudiera hacer.


Lo primero que debía de saber, es cuál es el mes actual para poder hacer las comparaciones, eso lo pude hacer con la función MES sobre la fecha actual en la celda C1, de la siguiente manera:


=MES(HOY())


Ya tengo el número de mes, como los datos están en horizontal, quiere decir que de la función DESREF debo de usar el argumento ancho para tomar los valores hasta el mes actual.


Me dijo que quería saber el total de todos los productos hasta el mes actual, por lo que también me hacía falta el argumento alto de la función DESREF, que, en este caso, es un número fijo.


Entonces, si huso la siguiente sintaxis, donde como punto de partida es la celda C4, que es la primera cantidad, cantidad que corresponde al mes de enero del producto1.


Como argumento filas, ponemos 0.


Como argumento columna, ponemos 0.


Como argumento alto, ponemos 8, que son los productos que tenemos.


Y, como argumento ancho, usamos la función MES aplicada a la función HOY.


Cerramos paréntesis.


=SUMA(DESREF(C4;0;0;8;MES(HOY())))


Obtenemos:

ree



Ahora, hacemos lo mismo, pero para el siguiente año, la sintaxis es la misma lo único que va a cambiar es la celda de partida, en vez de C4 es C15.


=SUMA(DESREF(C15;0;0;8;MES(HOY())))


Y obtenemos:

ree




También, quería saber cuál es el producto más vendido hasta el mes actual, para ello, primero vamos a calcular el valor máximo del resultado de la función DESREF anterior, pero sin la función SUMA, con la siguiente sintaxis, donde, nos movemos cero filas y columnas, como argumento alto, ponemos 8, que son los productos que hay, como argumento ancho, usamos MES junto con HOY.


Cerramos paréntesis.


=MAX(DESREF(C4;0;0;8;MES(HOY())))



La vamos a usar más de una vez, vamos a crear una función personalizada, para ello, seleccionamos la expresión, pulsamos CTRL más C para copiar, pulsamos Escape, vamos a la pestaña de fórmulas, dentro de nombres definidos, hacemos clic en asignar nombre.

ree







Como nombre, ponemos, por ejemplo, resaltar, y en la ventana se refiere a, pegamos la formula con CTRL más V, y, fijamos C4 con F4.

ree















Aceptamos.


Vamos a la celda J25, donde calculamos el valor máximo, y, cambiamos DESREF por el nombre de rango Resaltar.


=MAX(Resaltar)


Si en una celda, escribimos el nombre de rango Resaltar, nos va a devolver los valores de los productos hasta el mes de marzo, hoy es 12/03/2023.

ree










Entonces, vamos a comparar el valor máximo devuelto por Resaltar con los valores devueltos por Resaltar.


=SI(MAX(Resaltar)=Resaltar


En caso de coincidencia, que nos devuelva la fila del rango C4:C11, en caso contrario, que nos devuelve un texto en blanco.


Cerramos paréntesis.


=SI(MAX(Resaltar)=Resaltar;FILA(C4:C11);"")


Esta función nos va a devolver mas de un valor, en donde no haya coincidencia, aparecerá blanco, y, donde hay coincidencia, aparecerá el número de fila.

ree








Para quedarnos solo con el valor, usamos CONCAT, que omitirá las celdas en blanco.


=CONCAT(SI(MAX(Resaltar)=Resaltar;FILA(C4:C11);""))


Usamos INDICE para regresar el valor de fila devuelto en la columna productos, donde omitimos el argumento numero de columna, y, de forma predeterminada nos devolverá una columna.


=INDICE(B:B;CONCAT(SI(MAX(Resaltar)=Resaltar;FILA(C4:C11);"")))


Obtenemos el producto de más ventas.

ree



Para el producto mas vendido para el siguiente año, decir, que el primer año lo esto consiguiendo, extrayendo el año de la fecha actual y restando 1, y, para el siguiente año, es la misma función, pero sin restar 1.


=AÑO(HOY())-1


Como iba diciendo, debemos de calcular el producto más vendido para el siguiente año, la expresión es la misma que hemos usado anteriormente:


=DESREF(Ejemplo3_resuelto!$C$4;0;0;8;MES(HOY()))


Pero, en vez de la celda C4, ponemos la celda C15.


Seguimos los pasos seguidos anteriormente para crear el nombre de rango Resaltar, lo llamamos Resaltar2, y, en la ventana se refiere a, ponemos la expresión.

ree















Aceptamos.


Copiamos la expresión usada para el cálculo del producto más vendido para el primer año, la pegamos en la celda J26, cambiamos el nombre de rango Resaltar por Resaltar2, también, debemos de cambiar el rango en la función FILA, debemos de seleccionar las filas para del año siguiente.


=INDICE(B:B;CONCAT(SI(MAX(Resaltar2)=Resaltar2;FILA(C15:C22);"")))


Aceptamos, y, tenemos el producto mas vendido para el siguiente año.

ree




También, quería que se viera gráficamente las ventas para ambos años, pero de un producto seleccionado.


Añadimos una hoja nueva.


Vamos a realizar un gráfico donde se va a ver las ventas de cada mes hasta el mes actual por un producto seleccionado.


Primero, vamos a crear una lista desplegable a través de una validación de datos, para elegir un producto, para ello, vamos a la pestaña datos, dentro de obtener y transformar datos, hacemos clic en validación de datos.

ree







Desplegamos permitir, seleccionamos lista, en la ventana origen seleccionamos los productos de la hoja Ejemplo3_resuelto, los productos son los mismos para los dos años.

ree













Aceptamos.


Seleccionamos un producto.


Vamos a obtener los valores del producto seleccionado para ambos años, buscaremos la posición del producto seleccionado para el primer año, para ello, usamos COINCIDIR, donde como argumento valor buscado es el producto seleccionado.


=COINCIDIR(G2


Punto y coma, como argumento matriz buscada, seleccionamos los productos para el primer año.


=COINCIDIR(G2;Ejemplo3_resuelto!B4:B11


Punto y coma, como argumento tipo de coincidencia, seleccionamos exacta.


Cerramos paréntesis.


=COINCIDIR(G2;Ejemplo3_resuelto!B4:B11;0)


Ya tenemos el argumento filas de DESREF, pues, ponemos dicha función, como punto de partida es la celda C4 de la hoja Ejemplo3_resuelto.


=DESREF(Ejemplo3_resuelto!C4


Punto y coma, como argumento filas, es la función COINCIDIR, pero debemos de restar 1, en caso contrario, nos devolverá una fila más.


=DESREF(Ejemplo3_resuelto!C4;COINCIDIR(G2;Ejemplo3_resuelto!B4:B11;0)-1;0;1;MES(HOY()))


Punto y coma, como argumento columnas, ponemos 0, como argumento alto, ponemos 1, y, como argumento ancho es la función MES.


=DESREF(Ejemplo3_resuelto!C4;COINCIDIR(G2;Ejemplo3_resuelto!B4:B11;0)-1;0;1;MES(HOY()))


Aceptamos, y, tenemos los valores para el primer año del producto seleccionado.

ree



Para el siguiente año, la expresión es la misma, pero debemos de cambiar C4 por C15, no cambiamos el rango B4:B11, porque la posición de los productos son las mismas en ambos años.


=DESREF(Ejemplo3_resuelto!C15;COINCIDIR(G2;Ejemplo3_resuelto!B4:B11;0)-1;0;1;MES(HOY()))


Aceptamos, y, tenemos las ventas del producto seleccionado para ambos años.

ree




Vamos a graficarlo, para ello, vamos a crear dos nombres de rangos, uno se va a llamar Primer_producto, que contendrá la fórmula que hemos usado para extraer los valores del producto seleccionado para el primer año.


Para ello, vamos a la pestaña de fórmulas, dentro de nombres definidos, hacemos clic en asignar nombre.


Como nombre, ponemos Primer_producto, y, en la ventana se refiere a, pegamos la expresión.

ree










Creamos un segundo nombre de rango para las ventas del segundo año.

ree











Lo siguiente es graficar.


En una celda en blanco, vamos a la pestaña de insertar, dentro de gráficos, desplegamos grafico de líneas o de áreas, y, seleccionamos línea con marcadores.

ree













Se habilitan las pestañas diseño de gráfico, y, formato.

ree




Vamos a la pestaña de diseño de gráfico, hacemos clic en seleccionar datos.

ree







Se abre la ventana seleccionar origen de datos.


Hacemos clic en agregar dentro de Entradas de leyenda (Series).

ree














En la ventana valores de serie, debemos de poner el nombre del libro, seguido de exclamación (¡) y el nombre de rango a usar, si no nos acordamos del nombre de rango usar, podemos pulsar F3, y, seleccionarlo.

ree








Aceptamos por dos veces.


Ya tenemos graficado el primer año.

ree

















Seleccionamos la expresión donde calculamos el total para el primer año hasta la fecha actual, fijamos C4.


Repetimos los pasos, y, graficamos el año siguiente.

ree





Ya tenemos nuestros datos graficados.

ree


















En leyendas del eje horizontal, en vez de que aparezca 1, 2, y, 3, queremos que aparezcan los nombres de los meses, para ello, vamos a crear una lista con los meses.

ree


















Si usamos la siguiente expresión, MES(HOY()), nos devuelve el número de mes, si usamos DESREF, donde como punto de partida, es el nombre meses (M1), y, como argumento filas, ponemos 1, como argumento columnas, ponemos cero, como argumento alto es la función MES, y, como argumento ancho, ponemos cero, obtendremos los meses que deben de aparecer dentro del gráfico.


Fijamos M1.


=DESREF(M1;1;0;MES(HOY());1)

ree







Creamos otro nombre de rango, lo llamamos nombre_meses, y, en la ventana se refiere a, pegamos la expresión.

ree





Aceptamos, y, tenemos los nombres de los meses graficados, pero de forma dinámica.

ree

















Hacemos clic con botón alternativo de ratón sobre el eje vertical, donde tenemos los valores, y, seleccionamos dar formato al eje.

ree

















Se abre a la derecha la ventana dar formato a eje.


Desplegamos número, en la ventana categoría, seleccionamos moneda, y, en posiciones decimales, ponemos cero.

ree










Ya tenemos la moneda de nuestro país.

ree
















Creamos un nuevo título para el grafico.


="Producto seleccionado hasta el mes " & TEXTO(HOY();"mmmm") & " del año " & Ejemplo3_resuelto!B3 & "/" & Ejemplo3_resuelto!B14


Aceptamos, y, tenemos el título de forma dinámica.


Seleccionamos el título, vamos a la barra de fórmulas, y, hacemos clic en la celda O1, y, tenemos el título del gráfico.

ree

















Seleccionamos las líneas de división.

ree
















Pulsamos suprimir.


Hacemos doble clic en uno de los lados del gráfico, a la derecha se abre la ventana formato del área del gráfico, desplegamos borde, y, seleccionamos sin línea.

ree












Vamos a la pestaña vista, y, desmarcamos líneas de cuadricula.

ree








Redimensionamos el grafico.


Y ya lo tenemos.

ree
















También, quería ver graficado de forma clara, la diferencia porcentual entre las ventas hasta el mes actual del producto seleccionado.


En la celda H4, sumamos el nombre de rango Primer_producto, lo restamos a la suma Segundo_producto, y, lo dividimos entre la suma de Primer_producto.


=(SUMA(Primer_producto)-SUMA(Segundo_producto))/SUMA(Primer_producto)


Lo ponemos en formato de porcentaje sin decimales.


Restamos al 100% el resultado obtenido.


=100%-H4

Ya tenemos los datos a graficar.

ree





Vamos a graficarlo con un gráfico de anillo, para ello, seleccionamos ambas cantidades, vamos a la pestaña insertar, e, insertamos el grafico de anillo.

ree
















Quitamos título, leyenda, y, borde.


Redimensionamos el grafico para que quede debajo del primero.

ree



















Hacemos clic sobre el anillo más pequeño, volvemos a ser clic sobre él, vamos a la pestaña formato, desplegamos relleno de forma, y, seleccionamos un fondo.

ree











Volvemos a desplegar, y, desmarcamos sin relleno.

ree















Le damos formato al siguiente anillo.

ree














Quitamos el borde.


Al lado del grafico de anillo, insertamos una elipse más o menos del mismo tamaño que el centro del grafico de anillo.

ree









Ponemos el mismo formato que el anillo más grande.


Seleccionamos ambos gráficos, seleccionado el primero, dejando pulsada la tecla CTRL y seleccionado el segundo gráfico.


Vamos a la pestaña formato de forma.


Desplegamos alinear, y, elegimos alinear verticalmente, y, horizontalmente.

ree













Desplegamos agrupar, y, elegimos agrupar, con esto conseguimos que las dos formas se hagan una.

ree








Seleccionamos la elipse, y, en la barra de fórmulas, escribimos el signo igual, y, señalamos la celda con la diferencia porcentual, y, aceptamos.


Seleccionamos la diferencia porcentual dentro de la elipse, la centramos, la ponemos en color blanco en negrita, y, aumentamos el tamaño.

ree


















Y ya lo tenemos.




Cálculo de acumulados con la función DESREF

Hemos visto varios ejemplos, con distintas funciones, donde hemos calculado acumulados, pues, ahora, vamos a crear un acumulado, con la función DESREF.


Tenemos los siguientes datos, aunque veamos los meses, estos meses corresponden a fechas, que van desde el día 1 de enero del año 2020, hasta el 31 de diciembre del año 2021.

ree

















Para que me devuelva el nombre del mes, he seleccionado las celdas, he pulsado, CTRL más 1, para ir a formato de celdas, en la pestaña número, dentro del grupo, categoría, he seleccionado personalizada, y, en la ventana tipo, he puesto “MMMM”, para que devuelva el nombre del mes.

ree

















Bien, fijándonos en el modelo, tenemos valores desde el mes de enero hasta diciembre, correspondiente al año 2020, y, a continuación, del mes de enero a diciembre, pero del año 2021.


Con estos datos, queremos crear un acumulado, pero por años, es decir, que cuando termine el acumulado del mes de enero del año 2020, para el mes de enero del año 2021, la cantidad debe de reiniciarse a cero.


Pues, empecemos.


Sabemos que un acumulado, es ir sumando las cantidades superiores, quiere decir, que el primer acumulado, es la primera cantidad, para el segundo acumulado, sería la suma de la primera cantidad más la segunda cantidad.

ree







Para el siguiente acumulado, sería la suma de las tres primeras cantidades, y, así con el resto de las cantidades.


Si en la celda F3, escribimos la siguiente función, donde fijo la referencia D2, para que, al arrastrar, no se actualice.


=SUMA($D$2:D3)


Estoy sumando, desde nada, hasta el valor de la celda D3, es decir, 0 + 340.

ree







Como resultado, obtengo, la cantidad de 340, correspondiente al mes de enero del año 2020.


Voy a arrastrar una vez, y, obtengo la cantidad de 545, que es la suma de las cantidades 340, y, 205, correspondientes a los meses de enero, y, febrero del año 2020.

ree







Si miramos la función, al arrastrar, la celda D2 no se ha actualizado, entonces, ha sumado desde D2 a D4, es decir, está sumando las cantidades, 0, 340, y, 205, con esto tenemos nuestro segundo acumulado.


=SUMA($D$2:D4)


Arrastremos hasta el final.

ree



















Ya tenemos nuestro acumulado, pero ¿es lo que queríamos?


La respuesta es no, porque para enero del año 2021, el acumulado debía de haberse reiniciado a cero, y, no lo ha hecho, ha seguido sumando las cantidades, como vemos:

ree








Para el mes de enero de 2021, ha sumado el acumulado del año 2020, más la cantidad de enero del año 2021.


Esto lo podíamos arreglar, poniendo un contador al lado de los meses.

ree























El problema es que, con la función SUMA, no podemos hacerlo, porque debemos de movernos entre celdas, pero, ya conocemos la función DESREF, que si nos va a permitir movernos entre celdas.


Realmente, debemos de empezar desde cero el ejercicio, o, ejemplo.


Sabemos que con la función DESREF, especificamos un punto de partida, un numero de filas y columnas a movernos, y, un alto, y, un ancho.


Si en una celda, escribo la siguiente sintaxis:


=DESREF(D3;0;0;1;1)


Le estoy diciendo, que a partir de la celda D3, se mueva cero filas, y, cero columnas, por lo que se queda en la celda D3, ahora, que tome un alto de 1, también sigue en la misma celda, y, un ancho de 1, en conclusión, le estamos diciendo que se quede en la celda D3.


Si cambio el argumento alto, por 2.


=DESREF(D3;0;0;2;1)


Me devuelve una matriz desbordada, con los dos primeros valores.

ree





Si englobamos la función DESREF, dentro de la función SUMA, tendremos un acumulado.


=SUMA(DESREF(D3;0;0;2;1))


Vemos que nos devuelve 545, que es la suma de las dos primeras cantidades.

ree






Creo, que la primera cantidad, debería de ser 340, que corresponde al mes de enero del año 2020, es decir, al primer valor.


Recordamos, que, en la función SUMA, la primera celda a sumar era una celda donde no había nada, pues, aquí debemos de hacer lo mismo, pero en vez de señalar una celda que no tenga nada, el argumento alto de la función DESREF, lo voy a poner en negativo, que es lo mismo, pero, lo voy a poner en 1.


=SUMA(DESREF(D3;0;0;-1;1))


Vemos que obtenemos la primera cantidad, es lo mismo que hicimos en la función SUMA.


Si arrastro no obtendré el acumulado, porque el argumento alto, siempre va a valer 1, y, queremos que sea dinámico.


Podemos crear un contador al lado de cada mes.

ree




















Vamos a cambiar el argumento alto, por el valor de la celda B3, que es donde empieza el contador, lo seguimos dejando en negativo.


=SUMA(DESREF(D3;0;0;-B3;1))


Vemos que tenemos el primar valor, pues, ahora arrastramos, y, tenemos el mismo problema que antes, que no se ha iniciado el acumulado, en el mes de enero del año 2021.


Quiere decir que este contador, aparte, de no ser muy estético, no nos vale, entre otras cosas, porque no es dinámico, porque puede haber más o menos meses.


Pero, si podemos usar el número de mes, para ello, podemos usar la función MES, para ello, en el argumento alto, vamos a poner la función MES sobre la celda C3, que es el primer mes, debe de seguir en negativo.


=SUMA(DESREF(D3;0;0;-MES(C3);1))


Obtenemos la primera cantidad, pues, vamos a arrastrar.


Vemos que ahora el acumulado en el mes de enero del año 2021, toma la cantidad de dicho mes, es decir, se ha reiniciado a cero, porque en esta ocasión, quien manda es el número de mes, y, enero, siempre corresponderá con el número 1.

ree


















Si nos fijamos en la función de enero del año 2021, a partir de la celda D15, no se mueve ni filas, ni columnas, y, toma un alto de 1, y, un ancho de 1, por lo que queda en la misma celda.


=SUMA(DESREF(D15;0;0;-MES(C15);1)


Pues, hemos terminado nuestro ejemplo.



Cálculo de precio por producto


Para el siguiente ejemplo, sigo usando el modelo que suelo usar habitualmente, pero con menos columnas.

ree











El modelo está en formato de tabla, y, se llama ventas.


Tenemos seis modelos, donde tenemos el nombre de la provincia, el centro, los productos vendidos en dichos centros, junto con sus precios, dependiendo del centro donde ha sido vendido el producto, el precio varia.

ree
















En la tabla ventas, debemos de añadir una nueva columna, con el precio del producto para cada centro comercial.


Por ejemplo, el primer centro se llama Sevilla_C.C. Nervión, pero en la tabla ventas, tenemos una columna con la provincia, y, otra columna con el producto.


Debemos de saber la posición que ocupa la primera provincia, y, centro, en el rango H2:H28, donde se encuentran las provincias, centro, productos, y, precios, para ello, voy a usar la función COINCIDIR, donde como argumento valor buscado, es la unión de provincia, junto con el guion bajo, junto la columna ventas.


Lo hare en una celda fuera de la tabla ventas.


=COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro]


Lo buscamos en el rango H2:H28, con una coincidencia exacta.


Cerramos paréntesis, y, aceptamos.


=COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro];H2:H28;0)


Para:

ree




Obtenemos la posición 1.


Para resolver este ejemplo, vamos a usar la función DESREF, pues, vamos a movernos el número de filas devuelto por la función COINCIDIR, a partir de la celda H1.


=DESREF(H1;COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro];H2:H28;0)


Como argumento numero de columnas, no tenemos que movernos, por lo que pongo punto y coma, y, paso al siguiente argumento que es alto, pues ponemos tres.


=DESREF(H1;COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro];H2:H28;0);;3


Como argumento ancho, ponemos 2, cerramos paréntesis, y, aceptamos.


=DESREF(H1;COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro];H2:H28;0);;3;2)


Obtenemos una matriz desbordada de tres filas de alto, y, dos columnas de ancho, con el primer centro y sus productos.

ree





Lo siguiente es buscar el primer producto de la tabla ventas, en la función DESREF, que nos devuelva la columna 2, con una coincidencia exacta.


=BUSCARV(Ventas[@Producto];DESREF(H1;COINCIDIR(Ventas[@Provincia]&"_"&Ventas[@Centro];H2:H28;0);;3;2);2;FALSO)


Obtenemos el precio del primer producto, ahora, movemos esta función a la celda E2, como está dentro de la tabla, se añade una nueva columna, y, se rellenan todas las celdas, por lo que ya tenemos el precio para cada producto, vendido en cada centro comercial.

ree









Lista desplegable con DESREF

En el siguiente ejemplo, tenemos tres columnas, una con provincias, otra con centros comerciales, y, otra con productos.

ree



















Queremos crear una lista desplegable, donde vamos a seleccionar un encabezado, es decir, provincia, centro, o producto, y, una siguiente lista desplegable, donde se rellene con los elementos que pertenezcan al encabezado seleccionado.


Vamos a crear la primera lista, lo haremos en la celda B2, que es fácil, para ello, vamos a la pestaña datos, dentro del grupo, herramientas de datos, hacemos clic en validación de datos.

ree










Se abre la ventana de validación de datos, desplegamos permitir, y, seleccionamos lista.

ree












En la ventana origen, seleccionamos los encabezados.

ree













Aceptamos.


Seleccionamos, por ejemplo, centro.

ree





Pues aquí empieza el ejercicio, ahora, vamos a crear la segunda lista desplegable, con los elementos del centro que hemos seleccionado.


Me voy a colocar en la celda C2.


¿Qué debemos de hacer?


Pues, por ejemplo, si hemos elegido centro en la lista desplegable, quiero decir, que lo primero que debo de hacer, es moverme a dicho encabezado, que sería el encabezado número 2.

ree








Ya conocemos la función COINCIDIR, que nos devuelve la posición de un elemento, dentro de un rango, pues, vamos a buscar en encabezado seleccionado, dentro de los tres encabezados, con una coincidencia exacta.


La sintaxis quedaría:


=COINCIDIR(B2;E1:G1;0)


Vemos que nos devuelve la posición dos, lo siguiente que debemos de hacer, es movernos a dicho encabezado.


=COINCIDIR(I2;E1:G1;0)


Lo siguiente es movernos, a dicho encabezado, sabemos que la a la función DESREF, debemos de indicar un punto de partida, y, numero de filas y columna a movernos, además, tiene otros dos argumentos, que son alto y ancho.


Nosotros vamos a partir de la celda E1.

ree




Nos vamos a mover una fila, que sería el argumento filas, y, una columna, que es el argumento columnas.


=DESREF(E1;1;1)


Vemos que nos devuelve el centro comercial Nervión.

ree








Para hacerlo dinámico, vamos a sustituir el argumento número de columnas de la función DESREF, por la función COINCIDIR.


=DESREF(E1;1;COINCIDIR(I2;E1:G1;0))


Obtenemos aspiradora.


¿Es correcto?


El resultado es correcto, pero no es lo que queremos, porque debería de haber devuelto centro comercial Nervión.

ree






Veamos de donde sale este resultado.


Traduciendo la función DESREF anterior, teniendo seleccionado el encabezado de centro, los valores de los argumentos serian:


=DESREF(E1; 1; 2)


La función DESREF, cuenta un elemento cero, es decir, que el conteo de encabezados para la función DESREF, sería el siguiente:

ree




Como la función COINCIDIR, nos ha devuelto el valor 2, nos ha devuelto el producto, por eso he dicho anteriormente, que el resultado es correcto, para solventar nuestro problema, a la función COINCIDIR, le vamos a restar 1.


=DESREF(E1;1;COINCIDIR(I2;E1:G1;0)-1)


Ahora, tenemos el resultado correcto.

ree






Lo siguiente es decirle cuantas filas debe de tomar, y, cada columna tiene un numero de filas diferente, este seria el argumento alto de la función DESREF.


Por ejemplo, vamos a poner como argumento alto, el valor de 15.


=DESREF(E1;1;COINCIDIR(I2;E1:G1;0)-1;20)


Pues, tenemos el mismo problema que antes, que donde no hay coincidencias, nos poner el valor de cero, y, si creamos una lista desplegable, esos valores no deseados, aparecerán.

La solución del problema es especificar el número de celdas a tomar en cada ocasión.


Y, si, ¿envuelvo la función DESREF, en la función CONTARA?


Deberíamos de contarnos, solo, las celdas ocupadas.


Probemos.


=CONTARA(DESREF(E1;1;COINCIDIR(I2;E1:G1;0)-1;20))


Vemos que nos devuelve 6, que son los centros comerciales, que hay.


Si elijo producto, vemos que nos devuelve 5, que son los productos que hay.

ree






Esto quiere decir, que ya tengo el argumento alto de la función DESREF, pues, copiemos y lo pegamos en el argumento alto de la función DESREF.


Como argumento ancho, ponemos 1, para que se quede en la misma columna.


=DESREF(E1;1;COINCIDIR(I2;E1:G1;0)-1;CONTARA(DESREF(E1;1;COINCIDIR(I2;E1:G1;0)-1;20));1)


Aceptamos, y, podemos ver nuestra lista, solo con los elementos que la componen.

ree











Pues en la celda J2, vamos a crear nuestra segunda lista desplegable, pero, primero copiamos la función, seleccionado, y, pulsando CTRL más C.


Dentro de la ventana de validación, en la ventana de origen, pegamos la función, con CTRL más V.

ree












Aceptamos.


Vemos como se ha creado nuestra segunda lista desplegable, sin errores, si probamos, veremos como se rellana, únicamente, con los elementos del encabezado seleccionado.


Terminamos aquí, nuestro ejemplo.



Para el siguiente ejemplo, tenemos tres secciones, y, los productos que corresponden con cada sección.

ree














Vamos a crear una lista desplegable donde seleccionemos una sección, después, crearemos otra lista desplegable, que deberá ser rellena con los productos de la sección seleccionada.


Para la primera lista, vamos a la pestaña de datos, dentro de obtener y transformar datos, hacemos clic en validación de datos, desplegamos permitir, y, seleccionamos lista, en la ventana de origen, seleccionamos las secciones.

ree












Aceptamos, seleccionamos una sección.


Tenemos que saber dónde comienza la sección seleccionada, para ello, vamos a usar COINCIDIR, donde como argumento valor buscado es la sección seleccionada.


=COINCIDIR(H5


Punto y coma, como argumento matriz buscada, es el rango D6:D18.


=COINCIDIR(H5;D6:D18


Punto y coma, como argumento tipo de coincidencia, ponemos exacta.


Cerramos paréntesis.


=COINCIDIR(H5;D6:D18;0)


Aceptamos, y, tenemos la posición de la sección seleccionada.


Lo siguiente es saber cuantos elementos componen dicha sección, para ello, vamos a usar CONTAR.SI, donde como argumento rango es desde D6 a D18.


=CONTAR.SI(D6:D18


Punto y coma, como argumento criterio, es la sección seleccionada.


Cerramos paréntesis.


=CONTAR.SI(D6:D18;H5)


Aceptamos, como tengo seleccionada la seccion2, ha devuelto 4 elementos.


Pus, ya tenemos el argumento fila, y, alto de DESREF, la sintaxis quedaría:


=DESREF(E5;COINCIDIR(H5;D6:D18;0);0;CONTAR.SI(D6:D18;H5))


Vemos como se rellena con los elementos que corresponden a la lista.


Por último, copiamos la expresión, creamos una lista desplegable, y, en la ventana origen, pegamos la expresión.


Y ya tenemos nuestro ejercicio resuelto.


Veamos otro ejemplo, tenemos los meses desde enero a diciembre con unos valores para cada mes.

ree














El modelo está en formato de rango.


Vamos a crear una columna con cada valor de la celda anterior, pero, no debemos de contar el encabezado.


En la celda C2, podemos DESREF, como argumento referencia, seleccionamos la celda A2, como argumento filas, ponemos -1, para que retroceda una fila, y, como argumento columnas, ponemos 1.


Cerramos paréntesis.


=DESREF(A2;-1;1)


Aceptamos, arrastramos, y, vemos que en la celda C2 aparece el encabezado valores, y, debería de aparecer cero.

ree















Para solventarlo vamos a usar el condicional SI, donde como argumento prueba lógica, vamos a preguntar si la fila de la celda actual es mayor a 2, entonces, debe de ejecutar la función DESREF (valor si verdadero), en caso contrario, debe de poner el numero cero (valor si falso).


Cerramos paréntesis.


=SI(FILA()>2;DESREF(A2;-1;1);0)


Arrastramos, y, ya tenemos en cada celda el valor de la celda anterior, y, en la celda C2, vemos que aparece el numero cero.

ree
















Pero si queremos calcular la diferencia de ventas del mes de la celda actual menos las ventas del mes anterior, vamos a la celda C2, a la barra de fórmulas, en el argumento valor si verdadero, restamos con otro DESREF, pero como argumento referencia, ponemos la celda A1, como argumento filas ponemos 1, como argumento columnas, ponemos 1, y, cerramos paréntesis.


=SI(FILA()>2;DESREF(A2;-1;1)-DESREF(A1;1;1);0)


Pero, si queremos ver los meses donde hubo más ventas que el mes anterior, preguntamos si la expresión anterior es menor a cero, en ese caso, que devuelva el mes de la celda actual, en caso contrario, que devuelva un texto en blanco.


=SI(SI(FILA()>2;DESREF(A2;-1;1)-DESREF(A1;1;1);0)<0;[@Meses];"")

ree
















Miguel Angel Franco

 
 
 

Comments


© 2019 Miguel Ángel Franco García

bottom of page