Anda di halaman 1dari 189

Contar Nmero de Dgitos

"En una columna tengo numerosos registros de 5, 6, 7 y 8 dgitos. Necesito


realizar un resumen que me indique cuntos registros hay de cada nmero de
dgitos".

La solucin es muy sencilla utilizando una sola frmula matricial con las
funciones SUMA, SI y LARGO. Partimos de la siguiente entrada de datos:

Nos situamos en la celda E5 y escribimos la frmula:


=SUMA(SI(LARGO($B$5:$B$26)=D5;1;0)) y pulsamos Ctrl+Shift+Enter. De esta
manera convertimos la frmula en matricial y quedar as:
{=SUMA(SI(LARGO($B$5:$B$26)=D5;1;0))}

La funcin LARGO contar el nmero de dgitos de cada una de las celdas


comprendidas en el rango B5:B26. En el caso de que coincida con el nmero
sealado en la celda D5 (en nuestro ejemplo es 5) entonces le sumar 1 (cero en
caso contrario). Al copiar la frmula hasta E8, la referencia D5 ir cambiando a D6,
D7 y D8 y, en consecuencia, nos mostrar un resumen de la cantidad de cifras
que tienen 5, 6, 7 y 8 dgitos respectivamente:

Si el nmero de registros es grande, es importante verificar que la suma del rango


E5:E8 es igual al nmero de cifras existentes. En nuestro ejemplo lo podemos
resolver escribiendo la siguiente frmula en una celda (E10, por ejemplo):
=CONTAR(B5:B26)=SUMA(E5:E8) El resultado ser VERDADERO.

Combinaciones con Aleatorio.Entre


"Necesito obtener 4 combinaciones aleatorias partiendo de 10 columnas con
nmeros del 1 al 10; del 11 al 20; del 21 al 30; etctera (hasta el 100). De tal
manera que de la primera columna obtenga un nmero aleatorio; de la segunda
columna otro; y as hasta completar la combinacin de los diez nmeros".

Para solucionarlo utilizaremos la funcin ALEATORIO.ENTRE. Montamos la


siguiente entrada de datos:

Lo que hemos hecho es introducir los lmites inferiores y superiores de cada


rango. A continuacin nos situamos en la celda D7 y escribimos la frmula:
=ALEATORIO.ENTRE(D$3;D$4) y la copiamos hasta M3 y finalmente hasta M10:

Problema resuelto. Podemos pulsar la tecla F9 para generar nuevas


combinaciones aleatorias.

Aleatorios Acotados con Promedio Objetivo


"Necesito generar nmeros aleatorios entre valores determinados (por ejemplo,
valores no inferiores a 498 y no superiores a 504) cuyo promedio sea un nmero
concreto que se encuentre entre ambos lmites (por ejemplo 500)".
Es un caso muy similar al resuelto en mi post Generar Aleatorios que Sumen una
Cifra Objetiva, pero con algn ajuste que paso a comentar. Partimos del siguiente
ejemplo y entrada de datos:

En la celda E7 escribimos la siguiente frmula, que nos generar nmeros


aleatorios comprendidos entre los valores especificados en las celdas C4 y C5:
=ALEATORIO()*($C$4-$C$5)+$C$5 y copiamos hasta E21:
En la celda C7 escribimos la siguiente frmula:
=((E7/SUMA($E$7:$E$21))*$C$2)*$C$3 y la copiamos hasta C21:
Podemos pulsar la tecla F9 para generar nuevos valores aleatorios y comprobar
que la celda C23, que contiene la frmula =PROMEDIO(C7:C21), mantiene el
mismo valor que el objetivo indicado en la celda C2.

Desplegables sin Filas en Blanco


"Tengo una columna con registros y necesito generar una lista desplegable con
dichos registros y en el mismo orden que aparecen en el listado original. El
problema es que existen celdas en blanco y, en consecuencia, me aparecen
dichos espacios en la lista desplegable".

Partimos del siguiente ejemplo:


En C2 queremos crear una lista desplegable con validacin de datos, que
presente los distintos cdigos existentes en el rango E3:E20, en el mismo orden,
pero sin los espacios en blanco. Lo primero que hacemos es generar un nmero
de orden en la columna G (a partir de G3) del 1 al 18. En la celda H3
escribimos =E3 y copiamos hasta la celda H20, para generar un "espejo" de los
cdigos originales:
Lo que vamos a hacer a continuacin es "reordenar" estos cdigos dndoles un
nuevo nmero de orden. Para ello nos ponemos en la celda I3 y escribimos la
frmula:
=SI(H3=0;MAX($G$3:$G$20)+1;G3) y la copiamos hasta I20.
Cunado el valor de la celda es 0 le estamos pidiendo que calcule el mximo de
nuestro lista de orden (en nuestro ejemplo es 18) y le sume 1. De esta manera,
todas las celdas en blanco de nuestra listado original de cdigos, pasar a tener
un nuevo nmero de orden que, en nuestro ejemplo, ser de 19 (18+1). En el caso
de que el valor de la celda no sea 0, le pedimos que escriba el valor nmero de
orden que le corresponde a dicho cdigo. Esto nos servir para "reordenar" a
continuacin la informacin manteniendo el orden original pero evitando las celdas
en blanco:
Ya slo nos queda "recolocar" de menor a mayor estos nuevos nmeros de orden
y obtener el cdigo correspondiente. Nos situamos en J3 y escribimos:
=SI.ERROR(BUSCARV(K.ESIMO.MENOR($I$3:$I$20;G3);
$G$3:$H$20;2;FALSO);"X")
K.ESIMO.MENOR nos reordena de menor a mayor los nmeros que hemos
obtenido en el rango I3:I20. Al anidar esta funcin dentro de BUSCARV lo que
hacemos es obtener el cdigo relacionado con el nmero de orden. Finalmente,
anidamos dentro de SI.ERROR para que aquellos valores que no se encuentran
dentro de la tabla de bsqueda (en concreto el valor 19, que se corresponde con
las celdas en blanco) no devuelvan el valor de error #N/A y se conviertan en X:
Ya slo nos queda crear la frmula en la validacin de datos. Seleccionamos el
rango J3:J20 y le creamos el nombre Listado. Desde C2 vamos a Validacin de
datos. En "Permitir" seleccionamos Lista y escribimos la siguiente frmula:
=DESREF(J3;0;;CONTAR.SI(listado;"<>X"))
De esta manera obtendremos nuestra lista desplegable, manteniendo el mismo
orden que el listado original, sin incluir ninguna fila en blanco:
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; etctera. Me gustara saber si se puede
automatizar con frmulas".

Se puede. Veamos cmo. Partimos del siguiente ejemplo, en el que vamos a


manejar una lista de 30 valores:
En el rango B5:B34 generamos un nmero de orden del 1 al 30:
Habilitamos como entrada de datos el valor de "n", es decir, el valor de "cada
cuntas 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 frmula:
=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 frmula comprueba si el nmero de orden es mltiplo 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 nmero de orden es mltiplo
del valor introducido en C2, entonces el residuo del cociente ser cero y ejecutar
la parte de la frmula:
SUMA(DESREF(C5;;;-$C$2))
En nuestro ejemplo, en la celda D7 excel se encontrar que el nmero de orden
de esa fila es el 3 y que dicho nmero s es mltiplo del introducido en C2, que es
3. Al estar 2 celdas ms abajo que la frmula 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 funcin DESREF, Alto, le hemos puesto signo
negativo. Veamos el resultado con distintos valores en la celda C2 (valores de n):
Series con Repeticin
"Necesito generar una serie, con incremento de uno en uno, que repita los valores un
determinado nmero 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 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.

Daniel19 octubre, 2015 11:17

Hola Kiko,

Otra manera de hacerlo, creo que ms sencilla. En la celda E4


insertar la siguiente frmula.

=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:

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 frmula =B4+6, es decir, la celda anterior ms el nmero de
filas que queremos que aparezcan en blanco ms uno (en nuestro ejemplo son 6 porque 5
filas en blanco ms 1).
* Copiamos hasta el final de nuestra tabla, esto es, hasta B13:
* Nos situamos en B14 y escribimos la frmula =B4+1.
* Tenemos 10 registros y, adems, queremos incluir 5 filas en blanco por registro. Por lo
tanto: 10+(10*5) = 60. Por lo tanto copiamos la frmula 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 filosofa es muy similar a la planteada en el post de Insertar Filas
Intercaladas, pero este caso nos sirve para cualquier nmero de filas en blanco:
Ordenar con Frmulas en Base a dos Criterios
"Mi pregunta es la siguiente Cmo solucionar el ordenar con frmulas una lista con cifras
repetidas utilizando una segunda variable? En el ejemplo que nos muestras en Ordenar
Automticamente una Lista con Valores Repetidos me interesa ordenar los casos
repetidos teniendo en cuenta el nmero 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 cuestin y aadindole, de paso, la columna de
nmero de empleados:

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".

Partimos del siguiente ejemplo:


Al tratarse de entradas alfanumricas (texto y nmeros) excel las considera texto y, en
consecuencia, no podemos utilizar directamente la funcin MAX. Podemos resolver el
problema de diferentes maneras. Una muy sencilla es "trocear" las entradas para separar
la parte de texto de la de nmero. Para ello generamos una columna de proceso:
En la celda D6 escribimos la frmula:
=VALOR(DERECHA(H6;4)) y la copiamos hasta D23.

De esta manera estamos obteniendo los 4 dgitos con la funcin DERECHA, y


convirtiendo dichos dgitos, que hasta aqu excel trata como texto, a nmeros con la
funcin VALOR:
Nos situamos ahora en la celda B3 y escribimos la siguiente frmula:

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.

Contar Duplicados en Distintas Hojas


"Tengo una lista con registros en la hoja 1 y otras listas en 6 7 hojas ms. Me gustara
saber cuntas veces se repiten los registros de la hoja 1 en cada una de las listas de
todas las hojas".

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".

Partimos del siguiente ejemplo:


Preparamos ahora las siguientes tablas para "manipular" los datos iniciales. Aunque el
enunciado habla de 3 dgitos, preparamos tablas para contemplar hasta 6 dgitos:
Nos situamos en E3 y escribimos la frmula(que copiaremos hasta J3 y, finalmente, hasta
J17):
=SI.ERROR(VALOR(EXTRAE($B3;E$2;1));"")
De esta manera estamos extrayendo cada dgito y reconvirtindolo en VALOR (ya que la
funcin EXTRAE nos lo devuelve como texto):
Una vez hecho esto, nos situamos en L3 y escribimos la frmula:
=SI.ERROR(K.ESIMO.MENOR($E3:$J3;L$2);"")
y copiamos hasta Q2 y finalmente hasta Q17:
De esta manera hemos reordenado de menor a mayor los dgitos. Procedemos ahora a
unirlos de nuevo con la funcin CONCATENAR (&). En S3 escribimos:

y copiamos hasta S17:


Ahora ya podemos proceder a contar los nmeros que se repiten en ms de una ocasin
y "asociarlos" con sus "originales". Nos situamos en la celda C3 y escribimos la frmula:
=SI(CONTAR.SI($S$3:$S$17;S3)>1;"Repetido";"") y copiamos hasta C17:
El siguiente "monstruo", que es ciertamente infumable, genera un nmero
nico por cada cadena de texto con independencia del orden de los
caracteres (o eso creo). No lo he probado, pero si la cadena de texto es
larga probablemente devuelva un error.

=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))

Es una frmula matricial (cmo si no). Lo que hace es extraer cada


carcter, convertirlo en su cdigo ASCII, ordenarlo de menor a mayor,
multiplicarlo por una potencia de 256 y sumar todos los resultados
parciales.

Encontrar los duplicados es fcil con "CONTAR.SI".


Obtencin Aleatoria de Valores de un Rango Sin Repeticin
"En tu artculo Seleccin Aleatoria de un Valor de un Rango (2) nos explicaste cmo
seleccionar 1 valor de manera aleatoria entre los valores existentes en un determinado
rango y entre los que se incluyen celdas en blanco. En mi caso, necesito seleccionar 6
valores de dicho rango y que, adems, no se repita ninguno de los seleccionados".

Como suelo decir, no problemo! Partimos de la siguiente lista de valores (y utilizaremos 4


columnas de procesos para conseguir nuestro objetivo):

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:

Pulsando F9 obtendremos distintas combinaciones aleatorias


Evitar Registros en Blanco
"Tengo una tabla con registros y sus correspondientes valores. Lo que me gustara
conseguir, a ser posible sin macros, es que excel no permita introducir un nuevo valor si
alguna o todas las celdas anteriores al mismo se encuentran en blanco".

En esta ocasin vamos a comenzar con una imagen de lo que queremos evitar:

Como se puede observar, el registro 4 y el 6 no tienen un valor asociado, pero el 5 y el 7


s. De lo que se trata es de que excel no me permita introducir ni el registro 5 ni el 7 hasta
que no "rellene" los anteriores. La solucin sin utilizar macros es bastante sencilla.
Utilizaremos la herramienta de Validacin de datos. Partimos del siguiente ejemplo:
Seleccionamos el rango C4:C12 (NO incluimos C3) y vamos a la ficha Datos y
seleccionamos Validacin de datos. En configuracin elegimos Permitir / Personalizada, y
en Frmulaescribimos la siguiente (como se puede ver en la imagen):
=Y($C$3:C3<>"")

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)".

Partimos del siguiente ejemplo:

Nos situamos en la celda D4 y escribimos la siguiente frmula:


=SI(CONTAR.SI($B$4:$B$18;B4)>1;"";B4) y la copiamos hasta D18:
Si queremos que excel aada un borde a las celdas que contienen nmeros, podemos
hacer uso del Formato Condicional. Para ello seleccionamos D4:D18 y vamos a Formato
Condicional y seguimos los pasos que se muestran la siguiente imagen:
Tras escribir la frmula, pulsamos el botn Formato... y en Bordes elegimos Contorno en
color, por ejemplo, granate:
Pulsamos Aceptar y problema resuelto:
Desplegables Dependientes con Nombres con Espacios en
Blanco
"Necesito crear listas desplegables dependientes con validacin de datos. El problema es
que algunos nombres tienen espacios en blanco y excel no me los reconoce".

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...

Partimos del siguiente ejemplo:


Queremos generar una lista desplegable en B3 con los 4 modelos existentes, a saber, GT
100; ASIUS; PROMETEO; y TT 400. Para ello nos situamos en B3, vamos a Validacin de
datos y en Permitir elegimos Lista. En Origen marcamos el rango $F$3:$I$3 y aceptamos.
Para que al seleccionar uno de los modelos aparezca el tipo de su grupo, debemos ahora
crear nombres de dichos rangos. El problema es que en la lista original de modelos algn
nombre tiene espacios (GT 100 y TT 400). Para evitar este problema, insertamos una fila
entre la 3 y la 4 y copiamos los nombres originales pero sustituyendo ahora los espacios
por guin bajo:

Seleccionamos ahora el rango F4:I7 y vamos a la ficha Frmulas, grupo Nombres


definidos y seleccionamos Crear desde la seleccin. Marcamos Fila superior y
aceptamos:
Si nos fijamos en el cuadro de nombres veremos que ya disponemos de stos:

Nos situamos ahora en D3 y vamos a Validacin de datos.


En Permitir seleccionamos Lista y en Origen escribimos la siguiente frmula:
=INDIRECTO(BUSCARH($B$3;$F$3:$I$4;2;FALSO)) y aceptamos.
La parte de BUSCARH lo que hace es buscar el nombre en nuestra lista original y
transformarlo en el nombre con guin bajo. Una vez hecho esto, INDIRECTO reconoce el
nombre de la "sublista" y nos presenta los tipos relativos a cada modelo:
Ordenar Texto con Frmulas
"Tengo grandes listados donde me aparecen, en distintas columnas, Nombre; Apellido 1;
Apellido 2. Quisiera que primero me presente la informacin con el formato Apellido1
Apellido 2, Nombre y, finalmente, que me los ordene de la A a la Z automticamente".

Como siempre, partimos de un ejemplo:


Lo primero que vamos a hacer es CONCATENAR los apellidos y nombre como nos
interesa. Nos situamos en la celda H3 y escribimos:

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:

Pulsamos Ctrl+Shift+Enter y se mostrar como frmula matricial:

Terminamos copiando esta frmula hasta G16.


Excel es capaz de comparar textos por orden alfabtico, de tal manera que si
comprobamos si un texto es mayor, menor o igual que otro texto, excel nos devolver un
VERDADERO o FALSO. El menor valor es la A y el mayor la Z. Ejemplos:

El resultado de aplicar la frmula matricial ser:


Ahora ya disponemos de un nmero de orden para cada registro. Procedemos ahora a
preparar el cuadro para la salida final de informacin:

Seleccionamos el rango G3:H16 y le damos el nombre OrdenNombres. Vamos a K3 y


escribimos la frmula (que luego copiaremos hasta K16):
Listas Desplegables "Excluyentes"
"En mi entrada de datos, tengo una serie de celdas con lista desplegable generada con
validacin de datos. Me gustara que al ir seleccionando referencias de la lista, dichas
referencias desaparecieran del listado disponible en el resto de celdas".

Para solucionar este problema, tendremos que utilizar varias funciones y herramientas as
que, como dijo Jack el destripador, vamos por partes...

Partimos del siguiente ejemplo:


En el rango B3:B16 queremos tener listas desplegables en las que aparezcan los colores
de la lista1 pero con la peculiaridad de que a medida que vayamos seleccionado colores
de la lista stos desaparezcan de la siguiente lista desplegable (como se muestra en la
imagen a continuacin):
A medida que vamos eligiendo colores en la entrada de datos, en las siguientes listas slo
quedan disponibles los colores no seleccionados todava.
Empezamos dndole el nombre Datos al rangoB3:B16. Hecho esto, generamos la tabla
que se puede ver en el rango G2:H11. La primera columna (columna G) es un nmero de
orden de los elementos existentes (los colores). En la columna H vamos a formular. Nos
situamos en H3 y escribimos:
=SI(O(Datos=E3);"";E3) y pulsamos Ctrl + Shift + Enter ya que se trata de una frmula
matricial. Aparecer as: {=SI(O(Datos=E3);"";E3)}
Esta frmula comprobar los valores seleccionados en el rango B3:B16 (Datos) y har
que dichos valores desaparezcan (los convierte en "") de la lista existente en H3:H11. A
continuacin preparamos la siguiente zona de procesos:

Nos situamos en J3 y escribimos la frmula:


=SI(H3="";0;G3) y copiamos hasta J11.
En K3 escribimos:
=K.ESIMO.MAYOR($J$3:$J$11;G3) y copiamos hasta K11. Con esta frmula
ordenamos de mayor a menor los valores obtenidos en la columna J.
Seleccionamos G3:H11 y le creamos el nombre Lista2. Vamos a L3 y escribimos:
=SI.ERROR(BUSCARV(K3;lista2;2;FALSO);"") y copiamos hasta L11. Con esta
frmula estamos buscando en la tabla llamada Lista 2 los colores que se corresponden
con los nmeros de la columna K:

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 1: Seleccionamos B3:B16 vamos a Validacin de datos/Permitir: Lista y


en Origenescribimos =Lista3 y aceptamos:
Como se puede comprobar, a medida que vamos eligiendo colores desaparecen de la
lista pero queda el espacio en blanco dentro el desplegable.

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".

Partimos del siguiente ejemplo:


Lo primero que hacemos es crear los nombres de las tres columnas de esta tabla. Vamos
a la ficha Frmulas y en el grupo Nombres definidos seleccionamos Crear desde la
seleccin y marcamos Fila superior:
Ya hemos generado los tres nombres:

Seleccionamos ahora el rango B3:B16 y vamos a la ficha Datos/Validacin de datos.


Como criterio de validacin permitimos Personalizar, y en frmula escribimos la siguiente:

=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)

En caso de que se repita alguno de los cdigos introducidos aparecer un mensaje de


error que nos obligar a realizar una nueva entrada correcta:
Seleccin Aleatoria de un Valor de un Rango (2)
"Necesito seleccionar aleatoriamente un nmero de un rango determinado. He visto una
solucin en tu blog en el post Seleccionar Aleatoriamente un Valor de un Conjunto. El
problema que me encuentro es que si el rango en cuestin contiene celdas en blanco,
entonces, la solucin que propones devuelve valores cero. Me gustara saber si existe la
forma de que evite dichas celdas en blanco y elija un valor entre aquellas que contienen
nmero".

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).

Lo primero que hacemos es seleccionar el rango B5:B18 y le damos el nombre


de Valores. A continuacin generamos una nueva lista auxiliar de dos columnas, cuya
primera columna es una serie de nmero de orden de menor a mayor (en este caso del 1
al 14, ya que tenemos 14 datos):
Nos situamos en la celda G5 y escribimos la frmula:
=K.ESIMO.MAYOR(valores;F5) y copiamos hasta G18
De esta manera hemos conseguido generar una nueva lista ordenada de mayor a menor
con los valores de nuestra lista original pero ahora ya no tenemos celdas en blanco por el
medio del rango, ya que hemos conseguido que se "vayan al final" de nuestra nueva lista
y que se muestren como error del tipo #NUM!
Esto nos permite ahora, aplicando la funcin CONTAR, calcular cuntas celdas de mi
nueva lista contienen un valor nmerico. Si calculamos =CONTAR(G5:G18) nos
devolver el resultado 10, porque es el nmero de valores existentes en dicho rango de
14 celdas (las otras 4 contienen el error #NUM!). De esta manera ya s que debo generar
un nmero aleatorio entre 1 y 10. Por seguir trabajando con nombres de rango,
seleccionamos G5:G18 y le creamos el nombre NewLista.
Nos situamos en la celda D10 y escribimos la frmula definitiva:
=DESREF(G4;ALEATORIO.ENTRE(1;CONTAR(NewLista));)
Cada vez que pulsemos la tecla F9, excel recalcular un valor aleatorio y lo mostrar en la
celda D10. Una frmula alternativa en D10 sera utilizar la funcin INDICE:
=INDICE(NewLista;ALEATORIO.ENTRE(1;CONTAR(NewLista)))

viernes, 23 de enero de 2015

Intercalar 1 Fila en Blanco cada n Filas (sin macros)


"Necesito dejar una fila en blanco cada 4 filas, es decir, que aparezcan 4 registros y en el
quinto que incorpore una fila en blanco, y as sucesivamente hasta un total de 5.000
registros Hay alguna manera de hacerlo sin hacer uso de macros?".

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.

Ahora a partir de la celda C8 generamos nuevamente la serie comenzando con el nmero


1 y acabando con el 50 (igual que hicimos en la hoja 2).
En D8 escribimos un 1. En D9 la siguiente frmula:
=SI(RESIDUO(D8+1;$D$1)=0;D8+2;D8+1) y hacemos doble clic para completar la
Nueva Lista.
En E8 la siguiente frmula:
=SI($D$1*C8<=$E$5;$D$1*C8;"- - -") y hacemos doble clic para completar la Lista de
Mltiplos. El resultado ser el siguiente:
Copiamos la Nueva Lista y la pegamos COMO VALORES en la HOJA2 encima del rango
A3:A52 y obtenemos lo siguiente:
Ya estamos terminando... Ahora volvemos a la hoja 1 y seleccionamos el rango que
contiene nmeros en nuestra Lista de Mltiplos. En nuestro caso el rango E8:E19 de la
HOJA1. Pulsamos Copiar y vamos a la HOJA2 y lo pegamos COMO VALORES a
continuacin del ltimo dato, es decir, a partir de la fila 53.

Ya slo nos queda ir a Ordenar y filtrar y seleccionar Orden Personalizado. En la ventana


que se abre seleccionamos Ordenar por la Columna A de menor a mayor:
Aceptamos y... problema resuelto! (podramos ahora borrar los nmero de orden
generados en la hoja2 en la columna A):
Aunque pueda parecer un poco tedioso, una vez realizada la plantilla no lleva ms de 30
segundos resolver cada caso que se nos plantee.

Copiar Registros Intercalados


"Tengo cientos de registros relativos a nmeros de unidades vendidas y debajo de cada
registro el porcentaje que representa cada uno respecto a la suma total. Necesito copiar
un listado pero slo de las unidades vendidas sin dejar filas intercalas en el medio".
Tal y como les promet, este post va dedicado a mis alumnos del Master in Management
del IE Business School, que con tanta paciencia me soportan los lunes y martes...
Partimos del siguiente ejemplo:

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)))

La funcin FILA nos devuelve el nmero de fila de la celda en cuestin. En nuestro


ejemplo FILA(C4) nos devolver el valor 4. multiplicamos el resultado por 2 para generar
una serie de nmeros pares. FILA(C4)*2=8; FILA(C5)*2=10; FILA(C6)*2=12; etc. Como
nuestro primer dato se encuentra en la fila nmero 4 (y no en la 8) tendremos que restarle
4 para que la serie comience en dicho nmero, en 4: FILA(C4)*2-4=4; FILA(C5)*2-4=6;
FILA(C6)*2-4=8; etc. Nuestro datos precisamente se encuentran en las filas 4, 6, 8,
etctera. La columna es siempre la misma COLUMNA(C4). Si colocamos estas funciones
dentro de la funcin DIRECCION, lo que obtendremos es la direccin de las celdas en
cuestin, a saber:
=DIRECCION(FILA(C4)*2-4;COLUMNA(C4)) resulta C4
=DIRECCION(FILA(C5)*2-4;COLUMNA(C5)) resulta C6
=DIRECCION(FILA(C6)*2-4;COLUMNA(C6)) resulta C8
=DIRECCION(FILA(C7)*2-4;COLUMNA(C7)) resulta C10, etctera.

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)))

Otra manera que creo que es ms fcil

Nombrar el rango de datos como Datos (muy original).

Copiar y arrastrar estas frmulas en columnas sucesivas.

=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)

Opcionalmente, aadir a las frmulas SI.ERROR = para evitar problemas de


desbordamiento. La primera frmula quedara as (el resto es igual):

=SI.ERROR(INDICE(Datos;FILA(A1)*2-1;1);"")

Detectar Cdigos Alfanumricos Pares


"Tengo ms de 500 entradas en una columna de un cdigo compuesto de letras y, al final,
4 dgitos. Necesito localizar cules de esos cdigos son pares y que me escriba en una
columna anexa dichos dgitos (slo los que son pares)".

Antes de meterme en materia me permitiris que siendo hoy el da que es os felicite a


todos, primero por tener la paciencia de leerme de vez en cuando y, segundo y sobre
todo, porque hoy sea un da que podis disfrutar en familia y no dejis que os lo estropee
nadie (ni siquiera los polticos con o sin coleta...)

Partimos del siguiente ejemplo: (ups! Se me ha "colao" un seor de barba blanca en el


ejemplo y haciendo publicidad para mi hermano Santi...)
Nos situamos en D3 y escribimos la siguiente frmula que copiamos hasta D15 y que
paso a desmenuzar a continuacin:

=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)).

El resultado final es el que se muestra a continuacin:

Buscar la ltima Entrada de un Concepto Repetido


"Tengo una tabla con nombres de vendedores y, en la siguiente columna, las unidades
vendidas en cada pedido. Necesito buscar la ltima entrada realizada de un vendedor
concreto pero slo consigo obtener la primera entrada (con la funcin BUSCARV)".

Para resolver este problema vamos a trabajar con varias funciones, a


saber: INDICE, COINCIDIR, CONTAR.SI y CONCATENAR (&). Partimos del siguiente
ejemplo:
Lo que queremos conseguir es que al introducir en C2 el nombre del vendedor excel nos
devuelva el ltimo valor existente de dicho comercial. Evidentemente, si utilizamos la
funcin BUSCARV nos va a devolver el primer valor que se encuentre en la tabla del
vendedor que le indiquemos. Aunque tambin se podra resolver con esta funcin, vamos
a solucionarlo de otra manera que se me antoja "ms elegante". Lo primero que hacemos
es dar nombre a las dos columnas de datos. Seleccionamos el rango B6:C22 y en la ficha
Frmulas/Nombres Definidos pulsamos Crear desde la seleccin. En la ventana que se
abre elegimos crear nombres a partir de los valores de la Fila superior. De esta manera, el
rango B6:B22 pasa a denominarse Vendedor y el C6:C22 Unidades.

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:

=B7&CONTAR.SI($B$7:B7;B7) y la copiamos hasta F22.

La parte de CONTAR.SI($B$7:B7;B7) lo que hace es ir generando un contador para cada


vendedor. Utilizando como ejemplo el primero, Pedro Flores, cada vez que aparezca en el
rango de vendedores le ir sumando una unidad. Al primer Pedro Flores le asigna el 1 al
segundo un 2 y as sucesivamente. Y esto para cada vendedor. Lo que hacemos con la
parte de la frmula B7& es preceder a este nmero de orden del nombre del vendedor y
los concatenamos. De esta manera obtendremos Pedro Flores1, Pedro Flores2, Pedro
Flores3, Joaqun Voz1, etctera. Es decir, el nombre unido (concatenado) al nmero de
orden:

Este paso me proporciona un nombre unido al nmero mximo de repeticiones de dicho


nombre. Es decir, si Pedro Flores aparece, como es el caso, 4 veces entonces s que el
ltimo valor de Pedro Flores ser el asociado a Pedro Flores4.
Slo nos queda una frmula ms para obtener nuestro objetivo. Nos situamos en C4 y
escribimos:

=INDICE(unidades;COINCIDIR(C2&CONTAR.SI(vendedor;C2);F7:F22;0))

Veamos por partes esta frmula:


C2&CONTAR.SI(vendedor;C2) Une el nombre introducido en la celda de entrada C2 al
nmero mximo de repeticiones del mismo dentro de la columna de Vendedor. En nuestro
ejemplo el resultado ser Pedro Flores (dato de C2) y el nmero 4, es decir, Pedro
Flores4.

COINCIDIR(C2&CONTAR.SI(vendedor;C2);F7:F22;0) Ahora buscamos este resultado


(Pedro Flores4) dentro del rango F7:F22 con la funcin COINCIDIR. Con esta funcin lo
que obtendremos es el nmero de fila en el que se encuentra dicho dato. En nuestro
ejemplo el resultado de este "trozo" de frmula ser 16. Sabiendo el nmero de fila en el
que se encuentra, ya slo me queda incorporar este resultado a la funcin INDICE:
=INDICE(unidades;COINCIDIR(C2&CONTAR.SI(vendedor;C2);F7:F22;0)) para que
busque dentro de la columna Unidades la fila 16 y me devuelva el valor:

Especificar Tipo de Formato de una Celda


"Regularmente me envan un listado con diferentes entradas en una columna y necesito
detectar, por medio de frmulas, cules de dichas entradas son fechas".

Para solucionar este problema haremos uso de la funcin CELDA. Partimos del siguiente
ejemplo:

La funcin CELDA devuelve informacin acerca del formato, la ubicacin o el contenido


de una celda. La sintaxis de esta funcin es CELDA( tipo_de_info;referencia), tal y como
muestra la ayuda de excel, y tiene los siguientes argumentos:

tipo_de_info: Es un valor de texto que especifica el tipo de informacin de la celda que


se desea obtener. La siguiente lista muestra los posibles valores del argumento
de tipo_de_info y los correspondientes resultados:

tipo_de_info Devuelve

"DIRECCION" la referencia, en forma de texto, de la primera celda del argumento ref.

"COLUMNA" El nmero de columna de la celda del argumento ref.

Valor 1 si la celda tiene formato de color para los valores negativos; de lo


"COLOR"
contrario, devuelve 0 (cero).

"CONTENIDO" Valor de la celda superior izquierda de la referencia, no una frmula.

"ARCHIVO"

Nombre del archivo (incluida la ruta de acceso completa) que contiene la


referencia, en forma de texto. Devuelve texto vaco ("") si todava no se
ha guardado la hoja de clculo que contiene la referencia.

Un valor de texto correspondiente al formato numrico de la celda. Los


valores de texto para los distintos formatos se muestran en la siguiente
tabla. Si la celda tiene formato de color para los nmeros negativos,
"FORMATO" devuelve "-" al final del valor de texto. Si la celda est definida para
mostrar todos los valores o los valores positivos entre parntesis,
devuelve "()" al final del valor de texto.

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).

Un valor de texto que corresponde al "prefijo de rtulo" de la celda.


Devuelve un apstrofo (') si la celda contiene texto alineado a la
izquierda, comillas (") si la celda contiene texto alineado a la derecha, un
"PREFIJO" acento circunflejo (^) si el texto de la celda est centrado, una barra
inversa (\) si la celda contiene texto con alineacin de relleno y devolver
texto vaco ("") si la celda contiene otro valor.

Valor 0 (cero) si la celda no est bloqueada; de lo contrario, devuelve 1 si


"PROTEGER" la celda est bloqueada.

El nmero de fila de la celda del argumento ref.


"FILA"

Un valor de texto que corresponde al tipo de datos de la celda. Devolver


"b" (para blanco) si la celda est vaca, "r" (para rtulo) si la celda
"TIPO" contiene una constante de texto y "v" (para valor) si la celda contiene otro
valor.

El ancho de columna de la celda redondeado a un entero. Cada unidad


"ANCHO" del ancho de columna es igual al ancho de un carcter en el tamao de
fuente predeterminado.

referencia: (argumento opcional) La celda sobre la que desea informacin. Si se omite,


se devuelve la informacin especificada en el argumento tipo_de_info para la ltima
celda cambiada. Si el argumento de referencia es un rango de celdas, la
funcin CELDA devuelve la informacin slo para la celda superior izquierda del rango.
He destacado en naranja "formato" porque es el tipo_de_info con el que vamos a
trabajar. Para ello nos situamos por ejemplo en la celda E3 y escribimos la frmula:

=CELDA("formato";B3) y copiamos hasta E9:

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":

Si el formato de Excel es La funcin CELDA devuelve

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"

# ?/? o # ??/?? "G"

d/m/aa o d/m/aa h:mm o dd/mm/aa "D4"

d-mmm-aa o dd-mm-aa "D1"

d-mmm "D2"

mmm-aa "D3"

mm/dd "D5"

h:mm a.m./p.m. "D7"

h:mm:ss a.m./p.m. "D6"

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")

IMPORTANTE: Si el argumento tipo_de_info de la funcin CELDA es "formato", como en


nuestro caso, y procedemos a asignar un formato diferente al inicial a la celda a la que se
hace referencia, es necesario volver a calcular la hoja de clculo (o pulsar F9) para poder
actualizar los resultados de dicha funcin.

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:

Ahora podemos copiar la frmula de E3 en F3. De esta manera quedar como:


=DESREF($B$3;$D3;0) y lo nico que tenemos que hacer es cambiar la referencia de fila
de $B$3 por $B$4 y copiar hacia abajo hasta F7. Haremos lo mismo en G3 cambiando la
referencia tambin a $B$5 y, finalmente en H6 donde la referencia debe ser $B$6. En
resumen:
En E3: =DESREF($B$3;$D3;0)
En F3: =DESREF($B$4;$D3;0)
En G3: =DESREF($B$5;$D3;0)
En H3: =DESREF($B$6;$D3;0)
Copiamos hacia abajo y obtenemos el resultado deseado:

Lista Desplegable "Autocompletable"


"Tengo listado de provincias y ciudades de Espaa y me gustara crear una lista
desplegable que al teclear la primera letra me enseara las provincias que comienzan por
dicha letra".

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:

Dentro de la ficha Programador hacemos clic en Modo diseo:

Ahora hacemos un clic encima del cuadro combinado que tenemos en la hoja:
Dentro de la ficha Programador, hacemos clic en Propiedades:

Se abrir la ventana de propiedades. En la opcin ListFillRange escribimos el rango en el


que se encuentran nuestro listado de provincias, esto es, B3:B54.
En la opcin LinkedCell escribimos la celda en la que queremos que aparezca el valor
seleccionado de la lista. En nuestro caso utilizaremos D4:
Slo nos queda manipular la opcin MatchEntry. Tres son las opciones. Por defecto
aparecer seleccionado fmMatchEntryNone, lo que significa que no acepta entrada
alguna. Otra opcin es fmMatchEntryFirstLetter que, evidentemente, nos permitir
introducir la primera letra de nuestra bsqueda y que nos muestre la primera opcin del
listado disponible. Finalmente, podemos utilizar fmMatchEntryComplete que nos permitir
ir escribiendo el nombre de la provincia en cuestin y que excel lo autocomplete. Una vez
seleccionada la opcin deseada, cerramos el cuadro de propiedades, VOLVEMOS A
PULSAR Modo diseo para desactivarlo y problema resuelto:
Transformar una Matriz a Sistema de Numeracin Binario
"Necesito transformar una matriz numrica en una matriz binaria (con valores 0 1), es
decir, que los valores que superen un cierto nmero se conviertan en uno y el resto en
cero".

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:

Parejas Aleatorias sin Repeticin


"Tengo dos grupos de 10 personas y quiero hacer 10 parejas aletorias pero sin que se
repita ninguna persona (Ejemplo: pareja 1: el 1 con el 12; pareja 2: el 7 con el 19,
etctera. No valdra el 1 con el 5; el 1 con el 7; etctera)".

Vamos all. Lo solucionaremos con dos funciones, a saber: ALEATORIO y JERARQUIA.


Empezamos generando una tabla de 20 valores aleatorios en dos columnas de 10 cada
una:
Seleccionamos el rango H3:I12 y, con el rango seleccionado, escribimos la
frmula =ALEATORIO() y terminamos pulsando Ctrl + Enter. De esta manera rellenamos
todo el rango de una sola vez:

Seguidamente, preparamos la tabla de las distintas parejas como, por ejemplo, se


muestra a continuacin:
Nos situamos en la celda C3 y escribimos la frmula:
=JERARQUIA(H3;$H$3:$H$12) y copiamos hasta la celda C12. De esta manera hemos
obtenido un nmero de manera aleatoria y sin repeticin entre el 1 y 10.
En la celda D3 escribimos la frmula:
=JERARQUIA(I3;$I$3:$I$12)+10 y copiamos hasta la celda D12. Hemos hecho lo mismo
que en el caso anterior pero al sumarle 10 en la frmula estamos obteniendo ahora un
nmero de manera aleatoria entre el 11 y el 20.

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].

Para calcular todas las combinaciones de 15 elementos en grupos de diversos tamaos


preparamos la siguiente tabla:
Nos situamos en la celda C5 y escribimos la siguiente frmula:
=COMBINAT($C$2;B5) y copiamos esta frmula hasta la celda C19. El primer
argumento de esta funcin hace referencia al nmero total de elementos y el segundo es
el tamao, esto es, el nmero de elementos de cada combinacin (15 elementos en
grupos de 1; 15 elementos en grupos de 2, etctera). El resultado obtenido es el
siguiente:
Resaltar Duplicados Concatenados
"Necesito una frmula que localice cdigos duplicados en la columna B y, si los
encuentra, que los coloree slo si en la columna C los nombres coinciden tambin, pero
no puedo aadir columnas adicionales en la hoja."

Necesitamos concatenar la columna B y la C para comprobar si hay entradas duplicadas


y, en tal caso, resaltar dichas celdas pero sin utilizar columnas adicionales en la hoja. Para
ello formularemos directamente en la herramienta de Formato Condicional. Lo
solucionaremos con la ayuda de la funcin SUMAPRODUCTO. Empezaremos formulando
en la hoja para que se entienda mejor y luego pasaremos dicha formulacin a la
herramienta. Partimos del ejemplo de la primera imagen y queremos conseguir el
resultado de la segunda imagen:
Para ello nos situamos en la celda E3 y escribimos la siguiente frmula que copiaremos
hasta la celda E10:

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:

Como no podemos utilizar columnas adicionales en la hoja, seleccionamos ahora el rango


B3:C10 y vamos a Formato condicional. Elegimos la opcin de introducir una frmula y
escribimos (o copiamos y pegamos directamente) nuestra frmula. En el
botn Formato... damos la apariencia de relleno de color que deseemos y aceptamos:
Evidentemente, procedemos a borrar la formulacin realizada en la columna E. Para
finalizar correctamente el modelo debemos considerar que si dejamos celdas en blanco
excel las rellenar con el formato que le hayamos asignado:
Para evitar sto, ampliamos la frmula de la siguiente manera:

Destacar Datos Repetidos ms de n-veces


"En una lista de datos, los cuales se repiten varias veces, necesito resaltar aquellos datos
que se repitan mas de dos veces, pero que las dos primeras veces que aparezcan no se
marquen".

Partimos del siguiente ejemplo:


Y queremos conseguir lo siguiente:
Para ello nos seleccionamos el rango B5:B24. Vamos a Formato Condicional y elegimos
"Utilice una frmula que determine las celdas para aplicar formato". En "Editar una
descripcin de regla" escribimos la siguiente frmula:
=CONTAR.SI($B$5:B5;B5)>$C$2
Pulsamos el botn Formato... y seleccionamos el aspecto que queremos que tomen las
celdas a destacar. Acabamos pulsando Aceptar y trabajo terminado.

Rellenar Hacia Arriba Celdas en Blanco


"Necesito rellenar celdas en blanco con el contenido de los rtulos que aparecen al final
de cada grupo, es decir, en vez de hacia abajo tiene que ser hacia arriba."

Partimos del siguiente ejemplo:


Queremos que en el rango B2:B4 aparezca el rtulo Zona Norte; en el rango B5:B10 Zona
Sur, etctera.
Para ello seleccionamos primeramente el rango B2:B17. Vamos a la ficha Inicio al
grupo Modificar y seleccionamos el icono de los prismticos. Dentro de ste
seleccionamos Ir a Especial... y marcamos Celdas en Blanco:
Obtenemos el siguiente resultado:
Tenemos las celdas en blanco seleccionadas y B2 como celda activa. Ahora CON LA
TECLA Ctrl PULSADA, hacemos clic en la primera celda superior a nuestro primer rtulo.
En nuestro caso el primer rtulo lo tenemos en B4 y, por lo tanto, hacemos clic en B3
(insisto en que debemos hacer dicho clic CON LA TECLA Ctrl PULSADA). Obtenemos lo
siguiente:
Ahora la celda activa es B3. Directamente, sin tocar nada ms ni hacer clic en ningn
sitio, escribimos la frmula: =B4 porque es el primer rtulo que tenemos, y acabamos
pulsando Ctrl + Enter
Promedio de Valores Intermedios
"Necesito hacer un promedio de cifras relativas a 11 aos, de los cuales debo eliminar los
dos de valor superior y los dos de valor inferior, sean estos iguales o no".

Vamos a solucionar este problema utilizando las


funciones INDICE, K.ESIMO.MAYOR y PROMEDIO. Partimos del siguiente ejemplo:
Lo primero que hacemos es crear una tabla como la que se muestra a continuacin en la
que en la primera fila escribiremos nmeros de orden, en nuestro ejemplo 11. En la celda
G4 escribimos la frmula:
=K.ESIMO.MAYOR(B$4:B$14;$F4)
Con esta frmula, que debemos copiar hasta I4 y finalmente hasta I14, ordenaremos de
mayor a menor por columna los valores:
Una vez hecho esto los valores que nos interesan son los sombreados en verde, es decir,
los 7 valores intermedios. Para calcular el promedio de estos valores utilizamos la frmula
siguiente que escribiremos en la celda B17 (y posteriormente copiamos hasta D17):
=PROMEDIO(INDICE(G$4:G$14;3):INDICE(G$4:G$14;9))

Producto Matricial Condicionado


"Tengo una columna de datos que necesito multiplicar entre si, pero slo aquellos datos
que superen una cierta cifra".

Para resolver este problema vamos a utilizar la funcin PRODUCTO dentro de


una frmula matricial con un condicional simple. Partimos del siguiente ejemplo:
Lo que queremos conseguir es multiplicar el rango B3:B16 pero slo aquellos valores que
superen la cifra lmite que nos encontramos en D3, y que en nuestro ejemplo es el valor
cero.
La funcin PRODUCTO multiplica todos los nmeros proporcionados como argumento, ya
sea de uno o varios rangos. Una solucin "manual" de este caso sera la frmula
siguiente:
=PRODUCTO(B3;B5;B6;B8;B11;B12;B14;B16)
Evidentemente lo que estamos buscando es no tener que seleccionar manualmente los
valores a multiplicar. Para ello nos situamos en la celda D6 y escribimos:
=PRODUCTO(SI(B3:B16>D3;B3:B16)) y finalizamos pulsando Ctrl + Shift + Enter ya
que se trata de una frmula matricial. Quedar as:
{=PRODUCTO(SI(B3:B16>D3;B3:B16))}

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".

No problemo. Lo resolveremos haciendo uso de las


funciones SI.ERROR, PROMEDIO, DESREF, COINCIDIR, BUSCARV y HOY.
Supongamos que tenemos la siguiente tabla con la fecha y su cifra de ventas.
Preparamos adems la entrada de datos, es decir, el nmero variable de meses para
calcular el promedio:
Empezamos calculando la fecha actual. Para ello nos ponemos en la celda C4 y
escribimos la frmula =HOY()
Seleccionamos el rango E3:E32 y le damos el nombre Datomes (como siempre lo
podemos crear haciendo clic en el Cuadro de nombres, a la izquierda de la barra de
frmulas, escribiendo dicho nombre y pulsando Enter). Nos situamos ahora en C6 y
escribimos la frmula:
=SI.ERROR(PROMEDIO(DESREF(F2;COINCIDIR(BUSCARV(C4;Datomes;1);
Datomes);;-C2;));"No disponible")

Con la funcin BUSCARV localizamos la fecha actual en nuestra tabla de ventas. Al


anidarla dentro de la funcin COINCIDIR, obtendremos el nmero de fila en el que se
encuentra dicha fecha. A su vez, COINCIDIR se encuentra anidada dentro de la funcin
DESREF y es el argumento de fila, esto es, partiendo de la referencia de celda F2 tiene
que contar tantas filas como devuelva COINCIDIR(BUSCARV(C4;Datomes;1). Ya
tenemos la fila referente al mes corriente, ahora nos queda indicarle desde qu mes
queremos realizar el clculo del promedio, es decir, de los ltimos 12 meses, de los
ltimos 6 meses, etctera. Esto lo resolvemos con el argumento alto de la funcin
DESREF. En concreto tendr que retroceder desde la fila de la fecha actual hasta el
nmero de meses que le indiquemos en la celda de entrada C2, y por ello le ponemos
signo negativo a dicha referencia (-C2).
Le he aadido la funcin SI.ERROR para que si indicamos un nmero de meses
demasiado elevado no aparezca el error #REF! sino que aparezca un texto un poco ms
esttico del tipo "No disponible":
Se me olvidaba... Para conseguir que el texto del rtulo de la media(B6) sea variable, es
decir, que cambie en funcin del nmero de meses que escribamos en C2, tenemos que
poner la siguiente frmula en B6: ="Media "&C2&" meses:"

Clculo del NPS (Net Promoter Score)


"Podras indicarme cmo calcular el Net Promoter Score (NPS) con excel?"

Curiosamente he recibido varios mails en las ltimas semanas preguntndome diversas


cuestiones sobre esta herramienta, el NPS. Aunque la mayora quieren saber cmo se
halla con excel, permitidme una pequea introduccin para aquellos que no sabis de qu
estamos hablando. El NPS es un indicador para medir la satisfaccin del cliente en
trminos de si recomienda tu producto (promotor), le es indiferente (pasivo) o le disgusta
tu producto (detractor). La idea es de Fred Reichheld y data de 2003. El modelo es muy
sencillo: se les pregunta a los clientes si recomendaran tu producto/servicio o no y que lo
valoren de 0 a 10, siendo el cero que no lo recomendaran en ningn caso y siendo el 10
que lo recomendaran seguro. Los valores 9 y 10 son los denominados promotores; los
valores 7 y 8 son pasivos; y los valores por debajo de 7 son los detractores. La frmula
que se aplica al total de encuestas realizadas es la siguiente:
NPS= %Promotores - %Detractores

Vamos a calcular el NPS haciendo uso de las funciones CONTAR.SI y CONTAR partiendo
del siguiente ejemplo:

Seleccionamos el rango C3:C22 y le damos el nombre PUNTOS. A continuacin, nos


situamos en F2 y escribimos la frmula:
Indicar finalmente que Cualquier puntuacin del NPS que supere el 0% se considera
como buena, ya que cuando esto sucede significa que el nmero de personas que han
dado puntuaciones de 9 10 es superior al nmero de personas que han dado el resto de
puntuaciones. A partir del 50% se considera un resultado excelente.

Lista de Valores no Repetidos


"Necesito comparar dos columnas y crear una tercera columna en la que aparezcan los
datos que no estn repetidos. Es decir, si la columna A contiene nmeros del 1 al 12 y la
columna B contiene nmeros del 1 al 10, necesito que en la columna C me aparezcan el
11 y el 12, ya que son los nicos dos valores que no estn repetidos".

Partimos del siguiente ejemplo:


Vamos a generar una lista con los valores que no estn repetidos. Por otro lado, vamos a
ordenar dichos valores de mayor a menor y, finalmente, vamos a resaltar con color de
relleno cules son estos valores. Para ello trabajaremos con las
funciones CONTAR.SI, SI.ERROR, SI, y K.ESIMO.MAYOR, y con la
herramienta Formato Condicional.

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".

Para solucionar este problema utilizaremos las


funciones DESREF, CONTAR y ALEATORIO.ENTRE . Partimos del siguiente ejemplo:
Lo primero que hacemos es darle nombre al rango de valores. Seleccionamos desde B3
hasta B16, hacemos clic en el cuadro de nombres (a la izquierda de la barra de frmulas)
y escribimos el nombre: valores y pulsamos Enter. A continuacin nos situamos en la
celda D10 y escribimos la siguiente frmula que explico a continuacin:
=DESREF(B2;ALEATORIO.ENTRE(1;CONTAR(valores));)

CONTAR(Valores) cuenta el nmero de valores que hay en dicho rango. En nuestro


ejemplo el resultado ser 14. Al anidar esta funcin dentro de la funcin
ALEATORIO.ENTRE, estamos consiguiendo que genere un nmero aleatorio entre 1 y 14
(que es el nmero mnimo y mximo de filas de nuestro rango). El problema es que entre
1 y 14 hay valores que no se encuentran en nuestra lista, por ejemplo el 7, el 11, el 12,
etctera. Lo que hacemos ahora es utilizar el nmero aleatorio generado para ir a una
posicin de la lista que tenemos y obtener el nmero que se encuentre en dicha posicin.
Para ello utilizamos la funcin DESREF. Partimos de la celda B2 y, a partir de dicha celda,
excel se posicionar en la fila del rango Valores que de manera aleatoria hemos generado
con el resto de la frmula ya explicada. Si, por ejemplo, el nmero generado es un 11,
excel se desplazar 11 filas ms abajo de la celda de partida (B2) y nos devolver el valor
de B13, esto es, 6. Pruebe a pulsar la tecla F9 y ver cmo se recalcula el nmero y
siempre dentro de los existentes en la lista :
Insertar Filas Intercaladas
"Tengo un archivo con unas 800 filas escritas y necesito intercalar una fila en blanco entre
cada una de dichas filas escritas".

Empecemos por un caso sencillo. Tenemos la siguiente tabla mostrada en la imagen y


queremos aadir una fila intercalada:
La forma ms sencilla es utilizar la seleccin discontinua. Presionando la tecla Ctrl,
hacemos clic en las celdas B4, B5, B6... hasta B12. Debemos hacer un clic en cada celda
y no seleccionar como rango. Una vez tengamos hecha la seleccin discontinua vamos al
men Insertar/ Insertar Filas de Hoja y objetivo conseguido.
El problema es que si tenemos una cantidad grande de filas este sistema se hace eterno.
He encontrado en la red una solucin que me parece muy original y sencilla (sin
necesidad de realizar macros) que comparto con vosotros y que encontraris en el
siguiente link la web del programador .
Voy a aplicarlo a nuestro ejemplo para que se vea bien aunque donde es verdaderamente
efectivo es en tablas con muchas filas. Lo primero que hacemos, siguiendo las
indicaciones de Ricardo -autor del post-, es generar una lista de nmeros impares. En
nuestro ejemplo original, nos situamos en la celda A2 y escribimos el rtulo N (por
ejemplo). En A3 escribimos un 1 y en A4 un 3. Seleccionamos A3:A4 y copiamos hasta
A12, que es la ltima fila de nuestra tabla. A continuacin generamos una lista de
nmeros pares a partir de A13. En dicha celda escribimos un 2 y en A14 un 4.
Seleccionamos ambas y copiamos hasta A22 (10 filas en total). Obtenemos lo siguiente:
Ahora slo tenemos que situarnos en A3 e ir al men Ordenar y Filtrar/Ordenar de la A a
Z:
Procedemos ahora a borrar la columna A y problema resuelto (tan slo tendremos que
retocar algn formato si ya los tenamos preestablecidos antes de realizar la operacin).

Obtener Parte de una Cadena Alfanumrica


"Tengo una columna con ms de 500 registros de un cdigo alfanumrico. La estructura
es: una serie de nmeros, un espacio, una serie de letras. La cantidad de nmeros y
letras es variable pero siempre los separa un espacio. Necesito obtener slo los nmeros
y que se queden como formato de valor (no de texto)".
La solucin es muy sencilla utilizando tres funciones
como VALOR, IZQUIERDA y HALLAR. Partimos del ejemplo que se muestra en la
siguiente imagen y queremos obtenr lo que se muestra en la segunda imagen:

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):

En la celda C7 escribimos la frmula:


=DIAS360(C2;C3)

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.

Copia Masiva de Celdas


"Tengo una tabla cuya primera fila son celdas con datos y frmulas y necesito copiar
dicha primera fila hasta la fila 15.000 Hay alguna otra forma que no sea "tirando hacia
abajo" manualmente con el ratn?".

Efectivamente existe una forma ms directa y menos cansina... Supongamos que


tenemos una tabla con tres campos y queremos copiar el contenido de dichos campos
hasta la fila 15.000 de nuestra hoja:
Para ello seleccionamos el rea que deseamos copiar, en nuestro caso el rango B3:D3 y
vamos al cuadro de nombres (como se puede ver en la siguiente imagen) y escribimos la
ltima celda del rango donde deseamos pegar lo copiado. En nuestro caso escribiremos
D15000 ya que la ltima columna del rango seleccionado es la D y queremos copiar hasta
la fila 15.000
A continuacin NO pulsamos Enter. Pulsamos Shift + Enter y de esta manera tendremos
seleccionado el rango B3:D15000 como se ve en la imagen:
Ya slo nos queda ir al men Rellenar / Hacia abajo y terminaremos el copiado en tan slo
unos segundos:

Validacin de Caracteres No Nmericos


Descargar Archivo

"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:

Buscamos que excel permita entradas como las mostradas en B3 y B4 (indistintamente


maysculas o minsculas y con un largo entre 1 y 10 caracteres en este ejemplo) y que
no permita entradas como B5 (alfanumricas):
Para ello necesitamos "desmenuzar" carcter por carcter cada entrada. Primero vamos a
realizar una lista con el nmero de caracteres de B3 para lo que debemos escribir las
siguientes frmulas:

copiamos la frmula de E3 hasta M3. Finalmente copiamos el rango D3:M3 hasta


D10:M10.
La primera frmula comprueba si hay algo escrito en B3, en cuyo caso devuelve el primer
valor de nuestra lista, esto es, 1. En caso de que no haya nada devuelve el texto X.
La frmula de E3 comprueba si la celda anterior (D3) es menor que el largo total (nmero
de caracteres) de la entrada de B3. En tal caso le suma 1 a la entrada anterior, por lo que
devuelve 2 para seguir completando nuestra lista. En F3 y siguientes la frmula
comprueba lo mismo hasta que el nmero que aparezca supere al largo de la entrada, en
cuyo caso devolver una X:
Una vez generada una lista con el nmero de caracteres de cada entrada, pasamos a
comprobar si cada uno de dichos caracteres es una letra o no. Para ello nos situamos en
la celda N3 y escribimos la siguiente frmula:

=--NO(ESERROR(1*(EXTRAE($B3;D3;1)))) y copiamos hasta W3 y posteriormente hasta


W10 para finalizar la matriz.

Veamos como funciona esta frmula:


La funcin EXTRAE nos permite extraer del texto de B3 un nmero de caracteres a partir
de una posicin inicial. El primer argumento de la funcin es B3 para indicarle en qu
celda est el texto que nos interesa. El segundo argumento es el que hace referencia a la
posicin inicial, es decir, el nmero de carcter del texto de B3 desde el que debe de
empezar la extraccin. En nuestro caso ponemos D3 para que cuando copiemos hacia la
derecha vaya cambiando a E3, F3, G3, etc. El ltimo argumento indica el nmero de
caracteres a extraer y que en nuestro caso es siempre 1. Con esta parte de la frmula
hemos conseguido desmenuzar carcter por carcter la entrada de B3.
A continuacin lo multiplico por 1 para convertirlo en valor (de hecho podra utilizar
tambin la funcin VALOR). Si se trata de un carcter numrico se convertir en valor y
en el caso contrario (si es una letra) me devolver un error.
Ahora nos interesa comprobar si NO es un error, para lo que anido la
funcin ESERROR dentro de la funcin NO. Aquellas entradas que no devuelvan un error
me devolvern un valor VERDADERO y las que devuelvan un error mostrarn FALSO.
Colocando un doble menos -- delante de la funcin convertimos estos valores
VERDADERO y FALSO en 1 y 0 (lo podemos hacer tambin con la funcin N, como
hemos visto en otros ejemplos).
En resumen, en el rango N3:W3 obtendremos un cero para aquellos caracteres de la
entrada de B3 que sean alfabticos y un 1 para aquellos que sean numricos:
Ya slo nos queda aplicar la Validacin de datos. Para ello seleccionamos el rango
B3:B10. Abrimos la herramienta de validacin y marcamos Criterio de validacin
Personalizada. En Frmula escribimos: =SUMA (N3:W3)=0

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)".

Para solucionar este problema utilizaremos dos funciones, a


saber, DESREF y CONTARA y la herramienta de Validacin de Datos. Partimos del
siguiente ejemplo:
Si utilizamos directamente la herramienta de Validacin y seleccionamos como lista el
rango E3:E20 entonces nos aparecer un desplegable con 13 opciones en blanco:
Para evitar este problema vamos a crear un rango dinmico. Empezamos por crear el
nombre del rango de los participantes, esto es, seleccionamos E3:E20 y en el cuadro de
nombres (a la izquierda de la barra de frmulas) escribimos el nombre Listado. A
continuacin vamos a la ficha Datos / Validacin de datos y seleccionamos Lista.
En Origen escribimos la frmula:

=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".

La solucin es muy sencilla. Partimos del siguiente ejemplo:


Nos situamos en la celda C3 y escribimos:
=MAX(C$8:C$19) y copiamos hasta la celda G3
En C4 escribimos:
=MIN(C$8:C$19) y copiamos hasta la celda G4
En C5 escribimos:
=PROMEDIO(C$8:C$19) y copiamos hasta la celda G5
Seleccionamos ahora el rango C8:G19 y vamos a Formato Condicional / Utilice una
frmula que determine las celdas para aplicar formato. En Editar una descripcin de
regla escribimos la siguiente frmula:
=C8=C$3 y pulsamos el botn Formato. Ahora seleccionamos el Relleno de color naranja
y la fuente negrita (por ejemplo) y aceptamos.
Realizamos la misma operacin de nuevo pero escribiendo ahora la frmula:
=C8=C$4 y en el Formato seleccionamos el color verde y fuente negrita.
Finalmente vamos a resaltar aquellas zonas cuyo promedio se encuentre por encima del
promedio total. Para ello seleccionamos el rango C7:G7 y vamos a Formato Condicional /
Utilice una frmula que determine las celdas para aplicar formato. En Editar una
descripcin de regla escribimos la siguiente frmula:
=C$5>=PROMEDIO($C$5:$G$5) y en el botn Formato seleccionamos, por ejemplo,
relleno rosa y fuente negrita.
Lista de Valores nicos (con Frmulas)
"Tengo un listado de ms de 500 registros donde uno de los campos es un cdigo. Estos
cdigos estn repetidos en los distintos registros y necesito generar una lista utilizando
frmulas que me muestre los cdigos nicos que existen".

Este problema ya lo resolvimos haciendo uso de filtros avanzados y tablas dinmicas en


artculos anteriores. Vamos a ver ahora cmo solucionarlo mediante frmulas. A
continuacin muestro de dnde partimos y a dnde queremos llegar:
Empezamos generando una columna de procesos en I3 para obtener los valores nicos.
Para ello nos situamos en dicha celda y escribimos la siguiente frmula y la copiamos
hasta la celda I27:

=SI(N(CONTAR.SI($C$3:C3;C3)=1);C3;"")

Desgranemos esta frmula: CONTAR.SI($C$3:C3;C3)=1 verifica cada valor empezando


por C3, y devuelve el valor VERDADERO cuando el cdigo aparece por primera vez
dentro del "rango dinmico" que generamos ($C$3:C3). Para convertir en 1 y 0 los valores
VERDADERO FALSO que devuelve esta parte de la frmula utilizamos la funcin N, ya
vista en otros artculos de este blog. Finalmente hacemos uso del condicional para
transformar los valores 1 en el cdigo que le corresponde y los valores 0 convertirlos en
"". El resultado es el siguiente:

A continuacin nos situamos en la celda H3 y escribimos la frmula: =SI(I3="";"";B3)


De esta manera colocamos el nmero que le corresponde en el listado original a cada
cdigo. Obtenemos lo siguiente:
Procedemos ahora a ordenar los datos para dejar los valores nicos al principio de la lista
y los valores "en blanco" al final. Para ello nos situamos en la celda H3 y escribimos la
siguiente frmula que debemos copiar hasta H27:

=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:

1. Seleccionamos el rango E3:F27 y vamos a Formato Condicional / Nueva regla.


2. Seleccionamos "Utilice una frmula que determine las celdas para aplicar formato".
3. En "Editar una descripcin de regla" escribimos la siguiente: =E3<>""
4. Pulsamos el botn Formato y marcamos los bordes de la celda que queremos que
aparezca (u otro formato que deseemos).
5. Terminamos pulsando Aplicar y Aceptar. Y trabajo concluido:
Ordenar Automticamente una Lista con Valores Repetidos
"Tengo una tabla con cifras de ventas de distintas zonas y me gustara generar otra tabla
idntica que me ordenara automticamente de mayor a menor dichas zonas en funcin
de las ventas logradas".

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

El resultado de dicha es frmula es el siguiente:


Utilizando la columna F (Jerarquia2) ya podemos aplicar nuestra solucin del caso original
y resolver el problema. Preparamos el siguiente cuadro (tal y como hicimos en el caso
original):

Nos ponemos en la celda I3 y escribimos la siguiente frmula:


=INDICE(Zona;COINCIDIR($H3;$F$3:$F$14;0))
Nos ponemos en la celda J3 y escribimos la siguiente frmula:
=INDICE(Ventas;COINCIDIR($H3;$F$3:$F$14;0))

Finalmente seleccionamos el rango I3:J3 y copiamos hacia abajo hasta I14:J14 , y trabajo
terminado:

Anda mungkin juga menyukai