La solucin es muy sencilla utilizando una sola frmula matricial con las
funciones SUMA, SI y LARGO. Partimos de la siguiente entrada de datos:
Para resolver este problema, utilizaremos una nica frmula con las
funciones SI, CONTARA y RESIDUO.
Partimos del siguiente modelo:
En la celda C3 tenemos el nmero de veces que queremos que se repita cada valor, y en
E3 el nmero en el que queremos que comience la serie.
Nos situamos en la celda E4 y escribimos la siguiente frmula (que copiamos hacia abajo
hasta la celda que necesitemos en funcin del tamao de la serie que queramos generar):
=SI(RESIDUO(CONTARA($E$3:E3);$C$3)=0;E3+1;E3)
Publicado por Kiko Rial a las 13:39
Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con
FacebookCompartir en Pinterest
Etiquetas: CONTARA, RESIDUO, SI
4 comentarios:
1.
Hola Kiko,
=COCIENTE(FILA(A1);$C$3)+$E$3
Arrastrar hacia abajo para rellenar la serie hasta donde haga falta.
Insertar n Filas en Blanco Sin Macros
"Tengo ms 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 continuacin voy a explicar, de manera tambin
muy sencilla y sin hacer uso de macros, como resolver este problema tan habitual.
Partimos del siguiente ejemplo:
Como se puede comprobar, hay zonas que obtienen idntica cifra de ventas, como por
ejemplo Galicia, Asturias y Madrid o Aragn y Pas Vasco, etctera. En el post Ordenar
Automticamente una Lista con Valores Repetidos resolvimos la cuestin de ordenar
automticamente (con frmulas) 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 frmulas 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 nmero 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 frmula que he escrito en la celda G3 y que despus he copiado hasta G14 es:
=D3+1-(E3/10000)
Lo que hago es sumar a la cifra de ventas el nmero de empleados pero "ponderndolo".
Al dividir la cifra de empleados por un nmero lo suficientemente grande lo que
conseguimos es que al sumrselo a la cifra de ventas no altere la parte entera de dicho
nmero (por lo que la cifra de ventas ser el primer elemento de orden) pero pueda
establecer una jerarqua con los decimales. El problema aqu es que queremos que
aparezca primero la zona con ms 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 expresin 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 funcin JERARQUIA: En la celda I3 escribimos la frmula:
=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 cuestin. 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!
Mximo de un Alfanumrico
"Tengo un listado en el que llevo el seguimiento de varias ordenes. Todas ellas estn
compuestas por un cdigo nico alfanumrico de 7 caracteres. Los tres primeros son
siempre el texto GIO y los otros cuatro son nmeros. Necesito hallar el cdigo ms alto en
funcin de su nmero".
Lo que estamos haciendo es CONCATENAR el texto "GIO", con el que comienzan todos
los cdigos del listado, con el valor MXIMO de los nmeros:
Podemos concluir aplicando Formato Condicional al rango B6:B23 para que destaque el
mximo valor, como se muestra en la imagen.
Partimos del siguiente ejemplo. En la HOJA 1 tenemos los siguientes datos originales:
Tenemos adems, en nuestro ejemplo, tres hojas con listas con registros. Lo que
queremos es contar cuntas veces se repite cada uno de los nmeros de la lista original
en cada una de las listas de las distintas hojas:
Lo primero que vamos a hacer es dar nombre a las listas de las hojas 2, 3 y 4. Para ello
vamos a la hoja 2 y seleccionamos el rango A1:A19 y vamos a la ficha Frmulas y
pulsamos en Crear desde la seleccin. En la ventana que se nos abre aceptamos con Fila
superior marcado:
De esta manera ya tenemos el nombre LISTA1 creado. Hacemos lo mismo con las listas
de las hojas 3 y 4. Volvemos a la primera hoja y preparamos la salida de datos:
Nos situamos en la celda D3 y escribimos la siguiente frmula (que copiaremos hasta F3
y, posteriormente, hasta F20):
=CONTAR.SI(INDIRECTO(D$2);$B3)
De esta manera, estaremos contando cuntas veces se repiten cada uno de los registros
del rango B3:B20 en las distintas listas de las otras hojas (la funcin INDIRECTO tomar
el nombre del rango correspondiente de la fila 2):
Dgitos Duplicados en Distinto Orden
"Tengo un listado de valores de tres dgitos y necesito detectar cules estn duplicados
en el mismo o distinto orden. Por ejemplo 123, 231, 456, 456, 564, etctera".
=SUMA(K.ESIMO.MENOR(CODIGO(EXTRAE(B2;FILA(INDIRECTO("1:"&L
ARGO(B2)));1));FILA(INDIRECTO("1:"&LARGO(B2))))*POTENCIA(256;FIL
A(INDIRECTO("1:"&LARGO(B2)))-1))
Empezamos por el Paso 1 generando una lista de valores nicos. Para ello nos situamos
en la celda C3 y escribimos la frmula (que copiamos posteriormente hasta la celda C28):
=SI(B3="";"";SI(CONTAR.SI($B$3:B3;B3)>1;"";B3))
De esta manera ya tenemos nuestro listado original "filtrado" con los valores nicos. A
continuacin, en la celda D3 escribimos un 1 y en la celda D4 un 2. Seleccionamos
ambas, y copiamos hasta la celda D28 para generar un nmero de orden:
Nos situamos ahora en la celda F3 y procedemos con la siguiente frmula (que copiamos
hasta F28):
=K.ESIMO.MAYOR($C$3:$C$28;D3)
De esta manera ya tenemos ordenada la lista de valores nicos de mayor a menor,
dejando las celdas en blanco con el mensaje de error #NUM! agrupadas al final de dicha
lista:
Seleccionamos ahora el rango E3:E28 y escribimos la frmula: =ALEATORIO() y
acabamos pulsando Ctrl + Enter:
Ya tenemos todos los ingredientes para poder proceder con la "formulita final". Para ello
preparamos la zona de salida de datos en la columna I:
Nos situamos en la celda I4 y escribimos:
=BUSCARV(JERARQUIA(E3;$E$3:DESREF($E$2;CONTAR($F$3:$F$28);));
$D$3:$F$28;3;FALSO)
CONTAR nos permite saber cuntas celdas contienen un nmero (y por tanto no son un
error tipo #NUM!). Con la funcin JERARQUIA vamos a obtener el puesto relativo que
ocupa E3 dentro del rango dinmico de, en nuestro ejemplo, E3:E17 (ya que el resto de
valores aleatorios se corresponden con un valor de error tipo #NUM!). Una vez obtenido
el puesto relativo, por ejemplo si obtenemos el 5, le pedimos que, por medio de la
funcin BUSCARV, busque dentro del rango D3:F28 en la primera columna dicho valor y
nos devuelva su correspondencia en la tercera columna, que en nuestro ejemplo se
corresponde con el valor 57.
Si copiamos la frmula de I4 hasta I9 ya tendremos nuestros seis valores aleatorios sin
repeticin y evitando las celdas en blanco:
En esta ocasin vamos a comenzar con una imagen de lo que queremos evitar:
Con esta frmula, en C4 excel evala si C3 es distinto de "", o lo que es lo mismo, si hay
algo en C3. Si hay algo permite escribir y si no hay nada ("") entonces no permite escribir
en C4. En la celda C5 excel evala si el rango $C$3:C4 es distinto de "". En C6 excel
evala si el rango $C$3:C5 es distinto de "". Etctera. Si intentamos introducir ahora un
valor saltndonos alguna fila ocurrir lo siguiente:
Valores nicos No Repetidos
"Necesito encontrar valores nicos en una tabla (entendiendo por nicos aquellos valores
que aparecen una y slo una vez en el listado) y obtener un nuevo listado donde slo se
consideren los valores nunca repetidos (y que el resto de valores desaparezcan)".
Como siempre no hay problema. Pero antes de nada hoy toca felicitar a mi amigo del
alma Don Jos: Muchas felicidades hermano!! Tendremos que celebrarlo, a ser posible en
esa vuestra marisquera a la que tantos premios os dan...
y copiamos hasta la celda H16. De esta manera estamos concatenando primero el primer
apellido; despus un espacio en blanco; inmediatamente el segundo apellido; ahora una
coma y un espacio en blanco y, finalmente, el nombre. De esta manera, en la celda H3,
por ejemplo, aparecer Arnaiz Guerra, Begoa:
Como no existe una funcin en excel que ordene directamente texto, vamos a utilizar una
frmula matricial para asignarle un nmero de orden a cada registro. Primero le doy
nombre al rango H3:H16. Selecciono dicho rango y en el cuadro de nombres
escribo ApNombre, y pulsamos enter para acabar. Vamos a G3 y escribimos:
Para solucionar este problema, tendremos que utilizar varias funciones y herramientas as
que, como dijo Jack el destripador, vamos por partes...
Si nos fijamos en la imagen, lo que hemos conseguido es generar una lista ordenada
(Lista3) de los colores que todava no hemos elegido. A partir de aqu podemos hacer dos
cosas, a saber: generar directamente la lista desplegable en las celdas B3:B16 a partir del
rango Lista3 (en este caso aparecern slo los colores no elegidos pero con espacios en
blanco en la lista); o generar un rango dinmico para ajustar la lista desplegable a slo los
colores que aparecen en la Lista3. Vamos a ver las dos opciones. En cualquier caso
empezamos por crear el nombre Lista3 para el rango L3:L11.
Opcin 2: Creamos un rango dinmico para evitar filas en blanco dentro del desplegable.
Para ello seleccionamos el rango B3:B16 vamos a Validacin de datos/Permitir: Lista y
en Origen escribimos:
=DESREF($L$2;1;;CONTAR.SI($K$3:$K$11;"<>0")) y aceptamos (para ms
informacin sobre esta frmula vase el post Lista Desplegable con Rango Dinmico):
Evitar Cdigos Duplicados en Varias Columnas
"Tengo una tabla con cdigos en las columnas A y C, y quiero introducir nuevos cdigos
en la columna B, pero evitando que se puedan repetir los que ya se encuentran en dichas
dos columnas y que, por otro lado, tampoco se puedan repetir los nuevos que voy
introduciendo en la columna B".
=Y(CONTAR.SI(CodigoA;B4)=0;CONTAR.SI(CodigoC;B4)=0;CONTAR.SI($B$4:B4;B4)=1)
Una vez aceptemos, excel verificar, para cada una de estas celdas (B4:B16), que los
valores que vayamos introduciendo no se encuentran repetidos en las columnas A y C
=Y(CONTAR.SI(CodigoA;B4)=0;CONTAR.SI(CodigoC;B4)=0 y, adems, verifica que no
se duplican los nuevos valores que vayamos introduciendo en la columna B
CONTAR.SI($B$4:B4;B4)=1)
Para solucionar esta variacin sobre el caso visto en el post Seleccionar Aleatoriamente
un Valor de un Conjunto, vamos a generar una tabla auxiliar que nos permita "apartar" las
celdas que se encuentran vacas para que no se puedan generar valores cero en el
resultado. Partimos del siguiente ejemplo:
Queremos obtener aleatoriamente un valor de esta lista pero sin considerar las celdas en
blanco. En la solucin proporcionada en la primera versin de este problema, generamos
un nmero aleatorio de posicin para que excel me devuelva el valor existente en dicha
celda. Es decir, si mi lista tiene 20 valores, genero un nmero aleatorio entre el 1 y el 20 y
le pido a excel que vaya a la celda del nmero obtenido, por ejemplo la 4, y me devuelva
el valor de dicha celda. Aplicando dicha solucin a esta lista, nos podramos encontrar con
que en la cuarta celda de la lista la celda est vaca (obtendramos valor cero).
Para evitar solucionarlo de manera manual, lo que nos llevara bastante tiempo, existe
una manera razonablemente sencilla y razonablemente automtica y que no requiere de
programacin. Partimos de una tabla con distintos datos. En nuestro ejemplo utilizaremos
50 registros:
Vamos a manejar dos hojas dentro del archivo para mayor seguridad. La tabla de la
imagen la tenemos en la hoja 2. Lo primero que debemos hacer es crear un nmero de
orden para los registros. Para ello escribimos un 1 en A3, un 2 en A4 y seleccionamos
ambos (A3:A4). Hacemos doble clic en la parte inferior derecha del rango seleccionado y
de esta manera rellenamos la serie hasta el ltimo dato.
Nos vamos ahora a la HOJA1. Preparamos la siguiente entrada de datos:
En D1 introducimos el nmero de fila que debe quedar en blanco. Si queremos dejar en
blanco la quinta fila de nuestra tabla escribiremos un 5. En D2 introducimos el valor del
ltimo dato de nuestra tabla de la HOJA2. En nuestro ejemplo hay 50 registros y, por lo
tanto, el valor ser 50.
En E4 vamos a calcular cuntas filas se van a insertar en total. La frmula es:
=SI(RESIDUO(D2;D1-1)=0;(D2/(D1-1))-1;TRUNCAR(D2/(D1-1)))
En E5 calculamos cul ser el ltimo nmero de nuestra nueva lista. La frmula es:
=E4+D2 es decir, el nmero de filas inicial ms las que se van a insertar.
Lo que queremos conseguir es hacer una sola frmula que podamos copiar hacia abajo
para obtener un listado como el que aparece en la siguiente imagen con las cantidades de
cada dato:
Para ello vamos a utilizar varias funciones, a
saber: INDIRECTO, DIRECCION, FILA y COLUMNA.
Nos situamos en la celda G4 y escribimos la siguiente frmula que copiaremos hasta G11:
=INDIRECTO(DIRECCION(FILA(C4)*2-4;COLUMNA(C4)))
De esta manera ya tenemos las direcciones de las celdas que queremos obtener. Slo
nos falta utilizar una funcin que transforme el nombre de la celda en el valor que contiene
la misma. Esta funcin es INDIRECTO.
Aunque el problema ya est resuelto, nos podramos encontrar un pequeo problema y es
que si ahora aadimos filas por encima de la fila 4 entonces dejar de funcionar. Para
evitar esto podemos hacer uso del siguiente "truco". Creamos un nombre para el primer
dato. Nos situamos en la celda C4, vamos a la lista de nombres (a la izquierda de la barra
de frmulas) y escribimos el nombre, por ejemplo, Dato1 y pulsamos Enter. A partir de
ahora la celda C4 se llama Dato1. Nos situamos en G2 y escribimos la frmula:
=FILA(Dato1)
De esta manera obtendremos el nmero de fila en el que se encuentra el primer dato de
forma variable. Podemos ahora incorporarlo a nuestra frmula original y problema
resuelto:
=INDIRECTO(DIRECCION(FILA(C4)*2-$G$2;COLUMNA(C4)))
=INDICE(Datos;FILA(A1)*2-1;1)
=INDICE(Datos;FILA(A1)*2;1)
=INDICE(Datos;FILA(A1)*2-1;2)
=INDICE(Datos;FILA(A1)*2;2)
=SI.ERROR(INDICE(Datos;FILA(A1)*2-1;1);"")
=SI(N(ES.PAR(VALOR(DERECHA(B3;1))))=0;"";VALOR(DERECHA(B3;4)))
DERECHA(B3;1) esta parte de la frmula extrae 1 dgito empezando por la derecha del
texto existente en B3. Aunque se trata "visualmente" de un nmero, excel lo trata como
texto por formar parte precisamente de una cadena de texto. Para convertirlo en nmero
utilizamos la funcin VALOR, a saber: VALOR(DERECHA(B3;1)).
Una vez hecho esto, procedemos a comprobar si el dgito que acabamos de extraer es
par o no. Para ello utilizamos la funcin ES.PAR, ES.PAR(VALOR(DERECHA(B3;1)))
que nos devolver el resultado VERDADERO o FALSO. Para convertir
este VERDADERO FALSO en 1 0 utilizamos la funcin N (tambin podramos poner
dos signos negativos consecutivos -- en vez de dicha funcin)
N(ES.PAR(VALOR(DERECHA(B3;1)))).
Ya slo nos queda anidar esta frmula dentro de un condicional para que si el ltimo
dgito no es un nmero par (y por lo tanto la
frmula N(ES.PAR(VALOR(DERECHA(B3;1)))) ser igual a 0) no escriba nada o, en caso
contrario, que escriba los 4 dgitos del cdigo como valor: VALOR(DERECHA(B3;4)).
Ahora generamos una columna auxiliar para generar un nmero de orden de los distintos
vendedores. Nos situamos, por ejemplo, en la celda F7 y escribimos la frmula:
=INDICE(unidades;COINCIDIR(C2&CONTAR.SI(vendedor;C2);F7:F22;0))
Para solucionar este problema haremos uso de la funcin CELDA. Partimos del siguiente
ejemplo:
tipo_de_info Devuelve
"ARCHIVO"
Valor 1 si la celda tiene formato con parntesis para los valores positivos
"PARENTESIS"
o para todos los valores; de lo contrario, devuelve 0 (cero).
Como se puede ver, en aquellas celdas que tenemos formato de fecha obtenemos la
referencia D1. Haciendo uso de la ayuda de Excel, la siguiente lista describe los valores
de texto que devuelve la funcin CELDA cuando el argumento tipo_de_info es "formato":
Estndar "G"
0 "F0"
#.##0 ".0"
0,00 "F2"
#.##0,00 ".2"
$#,##0_);($#,##0) "C0"
$#.##0;(rojo)-$#.##0 "-M0"
$#.##0,00_);($#.##0,00) "C2"
$#.##0,00;(rojo)-$#.##0,00 "-M2"
Si el formato de Excel es La funcin CELDA devuelve
0% "P0"
0,00% "P2"
0,00E+00 "C2"
d-mmm "D2"
mmm-aa "D3"
mm/dd "D5"
h:mm "D9"
h:mm:ss "D8"
Como se puede comprobar, todos los formatos de fecha comienzan por la letra D. Por ello
hacemos ahora la siguiente frmula en la celda D3:
=SI(IZQUIERDA(E3;1)="D";"S";"No") y copiamos hasta la celda D9:
Evidentemente, podramos resolver el modelo con una nica frmula en D3 que nos
evitara la columna E, a saber:
=SI(IZQUIERDA(CELDA("formato";B3);1)="D";"S";"No")
Si queremos destacar en otro color aquellas entradas que son fechas entonces tenemos
que hacer uso de la herramienta de Formato condicional. Para ello seleccionamos el
rango B3:B9 y vamos a Formato condicional y formulamos como se detalla en la imagen a
continuacin:
Transponer con la Funcin DESREF
"Al importar informacin de la base de datos de mi empresa sobre clientes y sus
direcciones, obtengo en una sola columna y en 4.000 filas los datos referentes a nombre,
direccin, cdigo postal y ciudad. Lo que necesito es reordenar esta informacin en
cuatro columnas en la que la primera sea el nombre, la segunda la direccin, etctera."
Para realizar esta tarea no podemos utilizar directamente la opcin de Pegado especial
transponer porque, evidentemente, nos transformara la matriz actual de 1 columna y
4.000 filas en 4.000 columnas y 1 fila. Por ello vamos a hacer uso de la funcin DESREF
para transponer la informacin pero como nos interesa. Para hacer ms manejable el
ejemplo partiremos de una lista con 20 filas, como se muestra a continuacin:
Lo que pretendemos conseguir es lo siguiente:
Empezamos contando el nmero de entradas que tenemos y que en nuestro ejemplo es
de 20 filas (desde B3 hasta B22). Queremos generar una matriz (una tabla) con cuatro
columnas. As las cosas, si dividimos el nmero de filas de partida (20) por dicho nmero
de columnas (4) obtendremos el nmero de filas resultantes, esto es, 5. Esto es
importante porque lo primero que tenemos que hacer es generar una lista de nmeros
partiendo de 0 y creciendo de 4 en 4. El motivo es que la informacin original de cada
campo dista entre si exactamente 4 filas. Es decir el cliente 1 est en B3 el 2 en B7, el 3
en B11, etctera. Entre estas celdas hay 4 filas. Lo mismo nos pasar si tomamos los
datos de la direccin, B4, B8, B12, etctera.
Una vez escrito los rtulos en el rango E2:H2, nos situamos en D3 y escribimos 0. En D4
escribimos 4. Seleccionamos D3:D4 y copiamos hacia abajo rellenando la serie hasta 16
(nuestras 5 filas):
Nos situamos ahora en E3 y escribimos la frmula:
=DESREF($B$3;$D3;0)
Esto significa que que partiendo de la celda B3 "me traiga" el valor que se encuentra el
nmero de filas D3. Como en D3 tenemos el valor 0, nos devolver el valor de la celda
B3, ya que le estamos diciendo que se desplace 0 filas y 0 columnas (el cero de las
columnas lo podramos omitir ya que no nos vamos a desplazar de columna). Al copiar
esta frmula en E4 se transformar en =DESREF($B$3;$D4;0) lo que significa que
partiendo de B3 debe desplazarse el nmero de filas que le indique D4, y que en nuestro
ejemplo es el valor 4. Por lo tanto "nos traer" el valor de la celda B7, que es la que se
encuentra 4 filas por debajo de B3. Copiamos entonces la frmula de E3 hasta la celda E7
y ya tendremos el primer campo resuelto:
No hay problema. Vamos a ver distintas opciones que nos ofrece excel para que al
ingresar la primera letra (o ms) de una lista desplegable nos autocomplete la bsqueda.
Para ello partimos del siguiente ejemplo:
A continuacin vamos a crear la lista desplegable. Para ello abrimos la ficha de
programador y hacemos clic en Insertar:
Dentro de las opciones de Controles ActiveX hacemos clic en la segunda, que es Cuadro
Combinado (control de ActiveX):
Una vez seleccionado ya podemos dibujar en la hoja la lista desplegable:
Ahora hacemos un clic encima del cuadro combinado que tenemos en la hoja:
Dentro de la ficha Programador, hacemos clic en Propiedades:
El pasado lunes 30 de junio les promet a mis alumnos del Master in Management del IE
Business School que les dedicara el prximo post que publicase. Vaya pues por delante
la dedicatoria y mi agradecimiento a una clase maravillosa!
Vamos a resolver el problema planteado con una sencilla frmula utilizando la funcin
lgica SIy acabando con un Ctrl + Enter. Partimos del siguiente ejemplo:
Se trata de una matriz de 8x10 (8 columnas y 10 filas) y lo que buscamos es transformar
los nmeros que aparecen en 1 y 0. Para ello necesitamos un criterio, es decir, un valor,
por ejemplo, a partir del cul los valores inferiores se conviertan en uno y, por contra, los
valores superiores se conviertan en cero. Dicho criterio lo tenemos en la celda C2. Lo que
hacemos a continuacin es seleccionar una matriz de la misma dimensin, es decir,
seleccionar un rango de 8 columnas por 10 filas. Lo hacemos en B19:I28
Con dicho rango seleccionado escribimos la frmula: =SI(B5<$C$2;1;0) y finalizamos
pulsando Ctrl + Enter. De esta manera rellenamos de una sola vez toda la matriz
resultante:
Si adems queremos que, por ejemplo, los 1 se destaquen en negrita y cambie el color de
fondo, podemos aplicar Formato condicional. Para ello dentro de la
ficha Inicio seleccionamos Formato condicional. En el men que se abre
seleccionamos Resaltar reglas de celdas y, en el nuevo men, Es igual a... Aparecer la
siguiente ventana:
Escribimos un 1, dejamos el formato que aparece (si queremos aplicar cualquier otro
abrimos la lista y marcamos Personalizado) y pulsamos Aceptar. El resultado ser el
deseado:
Y problema resuelto. Cada vez que pulsemos F9 estaremos generando una nueva
combinacin. Como sugerencia se podra utilizar la funcin CONCATENAR (&) para
presentar el resultado unido y con texto. La frmula en F3 sera:
=JERARQUIA(H3;$H$3:$H$12)&" con "&JERARQUIA(I3;$I$3:$I$12)+10
Clculo de Combinaciones
" En mi trabajo tengo que calcular con bastante frecuencia el nmero de combinaciones
posibles de un determinado nmero de elementos (15 normalmente) en grupos de distinto
tamao. Hay alguna funcin de excel que lo calcule directamente? ".
S (y gracias que esta vez me lo habis puesto facilito...). La funcin es COMBINAT, que
calcula, precisamente, el nmero total de grupos posibles para un nmero determinado de
elementos. Para evitar malentendidos es necesario aclarar que cuando hablamos de
combinaciones el orden no importa. Si tengo, por ejemplo, que preparar un sandwich y
dispongo de 4 ingredientes, queso, jamn, lechuga y huevo, y quiero saber cuntas
combinaciones son posibles de 3 ingredientes entonces obtendr 4 combinaciones, a
saber: [queso, jamn, lechuga] [queso, jamn, huevo] [queso, lechuga, huevo] [jamn,
lechuga, huevo].
SUMAPRODUCTO es una funcin que suma el producto de dos rangos (rangos que
deben tener la misma dimensin). Si la frmula
fuese =SUMAPRODUCTO(B3:B10;C3:C10) excel ejecutara (B3*C3)+(B4*C4)+(B5*C5)...
Al introducir un criterio en la funcin (en nuestro caso el criterio es que el primer rango sea
=$B3 y que el segundo sea =$C3) , excel genera una matriz de resultados tipo
VERDADERO/FALSO que al multiplicarlo por 1 se convierte en una matriz del tipo 1/0. De
esta manera estamos consiguiendo valores 1 para el rango B3:B10 en aquellos casos en
los que un cdigo est repetido y valores cero para los que no lo estn.Y lo mismo en el
rango C3:C10. Al combinar ambos resultados obtendremos valores mayores de 1 para
aquellas combinaciones repetidas. Para aplicar esta formulacin directamente en la
herramienta de Formato Condicional debemos especificar una condicin que,
nuevamente, genere un resultado tipo VERDADERO/FALSO. Es por ello que introducimos
el >1 del final de la frmula. El resultado es el siguiente:
Esta frmula comprueba si los valores existentes en el rango B3:B16 son mayores que el
valor en D3 (en nuestro caso este valor es cero). Si se cumple esta condicin entonces
aplicar el producto entre los valores de dicho rango que cumplan tal restriccin:
Podemos cambiar el lmite en D3 y automticamente se recalcular el producto:
Promedio Mvil de x Meses
"Tengo un histrico con la cifra de ventas mensual y me gustara poder calcular el
promedio de ventas de los ltimos x meses hasta la fecha de hoy".
Vamos a calcular el NPS haciendo uso de las funciones CONTAR.SI y CONTAR partiendo
del siguiente ejemplo:
Lo primero que hacemos es darle nombre al rango B3:C14 para lo que seleccionamos
dicho rango y hacemos clic en el cuadro de nombres (a la izquierda de la barra de
frmulas) y escribimos Valores y pulsamos Enter. A continuacin preparamos el rango
donde aparecern los valores no repetidos. Habilitamos 24 filas ya que en nuestro
ejemplo partimos de 2 columnas con 12 datos cada una y, por lo tanto, podramos llegar a
tener 24 valores no repetidos. Le aadimos a la derecha un nmero de orden que
utilizaremos posteriormente:
Nos situamos en la celda G3 y escribimos la frmula:
=SI(CONTAR.SI(valores;B3)=1;B3;"") y la copiamos hasta la celda G14.
De esta manera lo que estamos haciendo es pedirle que cuente en el rango llamado
Valores cuntas veces se repite cada uno de los valores de la columna B. Si se repite slo
una vez que lo escriba y si se repite ms veces que no ponga nada ("").
Nos situamos ahora en G15 y escribimos una frmula casi idntica:
=SI(CONTAR.SI(valores;C3)=1;C3;"") y la copiamos hasta la celda G26. Estamos
haciendo lo mismo que antes pero ahora con los valores de la columna C. El resultado
ser el siguiente:
Como puede comprobar, ya hemos generado la lista de valores no repetidos. Para
ordenarla de mayor a menor nos situamos en la celda E3 y escribimos:
=SI.ERROR(K.ESIMO.MAYOR($G$3:$G$26;H3);"") y copiamos hasta la celda E26.
Con la funcin K.ESIMO.MAYOR ordenamos los valores de mayor a menor. En los
valores que se encuentre en blanco nos devolver el error N#A y por eso utilizamos la
funcin SI.ERROR para que cuando aparezca dicho error simplemente lo mantenga como
celda en blanco (para ser ms correctos celda con ""). Aplicamos formato condicional a
aquellas celdas distintas de "" (puede consultar cmo hacerlo en el post Lista de valores
nicos):
Finalmente vamos a destacar en nuestra entrada de datos aquellos valores que no estn
repetidos. Seleccionamos el rango B3:C14 y vamos a Formato Condicional.
Seleccionamos la opcin Utilice una frmula que determine las celdas para aplicar
formato y escribimos la frmula =CONTAR.SI($B$3:$C$14;B3)=1 Pulsamos el botn
formato y elegimos que colores u otros formatos deseamos utilizar y acabamos
pulsando Aceptar. El resultado final es el que se puede observar a continuacin:
Seleccionar Aleatoriamente un Valor de un Conjunto
"En una columna tengo un conjunto de valores del tipo 1, 1, 2, 5, 6, 6, 8, 2, 8, 1, 5,
etctera, y quiero seleccionar de manera aleatoria uno de estos valores".
Anidando las tres funciones citadas podemos resolverlo en una sola frmula pero
empezar detallando paso a paso para su mejor comprensin:
Lo primero es obtener la posicin del espacio para cada cdigo. Esto lo podemos hacer
utilizando la funcin HALLAR. Esta funcin busca una cadena de texto dentro de una
segunda cadena de texto y devuelven el nmero de la posicin inicial de la primera
cadena de texto desde el primer carcter de la segunda cadena de texto. Es muy similar a
la funcin ENCONTRAR con la diferencia de que la funcin HALLAR no distingue en su
bsqueda entre maysculas y minsculas, mientras que la funcin ENCONTRAR s lo
hace. Nos situamos en la celda F4 y escribimos la frmula:
=HALLAR(" ";B4)-1 Le estamos pidiendo que busque un espacio dentro del texto de B4.
El resultado ser 6 porque el espacio en blanco es el sexto carcter del cdigo que se
encuentra en la celda B4. Como adems le restamos 1, el resultado ser 5, que es,
precisamente, el nmero de dgitos del primer cdigo.
Ya tenemos el nmero de dgitos de todos los cdigos de la columna B. A continuacin
tendremos que proceder a"extirparlos". Para ello nos situamos en la celda G4 y
escribimos la siguiente frmula:
=IZQUIERDA(B4;F4) De esta manera obtendremos la parte numrica del cdigo. Al
tratarse de una funcin de texto, el resultado obtenido es un texto y no un valor como
deseamos. Para solucionar esto procederemos con el ltimo paso...
Nos situasmos en la celda H4 y escribimos:
=VALOR(G4) De esta manera convertimos los dgitos del cdigo en valor (en vez de
texto):
Como ya avanc, podemos resumir estos tres pasos anidando en una sola funcin que
escribimos en la celda D4:
=VALOR(IZQUIERDA(B4;HALLAR(" ";B4)-1))
Copiamos hacia abajo y trabajo terminado:
Para obtener la parte alfabtica del cdigo podemos utilizar la siguiente frmula que
escribimos en F4 y copiamos hacia abajo:
=DERECHA(B4;LARGO(B4)-HALLAR(" ";B4))
Clculo de Das con Ao en base 360
" Necesito calcular la diferencia en das entre dos fechas utilizando un ao de base 360 y,
ms concretamente, necesito que la diferencia entre fechas como el 01/01/2013 y el
28/02/2013 me devuelva 60 das, es decir, 2 meses completos de 30 das comerciales"
Para realizar este tipo de clculo, y en general al trabajar con fechas en excel, debemos
tener en cuenta una consideracin importante, a saber: excel almacena las fechas como
nmeros de serie secuenciales. Si introducimos una fecha inicial y una final y la restamos
para calcular la diferencia en das, excel no tendr en cuenta la fecha final en el clculo:
Como se puede ver resta 31-1=30 (en realidad 41.305 menos 41.275, que son los
nmeros de serie que corresponden a dichas fechas). En consecuencia, si queremos que
cuente tambin el ltimo da tendremos que escribir la fecha 01/02/2013 como fecha final.
En el caso concreto de la consulta realizada tendremos que trabajar con la
funcin DIAS360. Esta funcin devuelve la diferencia en das entre dos fechas basndose
en un ao de doce meses de 30 das (360 das):
Al utilizar esta funcin y escribir el primer da de marzo como fecha final, excel calcula dos
meses completos en base 360, es decir, 2 meses de 30 das. La diferencia resultante es
la deseada: 60 das.
"Tengo una tabla en la que en uno de los campos debo introducir cdigos de referencia de
productos y necesito que excel compruebe que en dichas entradas no se introduce
ningn carcter numrico, es decir, que slo se pueden introducir caracteres alfabticos
(en maysculas o minsculas indistintamente)".
Para solucionar este problema tendremos que comprobar cada una de las entradas
carcter por carcter. Esto es debido a que excel diferencia entre entradas numricas y no
numricas. Si escribimos un nmero, excel dispone de funciones y herramientas para
comprobar si lo escrito es un nmero o no pero no ocurre lo mismo si la entrada es
alfanumrica, es decir, si la entrada est compuesta por caracteres alfabticos y
caracteres numricos. En este caso excel considera la entrada como texto a todos los
efectos. Partimos el siguiente ejemplo:
De esta manera slo permitir introducir entradas cuya suma de cada carcter sea cero,
es decir, aquellas que se compongan exclusivamente de caracteres alfabticos:
Lista Desplegable con Rango Dinmico
"Necesito realizar una lista desplegable que vaya incorporando automticamente los
nombres que voy introduciendo en una tabla (pero sin que aparezcan espacios en blanco
en dicha lista)".
=DESREF(E2;1;;CONTARA(listado))
De esta manera, el contenido de la lista desplegable se ajustar estrictamente a las
entradas que se produzcan en el rango Listado (E3:E20). Con la funcin CONTARA
calculamos el nmero de celdas no vacas del rango Listado. Dicho resultado ser el
argumento Alto de la funcin DESREF y crecer o disminuir en funcin de que
aadamos o eliminemos registros del listado, como se puede ver en las siguientes
imgenes:
Mximos, Mnimos y Promedios por Columnas
Descargar Archivo
"He ledo el post de "Resaltar Mximos, Mnimo y Promedios con Formato Condicional" y
me gustara saber si se puede realizar el mismo clculo pero por columnas".
=SI(N(CONTAR.SI($C$3:C3;C3)=1);C3;"")
=SI.ERROR(K.ESIMO.MENOR($H$3:$H$27;B3);"")
K.ESIMO.MENOR ordena la lista de menor a mayor. En las celdas que tengamos "" nos
devolver el error #NUM!. Para evitar este mensaje de error y conseguir que la celda se
quede en blanco, usamos la funcin SI.ERROR (disponible a partir de la versin 2010 de
excel). Esta funcin ejecuta el primer argumento, esto
es, K.ESIMO.MENOR($H$3:$H$27;B3) y si el resultado de esta parte de la frmula es un
error entonces aplica el segundo argumento, es decir, "". Si no es un error simplemente
devuelve el resultado del primer argumento. Obtenemos lo siguiente:
Tan slo nos queda ahora buscar los cdigos correspondientes a dichos nmeros y
problema resuelto. Nos situamos en la celda F3 y escribimos la siguiente frmula que
copiamos hasta la celda F27:
=SI.ERROR(BUSCARV(E3;$B$3:$C$27;2;FALSO);"")
Para concluir el modelo, podemos hacer que aparezcan bordes en las celdas con valores
nicos de manera automtica utilizando Formato Condicional. A saber:
Este problema lo resolvimos en el post Ordenar Automticamente una Lista . Pero surgi
una nueva cuestin:
Cmo resolvemos el orden cuando hay cifras de ventas repetidas?
La solucin es utilizar la funcin JERARQUIA para establecer un orden dentro de los
valores repetidos, como sugiere Jorge Dunkelman en su artculo Funcin JERARQUIA en
Excel. A saber:
Lo primero es crear el nombre Zona para el rango B3:B14 y el nombre Ventas para el
rango C3:C14. En la celda E3 escribimos la frmula: =JERARQUIA(C3;ventas) y
copiamos hasta E14. De esta manera estamos estableciendo el orden que ocupa cada
cifra de ventas. El problema es que hay cifras que se repiten y que debemos "reordenar":
Para ello nos situamos en la celda F3 y escribimos la siguiente frmula:
=JERARQUIA(C3;Ventas)+CONTAR.SI($C$3:C3;C3)-1
Finalmente seleccionamos el rango I3:J3 y copiamos hacia abajo hasta I14:J14 , y trabajo
terminado: