lunes, 26 de octubre de 2015

Sumar Grupos de n Filas con DESREF

"Tengo un listado con muchos valores y tengo que realizar sumas de varias filas. Estas sumas pueden cambiar, es decir, en ocasiones necesito sumar de 2 en 2 valores; otras de 4 en 4 valores; etcétera. Me gustaría saber si se puede automatizar con fórmulas".

Se puede. Veamos cómo. Partimos del siguiente ejemplo, en el que vamos a manejar una lista de 30 valores:
En el rango B5:B34 generamos un número de orden del 1 al 30:
Habilitamos como entrada de datos el valor de "n", es decir, el valor de "cada cuántas filas" queremos sumar. Para ello disponemos una entrada de datos en las celdas B2 y C2:
Nos situamos en la celda D5 y escribimos la siguiente fórmula:
=SI(RESIDUO(B5;$C$2)=0;SUMA(DESREF(C5;;;-$C$2));"")
y la copiamos hasta el final de la lista de valores (en nuestro caso hasta la celda D34).
La primera parte de la fórmula comprueba si el número de orden es múltiplo del valor de n (el valor introducido en C2). Si no lo es, el residuo del cociente no será cero y, por lo tanto, no pondrá nada, ya que es lo que le hemos indicado en la segunda parte del condicional (que escriba ""). Si el número de orden es múltiplo del valor introducido en C2, entonces el residuo del cociente será cero y ejecutará la parte de la fórmula:
SUMA(DESREF(C5;;;-$C$2))  
En nuestro ejemplo, en la celda D7 excel se encontrará que el número de orden de esa fila es el 3 y que dicho número sí es múltiplo del introducido en C2, que es 3. Al estar 2 celdas más abajo que la fórmula original ésta se habrá transformado en (la parte que hace referencia a la suma) SUMA(DESREF(C7;;;-$C$2))  que significa que sume tres celdas hacia arriba desde C7 (incluyendo C7). Es hacia arriba porque al 4º argumento de la función DESREF, Alto, le hemos puesto signo negativo. Veamos el resultado con distintos valores en la celda C2 (valores de n):


sábado, 17 de octubre de 2015

Series con Repetición

"Necesito generar una serie, con incremento de uno en uno, que repita los valores un determinado número de veces. Por ejemplo 1-1-1, 2-2-2, 3-3-3, 4-4-4, etc o, por indicar otro ejemplo, 4-4-4-4-4, 5-5-5-5-5, 6-6-6-6-6, etc".

Para resolver este problema, utilizaremos una única fórmula con las funciones SI, CONTARA y RESIDUO.

Partimos del siguiente modelo:
En la celda C3 tenemos el número de veces que queremos que se repita cada valor, y en E3 el número en el que queremos que comience la serie.
Nos situamos en la celda E4 y escribimos la siguiente fórmula (que copiamos hacia abajo hasta la celda que necesitemos en función del tamaño de la serie que queramos generar):

=SI(RESIDUO(CONTARA($E$3:E3);$C$3)=0;E3+1;E3)

sábado, 26 de septiembre de 2015

Insertar n Filas en Blanco Sin Macros

"Tengo más de 450 registros y necesito insertar 5 filas en blanco entre cada registro".

En mi post Insertar Filas Intercaladas,  vimos como insertar una fila en blanco entre registros de una manera muy sencilla. A continuación voy a explicar, de manera también muy sencilla y sin hacer uso de macros, como resolver este problema tan habitual. Partimos del siguiente ejemplo:

Y lo que queremos conseguir es lo siguiente:

* Para ello nos situamos en la celda B4 y escribimos un 1.
* En la celda B5 escribimos la fórmula =B4+6, es decir, la celda anterior más el número de filas que queremos que aparezcan en blanco más uno (en nuestro ejemplo son 6 porque 5 filas en blanco más 1).
* Copiamos hasta el final de nuestra tabla, esto es, hasta B13:

* Nos situamos en B14 y escribimos la fórmula =B4+1.
* Tenemos 10 registros y, además, queremos incluir 5 filas en blanco por registro. Por lo tanto: 10+(10*5) = 60. Por lo tanto copiamos la fórmula de B14 hacia abajo hasta alcanzar el resultado 60:
* Ahora seleccionamos B4:B63 y copiamos y pegamos como valores
* Finalmente, nos situamos en la celda B4 y vamos a ordenar de menor a mayor:
Y ya está. La filosofía es muy similar a la planteada en el post de Insertar Filas Intercaladas, pero este caso nos sirve para cualquier número de filas en blanco:

miércoles, 26 de agosto de 2015

Ordenar con Fórmulas en Base a dos Criterios

"Mi pregunta es la siguiente ¿Cómo solucionar el ordenar con fórmulas una lista con cifras repetidas utilizando una segunda variable? En el ejemplo que nos muestras en Ordenar Automáticamente una Lista con Valores Repetidos me interesa ordenar los casos repetidos teniendo en cuenta el número de empleados de cada zona. Es decir, que quede por delante, en caso de iguales ventas, la zona que menos empleados tenga".

Empecemos recordando el ejemplo en cuestión y añadiéndole, de paso, la columna de número de empleados:
Como se puede comprobar, hay zonas que obtienen idéntica cifra de ventas, como por ejemplo Galicia, Asturias y Madrid o Aragón y País Vasco, etcétera. En el post Ordenar Automáticamente una Lista con Valores Repetidos resolvimos la cuestión de ordenar automáticamente (con fórmulas) esta lista y, por otro lado, resolvimos el problema de encontrarnos con valores repetidos. En este caso lo que buscamos es ordenar por medio de fórmulas esta lista pero en base no a uno si no a dos criterios. Es decir, que primero ordene las zonas en base a la cifra de ventas y que en aquellos casos en los que haya empate sea el número de empleados el criterio a seguir para establecer el orden.
Lo primero que hacemos es crear una columna para realizar un proceso intermedio, a la que llamaremos Proceso1:
La fórmula que he escrito en la celda G3 y que después he copiado hasta G14 es:
=D3+1-(E3/10000)
Lo que hago es sumar a la cifra de ventas el número de empleados pero "ponderándolo". Al dividir la cifra de empleados por un número lo suficientemente grande lo que conseguimos es que al sumárselo a la cifra de ventas no altere la parte entera de dicho número (por lo que la cifra de ventas será el primer elemento de orden) pero pueda establecer una jerarquía con los decimales. El problema aquí es que queremos que aparezca primero la zona con más ventas PERO con MENOS empleados. Para conseguir esto lo que hacemos es restarle a 1 el resultado del cociente que acabo de explicar, o lo que es lo mismo:
1-(E3/10000). Con esta expresión no alteramos la parte entera de las ventas y conseguimos establecer un orden de menor a mayor con los decimales. Así las cosas, aplicamos ahora la función JERARQUIA: En la celda I3 escribimos la fórmula:
=JERARQUIA(G3;$G$3:$G$14)   y la copiamos hasta la celda I14:
Procedemos ahora a identificar cada una de estas cifras con la zona en cuestión. Para ello preparamos la siguiente salida de datos:
Nos situamos en la celda C18 y escribimos:
=INDICE($C$3:$C$14;COINCIDIR($B18;$I$3:$I$14;0))   y copiamos hasta C29:
En D18 escribimos:
=BUSCARV($C18;$C$3:$E$14;2;FALSO)   y copiamos hasta D29.
En E18 escribimos:
=BUSCARV($C18;$C$3:$E$14;3;FALSO)   y copiamos hasta E29:
Problema resuelto!

martes, 21 de julio de 2015

Máximo de un Alfanumérico

"Tengo un listado en el que llevo el seguimiento de varias ordenes. Todas ellas están compuestas por un código único alfanumérico de 7 caracteres. Los tres primeros son siempre el texto GIO y los otros cuatro son números. Necesito hallar el código más alto en función de su número".

Partimos del siguiente ejemplo:

Al tratarse de entradas alfanuméricas (texto y números) excel las considera texto y, en consecuencia, no podemos utilizar directamente la función MAX. Podemos resolver el problema de diferentes maneras. Una muy sencilla es "trocear" las entradas para separar la parte de texto de la de número. Para ello generamos una columna de proceso:
En la celda D6 escribimos la fórmula:
=VALOR(DERECHA(H6;4))   y la copiamos hasta D23.

De esta manera estamos obteniendo los 4 dígitos con la función DERECHA, y convirtiendo dichos dígitos, que hasta aquí excel trata como texto, a números con la función VALOR: 
Nos situamos ahora en la celda B3 y escribimos la siguiente fórmula:
Lo que estamos haciendo es CONCATENAR el texto "GIO", con el que comienzan todos los códigos del listado, con el valor MÁXIMO  de los números:
Podemos concluir aplicando Formato Condicional al rango B6:B23 para que destaque el máximo valor, como se muestra en la imagen.