You are on page 1of 29

FRMULAS VARIAS

Notas:
Dependiendo de la configuracin regional del equipo, los puntos y comas de estas
frmulas podran tener que ser sustituidos por comas.
Bastantes frmulas aparecen encerradas entre llaves { }. Esto significa que son frmulas
matriciales, y que para introducirlas es necesario pulsar Maysculas+Control+Entrada al
mismo tiempo. Las llaves propiamente dichas no hay que teclearlas: si todo va bien,
deberan aparecer en la barra de frmulas despus de introducirla como matricial.
La funcin SUMAPRODUCTO que se usa en algunas frmulas no puede utilizarse con
columnas completas en Excel 2003 (pero s con filas completas) y, adems, conviene
ajustar al mximo los rangos que se le pasan como argumentos a esta funcin porque
evala todas las celdas de dichos rangos, estn o no vacas. Esta misma recomendacin
es vlida tambin para las frmulas matriciales.
Algunas frmulas son bastante complejas de forma que, a pesar de que las he probado
varias veces antes de ponerlas aqu, pudiera darse el caso de que no funcionaran bien en
todas las situaciones. Si encuentras alguno de estos casos, puedes notificrmelo a la
siguiente direccin de correo electrnico: excel ARROBA jrgc.es, e intentar arreglarlo.
En esta pgina estn todas las frmulas sin un orden en concreto. Hay un ndice por
temas en este enlace.
En Excel 2010 Microsoft ha cambiado el nombre de algunas funciones. Una tabla con los
cambios ms notables puede consultarse aqu. ACTUALIZACIN JUNIO DE 2011: con el
lanzamiento del Service Pack 1 para Office 2010, Microsoft se ha corregido a s misma y
ha revertido los cambios de nombres de funciones.


Poner en una celda el nombre del libro: [Ejemplo]
=EXTRAE(CELDA("nombrearchivo");ENCONTRAR("[";CELDA("nombrearchivo"))+1;ENCONTRAR
("]";CELDA("nombrearchivo"))-ENCONTRAR("[";CELDA("nombrearchivo"))-1)
Nota: para que esto funcione es necesario haber guardado el libro al menos una vez.

Poner en una celda el nombre de la hoja: [Ejemplo]
=EXTRAE(CELDA("nombrearchivo";A1);ENCONTRAR("]";CELDA("nombrearchivo";A1))+1;32)

Si el libro tiene una sola hoja y adems libro y hoja se llaman igual, es necesario complicar
bastante la frmula: [Ejemplo]

=SI(ESERROR(EXTRAE(CELDA("nombrearchivo";A1);ENCONTRAR("]";CELDA("nombrearchivo";
A1))+1;32));EXTRAE(SUSTITUIR(CELDA("nombrearchivo";A1);"\";"*";LARGO(CELDA("nombrearc
hivo";A1))-
LARGO(SUSTITUIR(CELDA("nombrearchivo";A1);"\";"")));ENCONTRAR("*";SUSTITUIR(CELDA("n
ombrearchivo";A1);"\";"*";LARGO(CELDA("nombrearchivo";A1))-
LARGO(SUSTITUIR(CELDA("nombrearchivo";A1);"\";""))))+1;32);EXTRAE(CELDA("nombrearchivo
";A1);ENCONTRAR("]";CELDA("nombrearchivo";A1))+1;32))

Saber la edad exacta (o cualquier otro perodo de tiempo) expresada en aos, meses y
das: [Ejemplo]
=SIFECHA(A1;HOY();"y") & " aos " & SIFECHA(A1;HOY();"ym") & " meses " &
SIFECHA(A1;HOY();"md") & " das"
(suponiendo que la fecha de nacimiento estuviera en A1 y que se quisiera saber la edad a fecha de
hoy).

Si no se desea que aparezcan incoherencias como, por ejemplo, "0 meses" o "1 das", se puede
usar una frmula ms compleja:
=SI(SIFECHA(A1;HOY();"y")>0;SIFECHA(A1;HOY();"y")&"
"&ELEGIR(MIN(SIFECHA(A1;HOY();"y")+1;3);"";"ao ";"aos
");"")&SI(SIFECHA(A1;HOY();"ym")>0;SIFECHA(A1;HOY();"ym")&"
"&ELEGIR(MIN(SIFECHA(A1;HOY();"ym")+1;3);"";"mes ";"meses
");"")&SI(SIFECHA(A1;HOY();"md")>0;SIFECHA(A1;HOY();"md")&"
"&ELEGIR(MIN(SIFECHA(A1;HOY();"md")+1;3);"";"da ";"das ");"")

Esta misma frmula, con unas pequeas modificaciones, sirve tambin para convertir en aos,
meses y das un nmero de das determinados (valgan como ejemplo los nmeros de das que
figuran en los informes de vida laboral de la Seguridad Social espaola). Si el numero de das a
convertir est en A1 la frmula sera:

=SI(SIFECHA(--"1-1-1900";A1+2;"y")>0;SIFECHA(--"1-1-1900";A1+2;"y")&"
"&ELEGIR(MIN(SIFECHA(--"1-1-1900";A1+2;"y")+1;3);"";"ao ";"aos ");"")&SI(SIFECHA(--"1-1-
1900";A1+2;"ym")>0;SIFECHA(--"1-1-1900";A1+2;"ym")&" "&ELEGIR(MIN(SIFECHA(--"1-1-
1900";A1+2;"ym")+1;3);"";"mes ";"meses ");"")&SI(SIFECHA(--"1-1-1900";A1+2;"md")>0;SIFECHA(-
-"1-1-1900";A1+2;"md")&" "&ELEGIR(MIN(SIFECHA(--"1-1-1900";A1+2;"md")+1;3);"";"da ";"das
");"")

Como curiosidad, en esta frmula todos los +2 deberan ser +1. Esa unidad adicional es necesaria
porque Excel, para no perder la compatibilidad, "hered" un error procedente de Lotus 1-2-3, que
errneamente consideraba que el ao 1900 fue bisiesto cuando en realidad no lo fue.


Sumar las celdas situadas en las filas impares de una columna: [Ejemplo]
{=SUMA((RESIDUO(FILA(A1:A100);2)=1)*A1:A100)}

=SUMAPRODUCTO((RESIDUO(FILA(A1:A100);2)=1)*A1:A100)

Sumar las celdas situadas en las filas pares de una columna: [Ejemplo]
{=SUMA((RESIDUO(FILA(A1:A100);2)=0)*A1:A100)}

=SUMAPRODUCTO((RESIDUO(FILA(A1:A100);2)=0)*A1:A100)

Sumar las celdas situadas en las columnas impares de una fila (A,C,E, etc.): [Ejemplo]
{=SUMA((RESIDUO(COLUMNA(A1:D1);2)=1)*(A1:D1))}

=SUMAPRODUCTO((RESIDUO(COLUMNA(A1:G1);2)=1)*A1:G1)

Sumar las celdas situadas en las columnas pares de una fila (B,D,F, etc.): [Ejemplo]
{=SUMA((RESIDUO(COLUMNA(A1:D1);2)=0)*(A1:D1))}

=SUMAPRODUCTO((RESIDUO(COLUMNA(A1:G1);2)=0)*A1:G1)

Nota 1: estas frmulas sirven tambin, lgicamente, para sumar cada n filas o columnas. Por
ejemplo, para sumar cada 5 filas de una columna:
{=SUMA((RESIDUO(FILA(A1:A100);5)=0)*A1:A100)}



Saber el nmero de elementos distintos que hay en un rango: [Ejemplo]
Si en el rango no hay celdas vacas, se puede usar:
{=SUMA(1/CONTAR.SI(A1:A10;A1:A10))}

=SUMAPRODUCTO(1/CONTAR.SI(A1:A10;A1:A10))

Si hubiera o pudiera haber celdas vacas:
{=SUMA((A1:A10<>"")/CONTAR.SI(A1:A10;A1:A10&""))}

=SUMAPRODUCTO((A1:A10<>"")/CONTAR.SI(A1:A10;A1:A10&""))
(lgicamente, estas dos funciones se pueden usar tambin si no hay celdas vacas)

y si slo hubiera nmeros en las celdas se podra usar:
=SUMA(SIGNO(FRECUENCIA(A1:A10;A1:A10)))
que sirve tanto si hay celdas vacas como si no las hay.

Hallar la suma de los valores nicos en un rango: [Ejemplo]
Si se necesita saber la suma de los valores nicos de un rango con nombre llamado Lista (es decir,
sumando una sola vez cada valor aunque est ms de una vez en el rango), se puede usar la
frmula:
{=SUMA(Lista/CONTAR.SI(Lista;Lista))}
Lo mismo hace;
=SUMAPRODUCTO(Lista/CONTAR.SI(Lista;Lista))

Nota: el rango no puede tener ni celdas vacas, ni textos, ni valores lgicos. Si hubiera fechas, la
frmula las considerara nmeros.


Mostrar los datos de una lista omitiendo los duplicados [Ejemplo]
Suponiendo que en un rango con nombre llamado 'Lista' (de una sola columna y sin celdas vacas)
hay un conjunto de datos uno o ms de los cuales pueden estar repetidos, y que se necesita una
lista en la que se hayan eliminado los duplicados, se podra usar:
{=INDICE(Lista;K.ESIMO.MENOR(SI(COINCIDIR(Lista;Lista;0)=FILA(INDIRECTO("1:"&CONTARA
(Lista)));COINCIDIR(Lista;Lista;0);"");FILA()))}

La frmula anterior habra que ponerla en la fila 1 de una columna cualquiera, y copiarla hacia
abajo. Cuando no quedaran ms datos que mostrar, comenzara a aparecer el error #NUM!

Si la frmula matricial hubiera de estar situada en una fila distinta a la 1, habra que restar el
nmero de dicha fila menos uno en la segunda vez que aparece la funcin FILA(). Por ejemplo,
para empezar en la fila 5:
{=INDICE(Lista;K.ESIMO.MENOR(SI(COINCIDIR(Lista;Lista;0)=FILA(INDIRECTO("1:"&CONTARA
(Lista)));COINCIDIR(Lista;Lista;0);"");FILA()-4))}

Si el rango con nombre 'Lista' estuviera dispuesto en una fila en lugar de en una columna, las
frmulas seran:
{=INDICE(Lista;K.ESIMO.MENOR(SI(TRANSPONER(COINCIDIR(Lista;Lista;0))=FILA(INDIRECTO
("1:"&CONTARA(Lista)));TRANSPONER(COINCIDIR(Lista;Lista;0));"");FILA()))}

e

{=INDICE(Lista;K.ESIMO.MENOR(SI(TRANSPONER(COINCIDIR(Lista;Lista;0))=FILA(INDIRECTO
("1:"&CONTARA(Lista)));TRANSPONER(COINCIDIR(Lista;Lista;0));"");FILA()-4))}


Obtener una lista ordenada de los valores nicos de un rango. [Ejemplo]
Suponiendo que en un rango con nombre llamado "Lista" (de una sola columna y sin celdas vacas)
hay un conjunto de valores que pueden estar repetidos, y que se necesita una lista ordenada de
mayor a menor de los valores nicos (sin repeticiones), la frmula sera:
{=SI(K.ESIMO.MAYOR(SI(CONTAR.SI(DESREF(Lista;;;FILA(INDIRECTO("1:"&CONTAR(Lista))));
Lista)=1;Lista;MIN(Lista)-
1);FILA())>=MIN(Lista);K.ESIMO.MAYOR(SI(CONTAR.SI(DESREF(Lista;;;FILA(INDIRECTO("1:"&
CONTAR(Lista))));Lista)=1;Lista;MIN(Lista)-1);FILA());"Valor repetido")}

Si se deseara que la lista estuviera ordenada de menor a mayor, la frmula sera:
{=SI(K.ESIMO.MENOR(SI(CONTAR.SI(DESREF(Lista;;;FILA(INDIRECTO("1:"&CONTAR(Lista))));
Lista)=1;Lista;MAX(Lista)+1);FILA())<=MAX(Lista);K.ESIMO.MENOR(SI(CONTAR.SI(DESREF(List
a;;;FILA(INDIRECTO("1:"&CONTAR(Lista))));Lista)=1;Lista;MAX(Lista)+1);FILA());"Valor repetido")}

Nota: las listas generadas por ambas frmulas tambin pueden servir si lo que se necesita es una
jerarquizacin de los elementos nicos del rango.


Nmeros de puesto nicos. [Ejemplo]
Si, por ejemplo, se tiene un rango con nombre llamado Notas, en el que las notas estn repetidas
(p.ej., 2 dieces, 2 nueves, etc.) y se desea obtener el puesto nico de cada una de ellas (los dos
dieces el primer puesto, los dos nueves el segundo, etc.), la frmula sera:

{=COINCIDIR(A2;K.ESIMO.MAYOR(SI(FRECUENCIA(Notas;Notas)<>0;Notas);FILA(INDIRECTO(
"1:"&SUMA(1/CONTAR.SI(Notas;Notas)))));0)}

Sustituyendo K.ESIMO.MAYOR por K.ESIMO.MENOR es posible obtener los puestos nicos, pero
otorgndole a la nota ms baja el puesto ms alto y as con todas las dems.



Averiguar los valores que faltan en una serie de nmeros enteros [Ejemplo]
Si se quiere un listado de los nmeros que faltan en una serie de nmeros
enteros positivos llamada Lista, se podra usar la frmula:

{=K.ESIMO.MAYOR(SI(CONTAR.SI(Lista;FILA(INDIRECTO(MIN(Lista)&":"&MAX(Lista))))=0;FILA(I
NDIRECTO(MIN(Lista)&":"&MAX(Lista)));0);FILA())}

La frmula habra que ponerla en la fila 1 de una columna vaca y copiarla hacia abajo. Los
nmeros faltantes iran apareciendo de mayor a menor, y cuando no quedaran ms nmeros
faltantes, comenzaran a aparecer ceros.

Si se necesitara que los nmeros faltantes fueran apareciendo ordenados de menor a mayor, se
podra usar la frmula:

{=K.ESIMO.MENOR(SI(CONTAR.SI(Lista;FILA(INDIRECTO(MIN(Lista)&":"&MAX(Lista))))=0;FILA(I
NDIRECTO(MIN(Lista)&":"&MAX(Lista)));FALSO);FILA())}

En este caso, cuando no queden ms nmeros faltantes comenzar a mostrarse el error #!NUM

La serie de nmeros no tiene que estar necesariamente ordenada ni de mayor a menor ni a la
inversa, si bien el ejemplo lo est para mayor claridad. Tampoco sucede nada si uno o ms
nmeros de la serie estn repetidos.

He recibido una consulta que plantea una situacin interesante que me ha hecho escribir una
nueva frmula: se trata de averiguar qu nmeros faltan en una serie cuyo nmero inicial es muy
grande, por ejemplo 10010003456.

En este caso, las formulas anteriores fallaran porque no pueden procesar nmeros superiores al
mximo de filas de Excel (65.536 en la versin 2003, 1.048.576 a partir de la versin 2007), as
que en este caso y similares habra que usar:

{=MIN(Lista)-1+K.ESIMO.MAYOR(SI(ESERROR(COINCIDIR(FILA(INDIRECTO(MIN(Lista)-
MIN(Lista)+1&":"&MAX(Lista)-MIN(Lista)+1));Lista-MIN(Lista)+1;0));FILA(INDIRECTO(MIN(Lista)-
MIN(Lista)+1&":"&MAX(Lista)-MIN(Lista)+1));"");FILA())}

para que los nmeros faltantes aparecieran ordenados de menor a mayor, y sustituir .MENOR por
.MAYOR si el orden deseado fuera el inverso.

Lgicamente, esta ltima frmula puede usarse tambin si la serie comienza con cualquier nmero
ms bajo. Otra ventaja de esta ltima frmula es que puede procesar nmeros enteros negativos y
positivos. El inconveniente es que es ms compleja que la primera.

Si se sabe que tan slo falta un nmero en la serie de enteros positivos, es posible utilizar una
frmula ms sencilla (aunque ms interesante desde un punto de vista matemtico) para averiguar
cual es el que falta. Por ejemplo, si en la columna A se encuentra la serie de nmeros (y slo la
serie) sin repeticiones, la frmula sera:

=(MIN(A:A)+MAX(A:A))*(MAX(A:A)-MIN(A:A)+1)/2-SUMA(A:A)



Obtener un valor aleatorio de entre las filas con datos de una columna: [Ejemplo]
=INDICE(A:A;REDONDEAR(ALEATORIO()*(CONTARA(A:A)-1)+1;0))
En este caso, los datos estaran en la columna A.
Los datos deben empezar en la fila 1 y no tener celdas vacas entre medias.

Contar y/o sumar las celdas cuyo valor se encuentra entre dos valores dados: [Ejemplo]
=SUMAPRODUCTO((A1:A25>=5)*(A1:A25<=15))
o, usando la funcin CONTAR.SI:
=CONTAR.SI(A1:A25;">=5")-CONTAR.SI(A1:A25;">15")
Ambas frmulas devolveran el nmero de celdas cuyo valor estuviera entre 5 y 15 en el rango
A1:A25.

=SUMAPRODUCTO((A1:A25>=5)*(A1:A25<=15)*A1:A25)
o, usando la funcin CONTAR.SI:
=SUMAR.SI(A1:A25;">=5")-SUMAR.SI(A1:A25;">15")
Ambas frmulas devolveran la suma de los nmeros cuyo valor estuvieran entre 5 y 15 en el
rango A1:A25


Contar las celdas de un determinado mes y ao:
=SUMAPRODUCTO((MES(A1:A15)=1)*(AO(A1:A15)=2009))
En este caso, se contaran las celdas en el rango A1:A15 cuya fecha fuera del mes de enero del
ao 2009.
o, usando las funciones CONTAR.SI y FECHA:
=CONTAR.SI(A1:A15;">="&FECHA(2009;1;1))-CONTAR.SI(A1:A15;">"&FECHA(2009;1;31))


Sumar los X valores mayores o menores en una columna: [Ejemplo]
{=SUMA(K.ESIMO.MAYOR(A1:A50;FILA(INDIRECTO("1:3"))))}
o, usando SUMAPRODUCTO:
=SUMAPRODUCTO(K.ESIMO.MAYOR(A1:A50;FILA(INDIRECTO("1:3"))))
En este caso, se sumaran los 3 valores mayores del rango A1:A50
Para sumar los 3 valores menores, habra que sustituir K.ESIMO.MAYOR por K.ESIMO.MENOR



Nota: Las cuatro frmulas siguientes son ejemplos que trabajan con el rango A1:A100.
Saber el nmero de la primera fila con datos en una columna:
{=MIN(SI(A1:A100<>"";FILA(A1:A100)))}

Saber el valor de la primera fila con datos en una columna:
{=INDICE(A1:A100;MIN(SI(A1:A100<>"";FILA(A1:A100))))}

Saber el nmero de la ltima fila con datos en una columna:
{=MAX((A1:A100<>"")*FILA(A1:A100))}

Saber el valor de la ltima fila con datos en una columna:
=BUSCAR(2;1/(A1:A100<>"");A1:A100)
{=INDICE(A1:A100;MAX(SI(A1:A100<>"";FILA(A1:A100))))}




Nota: Las cuatro frmulas siguientes son ejemplos que trabajan con el rango A1:Z1
Averiguar el nmero de la primera columna con datos en una fila:
{=MIN(SI(A1:Z1<>"";COLUMNA(A1:Z1)))}

Averiguar el valor de la primera columna con datos en una fila:
{=INDICE(A1:Z1;;MIN(SI(A1:Z1<>"";COLUMNA(A1:Z1))))}

Averiguar el nmero de la ltima columna con datos en una fila:
{=MAX((A1:Z1<>"")*COLUMNA(A1:Z1))}

Averiguar el valor de la ltima columna con datos en una fila:
=BUSCAR(2;1/(A1:Z1<>"");A1:Z1)
{=INDICE(A1:Z1;;MAX(SI(A1:Z1<>"";COLUMNA(A1:Z1))))}



Frmulas para conocer el nmero de la primera o ltima fila cuyo valor es distinto de algo (o
su valor):
Imagen (13 kb)
Partiendo del ejemplo anterior, si se necesita:
el nmero de fila de la primera celda cuyo valor no es "a":
{=MIN(SI(A1:A10<>"a";FILA(A1:A10)))}

el valor de dicha celda:
{=DESREF(A1;MIN(SI(A1:A10<>"a";FILA(A1:A10)))-1;0)}

el nmero de fila de la ltima celda cuyo valor no es "a":
{=MAX(SI(A1:A10<>"a";FILA(A1:A10)))}

el valor de dicha celda:
{=DESREF(A1;MAX(SI(A1:A10<>"a";FILA(A1:A10)))-1;0)}

Si hubiera o pudiera haber celdas vacas en el rango a evaluar, habra que sustituir las dos
primeras frmulas por:
para el nmero de fila:
{=MIN(SI(A1:A10<>"a";SI(A1:A10<>"";FILA(A1:A10))))}

para el valor:
{=DESREF(A1;MIN(SI(A1:A10<>"a";SI(A1:A10<>"";FILA(A1:A10))))-1;0)}


Averiguar el nmero de veces en que coinciden los valores de dos columnas
Imagen (19 kb)
En este ejemplo se necesita saber cuantas veces tienen el mismo valor ambas celdas de la misma
fila. Dos posibilidades para lograrlo:
{=SUMA((A1:A10=B1:B10)*1)}
=SUMAPRODUCTO((A1:A10=B1:B10)*1)

Estas mismas frmulas serviran si la comparacin hubiera de hacerse entre dos filas:
{=SUMA((A1:J1=A2:J2)*1)}
=SUMAPRODUCTO((A1:J1=A2:J2)*1)


Saber el valor mnimo o el valor mximo que hay en un rango a partir de un valor dado
La funcin MIN devuelve el valor mnimo de un rango, pero si se necesita hallar el mnimo a partir
de un nmero determinado (por ejemplo, excluyendo los ceros y nmeros negativos), se puede
usar:
{=MIN(SI(A1:A10>0;A1:A10))}

De igual forma, si se necesita saber el valor mximo a partir de un valor determinado se puede
usar:
{=MAX(SI(A1:A10<10;A1:A10))}
En este caso, la frmula devolvera el valor mximo en A1:A10 excluyendo los valores superiores a
10.


Encontrar un valor en un rango de varias filas y columnas [Ejemplo]
Si, por ejemplo, se desea averiguar la direccin de la celda en la que se encuentra el nmero
111111 dentro del rango con nombre Datos, la frmula sera:
{=DIRECCION(COINCIDIR(1;SIGNO(CONTAR.SI(DESREF(Datos;FILA(Datos)-
CELDA("fila";Datos);0;1;);111111));0);COINCIDIR(1;SIGNO(CONTAR.SI(DESREF(Datos;;COLUM
NA(Datos)-CELDA("columna";Datos);;1);111111));0))}

A partir de Excel 2007 se puede utilizar esta frmula junto con ESERROR (y NO) como frmula
para una regla de validacin. En Excel 2003 y versiones anteriores esto no es posible porque las
frmulas necesarias superaran el lmite de siete niveles de anidamiento permitidos.

Conviene recordar que la funcin DIRECCION admite otros dos argumentos adicionales (tres en
realidad, pero el ltimo no nos interesa en lo que concierne a esta frmula):
- direccin absoluta, relativa o una mezcla de ambas
- estilo de referencia A1 (por defecto) o R1C1 (si se pone un 0 como ltimo argumento)


Frmulas para averiguar el ttulo de la columna o de la fila en que se encuentra el valor
mximo o mnimo de un rango
Imagen (28 kb)
A partir del ejemplo, si se necesita:
El encabezado de la columna en que aparece por primera vez el valor mayor:
{=INDICE(B1:D1;MIN(SI(MAX(B2:D4)=B2:D4;COLUMNA(B2:D4)))-1)}

El encabezado de la columna en que aparece por ltima vez el valor mayor:
{=INDICE(B1:D1;MAX((B2:D4=MAX(B2:D4))*COLUMNA(B2:D4))-1)}

El encabezado de la columna en que aparece por primera vez el valor menor:
{=INDICE(B1:D1;MIN(SI(MIN(B2:D4)=B2:D4;COLUMNA(B2:D4)))-1)}

El encabezado de la columna en que aparece por ltima vez el valor menor:
{=INDICE(B1:D1;MAX((B2:D4=MIN(B2:D4))*COLUMNA(B2:D4))-1)}

El encabezado de la fila en que aparece por primera vez el valor mayor:
{=INDICE(A2:A4;MIN(SI(MAX(B2:D4)=B2:D4;FILA(B2:D4)))-1)}

El encabezado de la fila en que aparece por ltima vez el valor mayor:
{=INDICE(A2:A4;MAX((B2:D4=MAX(B2:D4))*FILA(B2:D4))-1)}

El encabezado de la fila en que aparece por primera vez el valor menor:
{=INDICE(A2:A4;MIN(SI(MIN(B2:D4)=B2:D4;FILA(B2:D4)))-1)}

El encabezado de la fila en que aparece por ltima vez el valor menor:
{=INDICE(A2:A4;MAX((B2:D4=MIN(B2:D4))*FILA(B2:D4))-1)}


Sumar las cantidades correspondientes a los ltimos doce meses
Suponiendo que en el rango A1:A50 hay una serie de fechas, en B1:B50 unos importes
correspondientes a cada una de dichas fechas, y que se necesitara saber la suma de los importes
correspondientes a los ltimos doce meses, se podra usar:
=SUMAPRODUCTO((A1:A50>=FECHA(AO(HOY())-
1;MES(HOY());1))*(A1:A50<FECHA(AO(HOY());MES(HOY());1));B1:B50)
Y si se necesitara excluir de la suma los importes correspondientes al mes en curso, la frmula
sera:
=SUMAPRODUCTO((A1:A50>=FECHA(AO(HOY())-
1;MES(HOY())+1;1))*(A1:A50<FECHA(AO(HOY());MES(HOY());1));B1:B50)


Totalizar por semanas los importes de una tabla de meses y das
ver libro con un ejemplo (34 kb)
Nota sobre este ejemplo: la gran cantidad de frmulas matriciales -cincuenta y tres- que tiene la
nica hoja de este libro, junto con el gran nmero de clculos necesarios, hace que el reclculo
tenga un retardo perceptible.


Calcular un descuento en funcin de un baremo y de la cantidad comprada o vendida
Imagen (79 kb)
Si se necesita aplicar un descuento dependiendo del nmero de unidades compradas o vendidas,
es posible hacerlo anidando SIes, siempre y cuando los tramos del baremo sean siete o menos
(hasta Excel 2003). Usando los datos del ejemplo:
=SI(D2<=10;0,05;SI(D2<=20;0,08;SI(D2<=30;0,11;SI(D2<=40;0,14;SI(D2<=50;0,17;SI(D2<=60;0,2;
SI(D2<=70;0,23)))))))
Pero si los tramos son ms de siete (que es el caso del ejemplo), se puede recurrir a una frmula
matricial:
{=SI(D2>0;SI(D2>0;INDICE(B$2:B$11;MIN(SI((A$2:A$11>=D2);FILA(A$2:A$11)-1));1);0);0)}


Averiguar la fecha del domingo de Pascua de un ao (entre 1900 y 2203)
La siguiente frmula devuelve la fecha del domingo de Pascua del ao especificado en A1. Su
autor es Thomas Jansen. Fue presentada a un concurso para encontrar la frmula ms corta para
determinar el domingo de Pascua, que se desarroll en el sitio web de Hans W. Herber
(http://www.herber.de). La frmula en ingls es:
=DOLLAR((DAY(MINUTE(A1/38)/2+55)&".4."&A1)/7,)*7-6
Yo lo nico que he hecho ha sido traducirla al Excel en espaol:
=MONEDA((DIA(MINUTO(A1/38)/2+55)&"-4-" & A1)/7;)*7-6
Lgicamente, tambin es posible sustituir la referencia a la celda A1 por un ao. Por ejemplo, para
el ao 2008:
=MONEDA((DIA(MINUTO(2008/38)/2+55)&"-4-" & 2008)/7;)*7-6

Otra, un poco ms larga:
=MULTIPLO.INFERIOR(DIA(MINUTO(A1/38)/2+56)&"-5-"&A1;7)-34

Nota: Pedro Wave me ha corregido amablemente el rango de fechas de estas frmulas y me
seala que fallan para el ao 2079. Sugiero visitar su blog en el que se trata el tema del clculo del
domingo de Pascua en Excel de forma minuciosa.

La celda en la que se ponga cualquiera de las dos frmulas ha de tener formato de fecha, dado
que devuelven un nmero de serie.


Averiguar cual es el siguiente ao Jacobeo
Para averiguar cual es el prximo ao Jacobeo (el da 25 de julio es domingo), se puede usar la
frmula:
{=AO(HOY())+COINCIDIR(VERDADERO;DIASEM(FECHA(AO(HOY())+FILA(INDIRECTO("1:11
"))-1;7;25))=1;0)-1}


Averiguar el valor mximo de la suma de las celdas de varias columnas (o filas)
Por ejemplo, en el rango A1:C10 hay una serie de valores, y lo que se necesita es el valor mximo
de la suma de cada conjunto de tres celdas de cada fila. La frmula sera:
{=MAX(A1:A10+B1:B10+C1:C10)}

Para saber en qu fila se encuentra el mximo anterior, la frmula sera:
{=SUMA((MAX(A1:A10+B1:B10+C1:C10)=(A1:A10+B1:B10+C1:C10))*FILA(A1:A10))}
si no hay duplicados, y:
{=MAX((MAX(A1:A10+B1:B10+C1:C10)=(A1:A10+B1:B10+C1:C10))*FILA(A1:A10))}
si pudiera haberlos. sta frmula devuelve el nmero de la ltima fila cuyas celdas suman el valor
mximo.

Las frmulas para averiguar el valor mnimo son muy parecidas a las anteriores:
{=MIN(A1:A10+B1:B10+C1:C10)}
{=SUMA((MIN(A1:A10+B1:B10+C1:C10)=(A1:A10+B1:B10+C1:C10))*FILA(A1:A10))}
{=MAX((MIN(A1:A10+B1:B10+C1:C10)=(A1:A10+B1:B10+C1:C10))*FILA(A1:A10))}

Las frmulas para el caso de que los datos estuvieran situados de forma horizontal (p.ej., A1:J3)
seran:
{=MAX(A1:J1+A2:J2+A3:J3)}
{=SUMA((MAX(A1:J1+A2:J2+A3:J3)=(A1:J1+A2:J2+A3:J3))*COLUMNA((A1:J3)))}
{=MAX((MAX(A1:J1+A2:J2+A3:J3)=(A1:J1+A2:J2+A3:J3))*COLUMNA(A1:J1))}
para el valor mximo, y:
{=MIN(A1:J1+A2:J2+A3:J3)}
{=SUMA((MIN(A1:J1+A2:J2+A3:J3)=(A1:J1+A2:J2+A3:J3))*COLUMNA((A1:J3)))}
{=MAX((MIN(A1:J1+A2:J2+A3:J3)=(A1:J1+A2:J2+A3:J3))*COLUMNA(A1:J1))}
para el valor mnimo.


Contar y resumir datos filtrados [Ejemplo]
Normalmente, las funciones de Excel para resumir o contar datos en base a criterios trabajaran
con la lista completa (a excepcin de la funcin SUBTOTALES, que por defecto trabaja con los
datos visibles), pero Laurent Longre descubri hace aos una forma de usar la funcin DESREF
que permite trabajar tan slo con las filas visibles en cada momento en el rango filtrado.

Partiendo del ejemplo anterior, si por ejemplo se necesitara (siempre sobre las filas visibles):
sumar las celdas de la columna B cuyo valor fuera superior a 50, la frmula sera:
{=SUMA((B2:B15>50)*(SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1)))*B2:B15)}
contar dichas celdas:
{=SUMA((B2:B15>50)*(SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1))))}
sumar las celdas visibles de la columna B:
{=SUMA((SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1)))*B2:B15)}
(Nota: =SUBTOTALES(9;B2:B15) hace lo mismo, la frmula anterior es slo otro ejemplo de
esta forma de usar DESREF)
contar dichas celdas:
{=SUMA((SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-MIN(FILA(A2:A15));;1))))}
(Nota: =SUBTOTALES(2;B2:B15) hace lo mismo, la frmula anterior es slo otro ejemplo de
esta forma de usar DESREF)
contar los valores nicos en el rango de valores filtrado (B2:B15 en el ejemplo):
{=SUMA(SIGNO(FRECUENCIA(SI(SUBTOTALES(3;DESREF(B2:B15;FILA(B2:B15)-
2;;1))>0;B2:B15);SI(SUBTOTALES(3;DESREF(B2:B15;FILA(B2:B15)-2;;1))>0;B2:B15)))}
averiguar el nmero de fila de la primera que cumple la condicin activa:
{=COINCIDIR(1;SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1));0)+1}
averiguar el nmero de fila de la ltima que cumple la condicin activa:
{=MAX(SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1))*FILA(A2:A15))}
averiguar el valor activo en el filtro:
{=SI(SUMA((SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1))))=FILAS(A2:A15);"No hay filtro
activo.";INDICE(A2:A15;COINCIDIR(1;SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1));0)))}

Nota sobre esta ltima frmula: hasta Excel 2003 tan slo poda haber una condicin activa en el
filtro, pero en la versiones siguientes es posible tener activa ms de una condicin al mismo
tiempo. La frmula que devuelve una por una todas las condiciones activas es:

{=SI(SUMA((SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1))))=FILAS(A2:A15);"No hay filtro
activo.";INDICE(A2:A15;INDICE(K.ESIMO.MENOR(SI(FILA(A2:A15)-
1=SI(SUBTOTALES(3;DESREF(A2:A15;FILA(A2:A15)-
MIN(FILA(A2:A15));;1));COINCIDIR(A2:A15;A2:A15;0));FILA(A2:A15));FILA(INDIRECTO("1:"&FILA
S(A2:A15))));1)))}

que devolver la primera condicin activa. Para devolver las siguientes, habra que sustituir el
ltimo 1 de la frmula por el nmero que se desee.

Esta frmula trabaja con el supuesto de que hay tan slo una fila de ttulos. Si hubiese ms, habra
que sustituir el -1 por dicho nmero.

Hay disponible otro libro de ejemplo con esta frmula, que slo funcionar a partir de la versin
2007 puesto que supera el lmite de niveles de anidamiento permitidos hasta Excel 2003.



Frmula que simula la funcin BUSCARV, pero buscando en dos columnas
Imagen (19 kb)
En el ejemplo se necesita averiguar el valor de la celda de la columna C en cuya fila la columna A
tiene el valor 20 y la columna B tiene el valor 2. La frmula sera:
{=INDIRECTO("C"&COINCIDIR("202";A1:A9&B1:B9;0))}

o, usando la funcin INDICE:

{=INDICE(C1:C9;COINCIDIR("202";A1:A9&B1:B9;0))}


Averiguar la posicin de la ltima aparicin de un carcter en un texto
La funcin HALLAR devuelve la posicin en que aparece por primera vez un carcter dentro de
una cadena de texto, pero si se necesita saber la posicin en que aparece por ltima vez se puede
usar la frmula:
=ENCONTRAR(CARACTER(255);SUSTITUIR(A1;"b";CARACTER(255);LARGO(A1)-
LARGO(SUSTITUIR(A1;"b";""))))

En este caso la frmula devolvera la posicin de la ltima b dentro del texto que est en A1.

CARACTER(255) puede sustituirse por cualquier otro carcter que se sepa que en ningn caso va
a estar en el texto. Por ejemplo, si se supiera con seguridad que no va a haber ningn cero se
podra usar:
=ENCONTRAR("0";SUSTITUIR(A1;"b";"0";LARGO(A1)-LARGO(SUSTITUIR(A1;"b";""))))


Extraer los nmeros situados a la derecha o a la izquierda en una cadena de
texto. [Ejemplo]
Si se desea extraer el nmero situado a la derecha en una cadena situada en A1 (por ejemplo,
extraer 9854 de la cadena abcd9854), pero la longitud del nmero no es fija, se puede usar:

{=BUSCAR(9,99999999999999E+307;1*(DERECHA(A1;FILA(INDIRECTO("1:"&LARGO(A1))))))}

Para extraer el nmero situado a la izquierda (por ejemplo, extraer 9854 de la cadena 9854abcd),
lo nico que habra que hacer es sustituir DERECHA por IZQUIERDA.

Estas frmulas funcionarn con nmeros con decimales, siempre que el separador decimal en la
cadena de texto sea el mismo que el establecido en la configuracin regional del equipo.


Extraer un nmero de una cadena de texto [Ejemplo]
Si se tiene que extraer un nmero de una cadena de texto situada en A1 pero la posicin del
nmero no es fija, se puede usar la siguiente frmula:
{=EXTRAE(A1;COINCIDIR(1;1*ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));
1));0);LARGO(A1)-COINCIDIR(1;1*ESNUMERO(1*EXTRAE(A1;LARGO(A1)-
FILA(INDIRECTO("1:"&LARGO(A1)))+1;1));0)+1-
COINCIDIR(1;1*ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1));0)+1)}

La frmula devolver el nmero como cadena de texto. Si se necesitase convertirlo en su valor
para poder operar numricamente con l, lo nico que habra que hacer es multiplicar por 1 el
resultado (es decir, sustituir =EXTRAE por =1*EXTRAE)

La frmula sirve tambin para extraer una fecha o una hora de una cadena de texto. En este caso
sera posible convertir a hora la cadena de texto devuelta por la frmula usando la funcin
VALHORA (HORANUMERO en versiones anteriores a la 2010) o la funcin VALFECHA
(FECHANUMERO en versiones anteriores de Excel) para convertirla a fecha.

Hay que tener en cuenta que tan slo puede haber un nmero en la cadena de texto. Es decir, por
ejemplo la frmula funcionar con la cadena "extraer 125,50 de esta cadena" (devolver 125,50),
pero no con "extraer 125 y 250 de esta cadena" (devolver "125 y 250").

Si se sabe con seguridad que los nmeros a extraer de las cadenas de texto son enteros (no
tienen decimales), es posible utilizar una frmula ms sencilla:
{=EXTRAE(A1;COINCIDIR(1;1*ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));
1));0);CONTAR(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))}



Extraer todos los caracteres numricos de una cadena de texto [Ejemplo] <--Este ejemplo
slo funciona en Excel 2007 y 2010
Una complicacin de la frmula anterior sirve para extraer todos los caracteres numricos de una
cadena de texto, con la limitacin de que tan slo puede haber 14 caracteres numricos, como
mximo, a la derecha del primer nmero que no sea cero. Es decir, la frmula funcionar con, por
ejemplo, la cadena "xxx0000000000000abc123de45678fg901hi2345jk" (devolver
0000000000000123456789012345), pero no lo hara con "ab1234cd5678efg9012hi345jk6789"
(devolvera 123456789012346000). Esto es debido a la precisin nmerica de Excel, que es de 15
dgitos.

Esta frmula slo funcionar a partir de la versin 2007 ya que supera los siete niveles de
anidamiento permitidos como mximo hasta la versin 2003, y es posiblemente una de las ms
"desmesuradas" de las que hay en esta pgina, lo que quizs pueda resultar un poco sorprendente
porque, en principio, la tarea no parece muy complicada, pero en realidad para una sola frmula s
lo es:

{=REPETIR("0";COINCIDIR(1;ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)
)*(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)<>"0");0)-
LARGO(SUSTITUIR(IZQUIERDA(A1;COINCIDIR(1;ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO
("1:"&LARGO(A1)));1))*(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)<>"0");0));"0";"")))&S
UMA(EXTRAE(A1;K.ESIMO.MAYOR(ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(
A1)));1))*FILA(INDIRECTO("1:"&LARGO(A1)));FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(A1;FI
LA(INDIRECTO("1:"&LARGO(A1)));1)))));1)*10^(FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(A1;F
ILA(INDIRECTO("1:"&LARGO(A1)));1))))-1))}

En la frmula propuesta, a la expresin necesaria para extraer los nmeros (a partir de SUMA), ya
de por s bastante larga y complicada (282 caracteres), hay que anteponerle una an ms larga
expresin adicional (299 caracteres) para contar los posibles ceros a la izquierda y anteponerlos al
resto de dgitos para evitar que se pierdan. Por lo tanto, si lo que se necesita es el valor numrico
de los caracteres numricos de la cadena (lo que, lgicamente, implica despreciar los ceros que
pudiera haber a la izquierda), es posible prescindir de esa parte de la frmula (hasta el & de
"&SUMA" incluido), con lo que adquiere un tamao ms manejable, aunque sigue sin poder ser
utilizada en las versiones anteriores a Excel 2007 dado que mantiene intacta su estructura de
anidamientos:

{=SUMA(EXTRAE(A1;K.ESIMO.MAYOR(ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LAR
GO(A1)));1))*FILA(INDIRECTO("1:"&LARGO(A1)));FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(A
1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))));1)*10^(FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(
A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))))-1))}

Si se tratara de un nmero con decimales (por ejemplo extraer el nmero 987,0654 de la cadena
"a9b8c7,0d6e5f4"), se podra usar la frmula:
{=SUMA(EXTRAE(A1;K.ESIMO.MAYOR(ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LAR
GO(A1)));1))*FILA(INDIRECTO("1:"&LARGO(A1)));FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(A
1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))));1)*10^(FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(
A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))))-
1))/10^CONTAR(1*EXTRAE(DERECHA(A1;LARGO(A1)-
ENCONTRAR(",";A1));FILA(INDIRECTO("1:"&LARGO(DERECHA(A1;LARGO(A1)-
ENCONTRAR(",";A1)))));1))}
en la que si el separador decimal fuese el punto en vez de la coma habra que sustituir los "," por
".".

Si no se sabe con seguridad cual podr ser el separador decimal en el equipo en el que se vaya a
usar esta ltima frmula, es posible complicarla todava un poco ms para que ella misma lo
averige:
{=SUMA(EXTRAE(A1;K.ESIMO.MAYOR(ESNUMERO(1*EXTRAE(A1;FILA(INDIRECTO("1:"&LAR
GO(A1)));1))*FILA(INDIRECTO("1:"&LARGO(A1)));FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(A
1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))));1)*10^(FILA(INDIRECTO("1:"&CONTAR(1*EXTRAE(
A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))))-
1))/10^CONTAR(1*EXTRAE(DERECHA(A1;LARGO(A1)-
ENCONTRAR(EXTRAE(1/2;2;1);A1));FILA(INDIRECTO("1:"&LARGO(DERECHA(A1;LARGO(A1)-
ENCONTRAR(EXTRAE(1/2;2;1);A1)))));1))}

Estas frmulas procesan la cadena de texto situada en A1.


Saber el nmero de veces que aparece un carcter o una cadena en un texto
Suponiendo que A1 contiene el texto ABACDCABAEFE, para averiguar el nmero de aes que
aparecen en el texto:
=LARGO(A1)-LARGO(SUSTITUIR(A1;"A";""))
y para averiguar el nmero de veces que aparece ABA:
=(LARGO(A1)-LARGO(SUSTITUIR(A1;"ABA";"")))/3

Si se quisiera saber el nmero de aes que aparecen en el rango A1:A10, la frmula sera:
{=SUMA(LARGO(A1:A10)-LARGO(SUSTITUIR(A1:A10;"A";"")))}
y para averiguar el nmero de veces que aparece ABA en el mismo rango:
{=SUMA((LARGO(A1:A10)-LARGO(SUSTITUIR(A1:A10;"ABA";"")))/3)}


Averiguar el texto ms repetido en un rango
La funcin MODA devuelve el valor que ms se repite en un rango, pero tan slo se puede aplicar
a valores numricos. Si se necesitara emular esta funcin en un rango compuesto de celdas con
texto, y suponiendo que dicho rango fuera A1:A10, se podra usar la frmula:
=INDICE(A1:A10;MODA(COINCIDIR(A1:A10;A1:A10;0)))


Averiguar el elemento menos repetido en un rango
Si se necesita saber cual es el elemento menos repetido de, por ejemplo, el rango A1:A10 (en el
que no puede haber celdas vacas), la frmula sera:
{=INDICE(A1:A10;COINCIDIR(MIN(CONTAR.SI(A1:A10;A1:A10));CONTAR.SI(A1:A10;A1:A10);0))
}
teniendo en cuenta que si hubiese ms de un elemento con el menor nmero de repeticiones la
frmula devolvera el situado ms arriba.

Esta frmula sirve para cualquier tipo de datos.


Averiguar el 2, 3er., 4 etc. valor ms repetido en un rango [Ejemplo]
Sabemos que la funcin MODA devuelve el elemento ms repetido de un rango. Si se necesita
averiguar cul es el 2, 3, etc. valor ms repetido de un rango con nombre llamado Datos (que ha
de empezar en la fila 1 y estar constituido por valores), se puede usar la frmula:

{=INDICE(Datos;COINCIDIR(K.ESIMO.MAYOR(SI(COINCIDIR(Datos;Datos;0)=FILA(Datos);CONT
AR.SI(Datos;Datos)-FILA(Datos)/10^MAX(LARGO(Datos-
ENTERO(Datos))));FILA());SI(COINCIDIR(Datos;Datos;0)=FILA(Datos);CONTAR.SI(Datos;Datos)-
FILA(Datos)/10^MAX(LARGO(Datos-ENTERO(Datos))));0))}

Para que esta frmula tal como est aqu devolviese el 2 valor ms repetido, tendra que estar
situada en la fila 2. Situada en la fila 1, la frmula devolvera el elemento ms repetido, lo que
carece de sentido porque eso mismo se puede conseguir mucho ms fcilmente utilizando
=MODA(Datos), si bien hay que precisar que en las versiones de Excel que no disponen de la
funcin MODA.VARIOS, la frmula propuesta representa un modo de conseguir que vayan
aparecido todos los elementos "empatados" en la primera posicin de la clasificacion por su
cantidad de apariciones, si es que hay ms de uno.

La parte de la frmula que determina el elemento a devolver es la funcin FILA(), por lo que si se
sustituye esta funcin por un nmero entero especfico la frmula devolver el elemento que ocupe
esa posicin en la jerarqua de repeticiones.

Esta frmula necesita jerarquizar los elementos nicos del rango que procesa al objeto de
deshacer los posibles "empates" en su cantidad de apariciones, para lo que recurre a la tcnica de
restarle a cada uno de ellos el resultado de la divisin de su nmero de fila entre 10^nmero de
decimales del elemento qu ms decimales tenga+2. Esto podra tener como consecuencia que la
frmula no trabajase adecuadamente si uno o varios de los nmeros que debe procesar tuviesen
muchos decimales y/o si uno o varios de los nmeros fueran muy grandes.

Si los elementos en el rango Datos fuesen cadenas de texto, se podra usar la siguiente variante
de la frmula:
{=INDICE(Datos;COINCIDIR(K.ESIMO.MAYOR(SI(COINCIDIR(Datos;Datos;0)=FILA(Datos);CONT
AR.SI(Datos;Datos)-
FILA(Datos)/100);FILA());SI(COINCIDIR(Datos;Datos;0)=FILA(Datos);CONTAR.SI(Datos;Datos)-
FILA(Datos)/100);0))}

Esta frmula trabajar (en principio) tambin si los elementos son una mezcla de valores y texto o
incluso si tan slo hay nmeros, pero si los nmeros tuviesen decimales podran producirse
resultados incorrectos.

En caso de empate en el nmero de repeticiones, estas frmulas devolvern primero el situado
ms arriba en el rango, luego el siguiente hacia abajo, etc. Cuando no queden ms elementos
nicos en el rango Datos, comenzarn a devolver el error #NUM!


Averiguar el nmero de palabras de un texto y/o el promedio de sus longitudes
Suponiendo que la celda A1 tiene un texto cuyas palabras estn separadas por espacios, la
frmula para averiguar el nmero de palabras sera:
=LARGO(A1)-LARGO(SUSTITUIR(A1;" ";""))+1

Para saber el promedio de las longitudes de las palabras del texto situado en la celda A1 la frmula
sera:
=LARGO(SUSTITUIR(A1;" ";""))/(LARGO(A1)-LARGO(SUSTITUIR(A1;" ";""))+1)

Notas:
Hay que hacer notar que si hubiera signos de puntuacin seran tenidos en cuenta al
calcular el promedio de los largos de las palabras.
Si las palabras estuviesen separadas por, por ejemplo, guiones, lo nico que habra que
hacer es sustituir en las frmulas " " por "-".



Averiguar cual es el texto ms largo de un rango [Ejemplo]
Si se deseara saber la fila con el texto ms largo en el rango A1:A10, la frmula sera:
{=MAX(LARGO(A1:A10))}
Para obtener dicho texto ms largo:
{=INDICE(A1:A10;COINCIDIR(1;SIGNO(LARGO(A1:A10)=MAX(LARGO(A1:A10)));0))}

Si hubiera dos o ms celdas con el texto de la misma longitud, esta frmula devolver la primera de
ellas.

Sera posible usar un formato condicional para resaltar todas las celdas cuyos textos fueran los
ms largos del rango. La frmula para dicho formato condicional sera:
=LARGO(A1)=MAX(LARGO(A$1:A$10))
Esta frmula habra que aplicarla a todo el rango A1:A10


Averiguar el carcter o el dgito ms repetido en una celda y/o el nmero de veces que
aparece [Ejemplo]
Suponiendo que se quiera saber cual es el carcter o el nmero ms repetido en la celda A1, se
podra usar:
{=MED(A1;MODA(COINCIDIR(MED(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1);MED(A1;FILA(IND
IRECTO("1:"&LARGO(A1)));1);0));1)}

teniendo en cuenta que si dos o ms caracteres y/o dgitos se repiten el mismo nmero de veces,
la frmula devolver el situado ms a la izquierda. En Excel 2010 es posible utilizar la nueva
funcin MODA.VARIOS para devolver la lista de elementos "empatados" (si los hay) en el primer
puesto por el nmero de apariciones. La frmula sera:
{=INDICE(MODA.VARIOS(COINCIDIR(MED($A$1;FILA(INDIRECTO("1:"&LARGO($A$1)));1);MED
($A$1;FILA(INDIRECTO("1:"&LARGO($A$1)));1);0));FILA())}

que habra que colocar en la fila 1 de cualquier columna vaca y copiarla y pegarla hacia abajo.
Cuando no haya ms elementos "empatados" en el primer puesto por el nmero de apariciones,
comenzar a aparecer el error #REF!

Complicando un poco la primera frmula propuesta es posible, en caso de empate, devolver el
carcter ms a la derecha (til para las versiones anteriores a la 2010, que no disponen de la
funcin MODA.VARIOS):
{=MED(A1;LARGO(A1)-MODA(COINCIDIR(MED(A1;LARGO(A1)-
FILA(INDIRECTO("1:"&LARGO(A1)))+1;1);MED(A1;LARGO(A1)-
FILA(INDIRECTO("1:"&LARGO(A1)))+1;1);0))+1;1)}

Es posible tambin averiguar el nmero de veces que aparece el carcter o dgito que ms lo hace,
usando la frmula:
{=MAX(LARGO(A1)-LARGO(SUSTITUIR(A1;MED(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1);"")))}


Averiguar la posicin del primer carcter o nmero en una celda
Si se desea obtener la posicin del primer carcter no numrico en la celda A1, se puede usar:
{=COINCIDIR(VERDADERO;ESERROR(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1))
);1)));0)}
Y para obtener el carcter que es:
{=EXTRAE(A1;COINCIDIR(VERDADERO;ESERROR(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&
LARGO(A1)));1)));0);1)}

Para obtener la posicin del primer nmero o el nmero en s, bastara con sustituir VERDADERO
por FALSO.

Averiguar la posicin del ltimo carcter o nmero en una celda
Si se desea obtener la posicin del ltimo carcter no numrico en la celda A1, se puede usar:
{=MAX(ESERROR(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))*FILA(INDIRECT
O("1:"&LARGO(A1))))}
Y para obtener el carcter que es:
{=EXTRAE(A1;MAX(ESERROR(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))*FIL
A(INDIRECTO("1:"&LARGO(A1))));1)}

Si se desea el ltimo nmero, las frmulas seran:
{=MAX(ESNUMERO(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))*FILA(INDIRE
CTO("1:"&LARGO(A1))))}
y:
{=EXTRAE(A1;MAX(ESNUMERO(SIGNO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)))*F
ILA(INDIRECTO("1:"&LARGO(A1))));1)}


Saber si todos los caracteres del texto de una celda son letras [Ejemplo]
Excel dispone de la funcin ESTEXTO para saber si el contenido de una celda es un texto, pero
dicha funcin no evala cada carcter, por lo que, por ejemplo, AB1C lo considerara como texto a
pesar de tener un nmero.

Si, por ejemplo, se necesitara saber si todos y cada uno de los caracteres de una celda son letras
maysculas, excluyendo la , se podra usar:

=SUMAPRODUCTO((CODIGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))>64)*(CODIG
O(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))<91))=LARGO(A1)

e incluyendo la :

=SUMAPRODUCTO(((CODIGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))>64)*(CODI
GO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))<91))+(CODIGO(EXTRAE(A1;FILA(INDI
RECTO("1:"&LARGO(A1)));1))=209))=LARGO(A1)

Si, adems, se necesitara saber si el texto tiene una longitud determinada (por ejemplo, 6
caracteres), la frmula sera (sin la ):

=Y(SUMAPRODUCTO((CODIGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))>64)*(COD
IGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))<91))=6;LARGO(A1)=6)

y con la :

=Y((SUMAPRODUCTO((CODIGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))>64)*(CO
DIGO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1))<91)+(CODIGO(EXTRAE(A1;FILA(IND
IRECTO("1:"&LARGO(A1)));1))=209)))=6;LARGO(A1)=6)

Si se quisiera verificar que todas las letras fueran minsculas, habra que hacer las siguientes
sustituciones en las frmulas:

96 en vez de 64
123 en vez de 91
241 en vez de 209

Nota: todas estas frmulas pueden ser utilizadas como 'Frmula personalizada' en las validaciones.


Frmulas para averiguar los dgitos de control de un Cdigo de Cuenta de Cliente (CCC) del
sistema bancario espaol [Ejemplo]
Suponiendo que en A1 estuviera el cdigo de la entidad bancaria (4 dgitos), en B1 el cdigo de la
sucursal (4 dgitos) y en C1 el cdigo de la cuenta (10 dgitos), la frmula para averiguar el dgito
de control de la entidad + la sucursal (8 dgitos en total) sera:
{=EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE(37498625;FILA(INDIRE
CTO("1:8"));1)+1));11);1)}

La frmula para averiguar el dgito de control del nmero de cuenta sera:
{=EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE(0&137498625;FILA(INDIRE
CTO("1:10"));1)+1));11);1)}

Si se necesitara averiguar ambos dgitos de control en la misma celda, la frmula sera:
{=EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE(37498625;FILA(INDIRE
CTO("1:8"));1)+1));11);1)&EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE(0&137498625;FILA(INDIRE
CTO("1:10"));1)+1));11);1)}

Y para obtener el CCC completo (entidad + sucursal + dgitos de control + nmero de cuenta)
separados por un espacio, que es como se suele presentar el CCC en Espaa, la frmula sera:
{=A1&" "&B1&" "&EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(A1&B1;FILA(INDIRECTO("1:8"));1)*(EXTRAE(37498625;FILA(INDIRE
CTO("1:8"));1)+1));11);1)&EXTRAE(12345678910;11-
RESIDUO(SUMA(EXTRAE(C1;FILA(INDIRECTO("1:10"));1)*(EXTRAE(0&137498625;FILA(INDIRE
CTO("1:10"));1)+1));11);1)&" "&C1}

Notas:
Conviene que tanto las celdas con los cdigos bancarios como las que tengan las frmulas
para averiguar sus dgitos de control tengan formato de texto para evitar que se pierdan los
ceros que pueda haber a la izquierda. Otra posibilidad es anteponer un apstrofo ' a los
cdigos, por ejemplo '0123
Es posible sustituir SUMA por SUMAPRODUCTO, y de as hacerlo no sera necesario
introducir las frmulas de forma matricial.
En las versiones anteriores a la 2010 hay que sustituir RESTO por RESIDUO y MED por
EXTRAE.


Frmula para averiguar los dgitos de control IBAN (International Bank Account Number)
Suponiendo que en A1 est el CCC (Cdigo de Cuenta del Cliente del sistema bancario espaol)
completo (es decir, los cuatro dgitos del banco + los cuatro de la sucursal + los dos dgitos de
control + los diez dgitos de la cuenta), sin espacios ni otros signos (como p.ej. guiones), la frmula
para averiguar los dgitos de control IBAN sera:
=DERECHA(0&98-
RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(
A1&142800;17;8);97)&EXTRAE(A1&142800;25;2);97);2)

y la frmula para devolver el cdigo IBAN completo sera:
="ES"&DERECHA(0&98-
RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(
A1&142800;17;8);97)&EXTRAE(A1&142800;25;2);97);2)&A1

Si se deseara desglosar el IBAN en 6 grupos de 4 caracteres separados por un espacio (que es
como se suele presentar el IBAN en Espaa), la frmula sera:
="ES"&DERECHA(0&98-
RESIDUO(RESIDUO(RESIDUO(RESIDUO(EXTRAE(A1;1;8);97)&EXTRAE(A1;9;8);97)&EXTRAE(
A1&142800;17;8);97)&EXTRAE(A1&142800;25;2);97);2)&" "&IZQUIERDA(A1;4)&"
"&EXTRAE(A1;5;4)&" "&EXTRAE(A1;9;4)&" "&EXTRAE(A1;13;4)&" "&EXTRAE(A1;17;4)

Notas: en el libro de ejemplo para la frmula anterior (la que averiguaba los dgitos de control del
CCC) hay una hoja con ejemplos de estas frmulas que calculan los cdigos de control IBAN.


Averiguar la letra de control de un NIF (Nmero de Identificacin Fiscal en Espaa) o un NIE
(Nmero de Identificacin de Extranjeros) [Ejemplo]
Suponiendo que en A1 se encuentra el DNI cuya letra se quiera averiguar, la frmula sera:
=EXTRAE("TRWAGMYFPDXBNJZSQVHLCKE";RESIDUO(A1;23)+1;1)

Respecto a los NIE, hay que tener en cuenta que deben comenzar siempre por X Y (estando
previsto que en el futuro puedan empezar tambin por Z), y tener a continuacin siete dgitos. La
frmula para averiguar el dgito de control del NIE situado en A1 sera:

=EXTRAE("TRWAGMYFPDXBNJZSQVHLCKE";RESIDUO(ABS(CODIGO(IZQUIERDA(A1;1)))-
88&DERECHA(A1;7);23)+1;1)


Averiguar el dgito verificador de un RUT (Rol nico Tributario) chileno
Suponiendo que en A1 se encuentra el RUT, la frmula sera:
{=EXTRAE("123456789K0";11-
RESIDUO(SUMA(EXTRAE(DERECHA(REPETIR("0";12)&$A$1;12);13-
FILA(INDIRECTO("1:12"));1)*(FILA(INDIRECTO("1:12"))+1-
(FILA(INDIRECTO("1:12"))>6)*6));11);1)}

Usando como separador la coma, la frmula quedara as:
{=EXTRAE("123456789K0",11-
RESIDUO(SUMA(EXTRAE(DERECHA(REPETIR("0",12)&$A$1,12),13-
FILA(INDIRECTO("1:12")),1)*(FILA(INDIRECTO("1:12"))+1-
(FILA(INDIRECTO("1:12"))>6)*6)),11),1)}

Nota: vaya mi agradecimiento a quien sea que haya preparado el generador de RUTs vlidos
(http://joaquinnunez.cl/jQueryRutPlugin/generador-de-ruts-chilenos-validos.html), el cual me ha
servido para poder verificar que la frmula funciona correctamente.


Averiguar el dgito verificador de un DNIC (Direccin Nacional de Identificacin Civil)
uruguayo
Suponiendo que en A1 se encuentra el DNIC, la frmula sera:
=DERECHA(10-
RESIDUO(SUMAPRODUCTO(VALOR(DERECHA(EXTRAE(A1;FILA(INDIRECTO("1:7"));1)*EXTR
AE("2987634";FILA(INDIRECTO("1:7"));1);1)));10);1)

Usando como separador la coma, la frmula sera:
=DERECHA(10-
RESIDUO(SUMAPRODUCTO(VALOR(DERECHA(EXTRAE(A1,FILA(INDIRECTO("1:7")),1)*EXTR
AE("2987634",FILA(INDIRECTO("1:7")),1),1))),10),1)

Averiguar el dgito verificador de una CUIT (Clave nica de Identificacin Tributaria)
argentina
Suponiendo que en A1 se encuentra la CUIT (en el formato 99-99999999), la frmula para
averiguar su dgito verificador sera:
{=EXTRAE("12345678990";11-
RESIDUO(SUMA(EXTRAE(IZQUIERDA($A$1;2)&EXTRAE($A$1;4;8);10-
FILA(INDIRECTO("1:10"))+1;1)*(FILA(INDIRECTO("1:10"))+1-
(FILA(INDIRECTO("1:10"))>6)*6));11);1)}

Usando como separador la coma, la frmula sera:
{=EXTRAE("12345678990",11-
RESIDUO(SUMA(EXTRAE(IZQUIERDA($A$1,2)&EXTRAE($A$1,4,8),10-
FILA(INDIRECTO("1:10"))+1,1)*(FILA(INDIRECTO("1:10"))+1-
(FILA(INDIRECTO("1:10"))>6)*6)),11),1)}


Calcular el dgito verificador de un Nmero de Cdula ecuatoriano
Suponiendo que en A1 se encuentra el nmero de cdula cuyo dgito verificador se desea calcular,
la frmula sera:
{=10-
RESIDUO(SUMA(SI(EXTRAE(A1;FILA(INDIRECTO("1:9"));1)*RESIDUO(212121212;FILA(INDIRE
CTO("1:9"));1)>9;RESIDUO(A1;FILA(INDIRECTO("1:9"));1)*RESIDUO(212121212;FILA(INDIRECT
O("1:9"));1)-
9;RESIDUO(A1;FILA(INDIRECTO("1:9"));1)*RESIDUO(212121212;FILA(INDIRECTO("1:9"));1)));1
0)}

Usando como separador la coma, la frmula sera:
{=10-
RESIDUO(SUMA(SI(EXTRAE(A1,FILA(INDIRECTO("1:9")),1)*RESIDUO(212121212,FILA(INDIRE
CTO("1:9")),1)>9,RESIDUO(A1,FILA(INDIRECTO("1:9")),1)*RESIDUO(212121212,FILA(INDIRECT
O("1:9")),1)-
9,RESIDUO(A1,FILA(INDIRECTO("1:9")),1)*RESIDUO(212121212,FILA(INDIRECTO("1:9")),1))),1
0)}

Nota: no dispongo de ejemplos reales de Cdulas del Ecuador para comprobar el correcto
funcionamiento de la frmula, pero parece que s funciona puesto que calcula bien el ejemplo
planteado aqu.


Frmula para averiguar el dgito de control de un cdigo de barras EAN-13
Suponiendo que en A1 se encuentre el cdigo EAN-13 (12 dgitos) cuyo dgito de control se desee
averiguar, la frmula sera:

=10-
RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(INDIRECTO("1:12"));1)*(EXTRAE(131313131313
;FILA(INDIRECTO("1:12"));1)));10)

Una variante, un poco ms corta:

=10-RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(INDIRECTO("1:12"));1)
*(1+((RESIDUO(FILA(INDIRECTO("1:12"));2)=0)*2)));10)


Frmula para averiguar el dgito de control de un cdigo de barras EAN-8
Suponiendo que en A1 se encuentre el cdigo EAN-8 (7 dgitos) cuyo dgito de control se desee
averiguar, la frmula sera:
=10-
RESIDUO(SUMAPRODUCTO(EXTRAE(A1;FILA(INDIRECTO("1:7"));1)*(EXTRAE(3131313;FILA(I
NDIRECTO("1:7"));1)));10)

Nota: las frmulas que usan la funcin SUMAPRODUCTO se pueden hacer un poco ms cortas si
se convierten en matriciales, para lo cual lo nico que hay que hacer es sustituir
SUMAPRODUCTO por SUMA e introducirlas como frmulas matriciales.


Reitero la importancia de que la celdas que contienen los cdigos cuyos dgitos de control
se quieran averiguar estn formateadas como texto, para evitar que se puedan perder ceros
por la izquierda, si los hay.



Detectar si existe duplicidad de un conjunto de celdas
imagen (11 kb)
En este ejemplo se necesita averiguar qu filas estn duplicadas (es decir, tienen las tres celdas
iguales en el mismo orden).

Una posibilidad es poner la siguiente frmula en la fila 1 de una columna vaca

=SUMAPRODUCTO(($A$1:$A$6&$B$1:$B$6&$C$1:$C$6=$A1&$B1&$C1)*1)

y copiarla y pegarla hasta la ltima fila. La frmula devolver el nmero de veces en que se
produce la duplicidad.

Tambin sera posible usar la siguiente frmula, pero hay que tener en cuenta que hay que
introducirla como matricial habiendo seleccionado antes todo el rango donde debe ir.

{=COINCIDIR(A1:A6&B1:B6&C1:C6;A1:A6&B1:B6&C1:C6;0)}

Esta frmula asignar a cada grupo de celdas un nmero, y los grupos duplicados aparecern con
el mismo nmero. En esta imagen (37 kb) se puede ver la frmula, aplicada en el rango D1:D6


Fijar en una celda el lunes de la semana actual (o cualquier otro da de la semana)
Por ejemplo, para mostrar siempre en una celda el lunes de la semana actual, la frmula sera:

=SI(DIASEM(HOY())=2;HOY();HOY()-DIASEM(HOY()-2))

Para los dems das de la semana, habra que sustituir los doses por:
1 para el domingo
3 para el martes
4 para el mircoles
5 para el jueves
6 para el viernes
7 para el sbado


Frmula para averiguar el sbado, domingo, etc. anterior o posterior a una fecha
Si en A1 hay una fecha y se desea saber el sbado anterior a la misma se puede usar:
=A1-DIASEM(A1)
Para el sbado posterior la frmula sera:
=A1-DIASEM(A1)+7

Para el domingo anterior o siguiente, las frmulas seran:
=A1-DIASEM(A1-1)
=A1-DIASEM(A1-1)+7

Para el lunes, martes...viernes, habra que sustituir -1 por -2,-3... -6

Lgicamente, se puede trabajar con HOY() o AHORA() en vez de la referencia a A1, en cuyo caso
los resultados seran voltiles.



Fijar en una celda el primer o ltimo da del mes actual, anterior o siguiente
Primer da del mes actual: =FECHA(AO(HOY());MES(HOY());1)
ltimo da del mes actual: =FECHA(AO(HOY());MES(HOY())+1;1)-1
Primer da del mes anterior: =FECHA(AO(HOY());MES(HOY())-1;1)
ltimo da del mes anterior: =FECHA(AO(HOY());MES(HOY());1)-1
Primer da del mes siguiente: =FECHA(AO(HOY());MES(HOY())+1;1)
ltimo da del mes siguiente: =FECHA(AO(HOY());MES(HOY())+2;1)-1


Subtotalizar datos por tramos de edad
Suponiendo que en rango A1:A50 hay una serie de fechas de nacimiento, y que se necesita
subtotalizar por tramos de edad de 10 aos desde dichas fechas de nacimiento hasta la fecha
actual, la frmula sera:

=SUMAPRODUCTO((ENTERO(SIFECHA($A$1:$A$50;HOY();"y")/10)=0)*1)

para las fechas de nacimiento de los 10 aos anteriores. Para los 10, 20, ... XX aos, habra que
sustituir =0 por =1, =2 ... =XX/10

Si se necesitara tomar como referencia una fecha en concreto en lugar de la actual, habra que
sustituir HOY() por alguna de las funciones de conversin a fechas de Excel. Por ejemplo, usando
la funcin FECHA para el 31/12/2007, la frmula anterior quedara:

=SUMAPRODUCTO((ENTERO(SIFECHA($A$1:$A$50;FECHA(2007;12;31);"y")/10)=0)*1)

Si se modifica un poco la frmula es posible subtotalizar por otros perodos distintos al decenio,
como por ejemplo quinquenios:

=SUMAPRODUCTO((ENTERO(SIFECHA($A$1:$A$50;HOY();"y")/5)=0)*1)

o bienios:

=SUMAPRODUCTO((ENTERO(SIFECHA($A$1:$A$50;HOY();"y")/2)=0)*1)

Lgicamente, tambin es posible obtener sumas de cantidades que estn relacionadas con esas
fechas. Por ejemplo, suponiendo que en el rango B1:B50 de la misma hoja hubiera una serie de
cantidades y se deseara obtener la suma que corresponde a quienes han nacido en los 10 aos
anteriores a la fecha actual, la frmula sera:

=SUMAPRODUCTO((ENTERO(SIFECHA($A$1:$A$50;HOY();"y")/10)=0)*$B1:$B$50)


Obtener un promedio despreciando el/los valor/es mayor/es o menor/es [Ejemplo]
Suponiendo que se tiene un rango con nombre (de una sola columna de ancho) llamado Notas, y
se desea obtener su promedio despreciando su valor ms alto, la frmula sera:
{=PROMEDIO(K.ESIMO.MENOR(Notas;FILA(INDIRECTO("1:"&FILAS(Notas)-1))))}

Para despreciar los dos valores ms altos tan slo habra que sustituir el -1 por -2, etc.

Para obtener el promedio despreciando la nota ms baja, habra que usar la funcin
K.ESIMO.MAYOR, o sea:
{=PROMEDIO(K.ESIMO.MAYOR(Notas;FILA(INDIRECTO("1:"&FILAS(Notas)-1))))}

Si se deseara el promedio sin tener en cuenta TODAS las apariciones de la nota ms baja, la
frmula sera:
{=PROMEDIO(K.ESIMO.MAYOR(Notas;FILA(INDIRECTO("1:"&FILAS(Notas)-
CONTAR.SI(Notas;MIN(Notas))))))}

Para obtener el promedio sin tener en cuentas TODAS las apariciones de la nota ms alta:
{=PROMEDIO(K.ESIMO.MENOR(Notas;FILA(INDIRECTO("1:"&FILAS(Notas)-
CONTAR.SI(Notas;MAX(Notas))))))}


Si el rango con nombre fuera una fila en lugar de una columna, habra que sustituir en la frmula
FILAS por COLUMNAS.

Para averiguar el promedio del rango con nombre Notas despreciando tanto todos los valores
menores como todos los mayores, la frmula sera:

{=PROMEDIO(SI(NO((Notas=MIN(Notas))+(Notas=MAX(Notas)));Notas;""))}


Promediar cada n filas o columnas [Ejemplo]
A partir de la fila 1 de una columna se tiene un rango con nombre llamado Datos y se desea
calcular el promedio cada, por ejemplo, 10 filas. La frmula sera:

{=PROMEDIO(SI(RESIDUO(Datos;10)=0;Datos))}

Lgicamente, para calcular el promedio cada, por ejemplo, 5 filas, lo nico que habra que hacer es
sustituir el 10 por un 5.

Esta frmula funcionara exactamente igual si el rango con nombre Datos estuviese dispuesto en
una fila a partir de su columna A.


Averiguar la/s letra/s de una columna [Ejemplo]
Esta frmula devuelve la letra de la columna de la celda A1:
=SUSTITUIR(IZQUIERDA(CELDA("direccion";A1);ENCONTRAR("$";CELDA("direccion";A1);2)-
1);"$";"")
Lgicamente, para devolver la letra (o letras) correspondiente/s a otra columna lo nico que hay
que hacer es sustituir los dos A1 por la direccin de cualquier celda de la columna deseada.

Averiguar a qu bimestre, trimestre, cuatrimestre o semestre pertenece una
fecha [Ejemplo]
Suponiendo que la fecha estuviera en A1, la frmula para el bimestre sera:
=REDONDEAR.MAS(MES(A1)/2;0)
- para el trimestre, habra que sustituir /2 por /3
- para el cuatrimestre, /2 por /4
- y para el semestre, /2 por /6.


Obtener la cantidad de domingos (o cualquier otro da de la semana) que hay entre dos
fechas [Ejemplo]
Suponiendo que en A1 hay una fecha y en A2 otra fecha, mayor que la de A1, la siguiente frmula
devolver el nmero de domingos que hay entre ambas:
=ENTERO((B1-DIASEM(B1)-A1+8)/7)
para saber la cantidad de lunes, la frmula sera:
=ENTERO((B1-DIASEM(B1-1)-A1+8)/7)

Sustituyendo -1 por -2, -3... -6 se obtendra el nmero de martes, mircoles... sbados.


Frmulas para saber si un nmero es o no primo [Ejemplo]

NOTA: En este enlace hay una pequea monografa sobre frmulas capaces de procesar nmeros
ms grandes que la expuesta aqu.

Suponiendo que el nmero estuviera en A1:
{=A1&ELEGIR(N((SUMA(--
(MULTIPLO.INFERIOR(A1;FILA(INDIRECTO("1:"&ENTERO(RAIZ(A1+1)))))=A1))>1))+1;" s";" no")
& " es un nmero primo."}

Se podra usar la siguiente frmula en un Formato Concidional para que las celdas que contengan
un nmero primo se destaquen como se haya establecido en el propio Formato Condicional:
=SUMA(--(MULTIPLO.INFERIOR(A1;FILA(INDIRECTO("$1:"&ENTERO(RAIZ(A1)))))=A1))=1


Notas:
el nmero ms alto que puede procesar esta frmula (en Excel 2003) es el 4.295.098.368.
En las versiones posteriores es el 1.099.513.724.928, pero el procesamiento de un nmero
tan grande podra llevar bastante tiempo
aplicada al nmero 1, la frmula dir que es primo, pero no lo es
conviene no usar muchas veces esta frmula en el mismo libro, dado que si los nmeros a
procesar son muy grandes tendr que hacer muchos clculos
usando esta funcin VBA es posible averiguar si un nmero es primo hasta el
922.337.203.685.477



Frmula para obtener el reverso de un nmero entero [Ejemplo]
Si, por ejemplo, en la celda A1 est el nmero 12345, la siguiente frmula devolver su reverso
(54321):
{=SUMA(EXTRAE(ABS(A1);FILA(INDIRECTO("1:"&LARGO(ABS(A1))));1)*10^(FILA(INDIRECTO("
1:"&LARGO(ABS(A1))))-1))*SIGNO(A1)}
Lo mismo hace:
=SUMAPRODUCTO(EXTRAE(ABS(A1);FILA(INDIRECTO("1:"&LARGO(ABS(A1))));1)*10^(FILA(IN
DIRECTO("1:"&LARGO(ABS(A1))))-1))*SIGNO(A1)

Usando esta frmula tambin es posible saber si el nmero situado en A1 es o no capica:
{=A1&ELEGIR(--
(SUMA(EXTRAE(ABS(A1);FILA(INDIRECTO("1:"&LARGO(ABS(A1))));1)*10^(FILA(INDIRECTO("1
:"&LARGO(ABS(A1))))-1))*SIGNO(A1)=A1)+1;" no";" s")&" es capica."}

Nota: El mximo de dgitos que puede tener el nmero es 15, es decir los mismos que la precisin
numrica de Excel.


Averiguar si una palabra o frase es un palndromo [Ejemplo]
La siguiente frmula devuelve VERDADERO si la palabra en A2 es un palndromo (se lee igual en
ambos sentidos) y FALSO si no lo es:
{=Y(EXTRAE(A2;FILA(INDIRECTO("1:"&ENTERO(LARGO(A2)/2)));1)=EXTRAE(A2;LARGO(A2)-
FILA(INDIRECTO("1:"&ENTERO(LARGO(A2)/2)))+1;1))}

Esta otra sirve para procesar una frase en lugar de una palabra:
{=Y(EXTRAE(SUSTITUIR(A2;" ";"");FILA(INDIRECTO("1:"&ENTERO(LARGO(SUSTITUIR(A2;"
";""))/2)));1)=EXTRAE(SUSTITUIR(A2;" ";"");LARGO(SUSTITUIR(A2;" ";""))-
FILA(INDIRECTO("1:"&ENTERO(LARGO(SUSTITUIR(A2;" ";""))/2)))+1;1))}

Se podran acortar un poco las frmulas, pero en este caso tendran que evaluar todas las letras de
la palabra o de la frase, mientras que las dos frmulas anteriores necesitan evaluar tan slo la
mitad:

{=Y(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)=EXTRAE(A1;LARGO(A1)+1-
FILA(INDIRECTO("1:"&LARGO(A1)));1))}

{=Y(EXTRAE(SUSTITUIR(A1;" ";"");FILA(INDIRECTO("1:"&LARGO(SUSTITUIR(A1;"
";""))));1)=EXTRAE(SUSTITUIR(A1;" ";"");LARGO(SUSTITUIR(A1;" ";""))+1-
FILA(INDIRECTO("1:"&LARGO(SUSTITUIR(A1;" ";""))));1)))

Nota: en principio da igual si las letras estn en maysculas o minsculas, pero lo que no puede
haber son signos de puntuacin ni acentos.


Averiguar el valor decimal de un nmero binario [Ejemplo]
Excel dispone del complemento Herramientas para Anlisis, que incluye una funcin para realizar
este clculo, pero en cualquier caso se puede usar la siguiente frmula para hallar el valor decimal
del nmero binario situado en A1:

{=SUMA(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)*2^(LARGO(A1)-
FILA(INDIRECTO("1:"&LARGO(A1)))))}
Lo mismo hace:
=SUMAPRODUCTO(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1)*2^(LARGO(A1)-
FILA(INDIRECTO("1:"&LARGO(A1)))))

Debido a la precisin numrica de Excel (15 dgitos), si la celda donde est el nmero binario tiene
formato numrico, ste no podr ser mayor de 15 unos (32.767 en decimal), mientras que si la
celda est formateada como texto el nmero binario no podr ser mayor de 49 unos
(562.949.953.421.311 en decimal)

Nota: esta misma frmula sirve para averiguar el valor decimal de un numero en las bases 3 a 9.
Lo nico que hay que hacer es sustituir el 2 de la frmula (en la expresin *2^) por la base en la
que se encuentre el nmero a convertir.


Averiguar el valor binario de un nmero decimal [Ejemplo]

NOTA: aconsejo la consulta de ste artculo sobre la conversin desde base 10 (decimal) a
cualquiera de las bases 2 a 9.

Excel dispone del complemento Herramientas para Anlisis, que incluye una funcin para realizar
este clculo, pero en cualquier caso se puede usar la siguiente frmula para hallar el valor binario
de un nmero decimal situado en A1:
{=SUMA(RESIDUO(ENTERO(A1/2^((FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1)))-
1));2)*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1))-1))}
Lo mismo hace:
=SUMAPRODUCTO(RESIDUO(ENTERO(A1/2^((FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1))
)-1));2)*10^(FILA(INDIRECTO("1:"&ENTERO(LOG(A1;2))+1))-1))

Notas:
La celda donde est la frmula tiene que tener formato numrico, preferentemente con
cero posiciones decimales y sin separador de miles.
Debido a la precisin numrica de Excel (15 dgitos), el nmero decimal ms alto que
puede devolver esta frmula es el 32.768, que en binario es 1000000000000000 (un uno
seguido de 15 ceros).
Hay que tener en cuenta que aunque el nmero devuelto por la frmula "pueda parecer"
binario, en realidad Excel lo tratar como decimal si se intenta hacer cualquier clculo con
l.
La frmula no generar un error si ha de procesar nmeros negativos o mayores de
32.768, pero los resultados podrn no ser correctos.
Esta misma frmula (con las modificaciones necesarias) puede devolver nmeros en las
bases 3 a 9. En el libro de ejemplo de esta funcin se pueden ver dichas frmulas, as
como sus limitaciones.


Averiguar el valor decimal de un nmero hexadecimal [Ejemplo]
Excel dispone del complemento Herramientas para Anlisis, que incluye una funcin para realizar
este clculo, pero en cualquier caso se puede usar la siguiente frmula para hallar el valor decimal
de un nmero hexadecimal situado en A1:
{=SUMA((HALLAR(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1);"0123456789abcdef")-
1)*16^(LARGO(A1)-FILA(INDIRECTO("1:"&LARGO(A1)))))}
Lo mismo hace:
=SUMAPRODUCTO((HALLAR(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1);"0123456789
abcdef")-1)*16^(LARGO(A1)-FILA(INDIRECTO("1:"&LARGO(A1)))))

Debido a la precisin numrica de Excel (15 dgitos), el hexadecimal ms alto que puede devolver
esta frmula con garantas es 38D7EA4C68000 (un uno seguido de 15 ceros en decimal).

Nota: esta misma frmula se puede usar (con las necesarias modificaciones) para averiguar el
valor decimal de un nmero en otras bases que requieran ms de los 10 smbolos numricos del
sistema decimal. Por ejemplo, para hallar el valor decimal de un nmero en base 15, la frmula
sera:
{=SUMA((HALLAR(EXTRAE(A1;FILA(INDIRECTO("1:"&LARGO(A1)));1);"0123456789abcde")-
1)*15^(LARGO(A1)-FILA(INDIRECTO("1:"&LARGO(A1)))))}

Las modificaciones con respecto a la frmula hexadecimal -> decimal han sido tan slo dos:
1) Se ha eliminado la f (en "0123456789abcdef")
2) Se ha sustituido el 16 (en *16^) por 15


Ley de Benford
Si se desea conocer el grado de cumplimiento (o incumplimiento) de una serie de datos llamada
Datos de la Ley de Benford, la frmula para el 1 sera:
{=(SUMA(--(IZQUIERDA(ABS(Datos);1)="1"))/FILAS(Datos))-LOG(1+1/1)}

para el 2:
{=(SUMA(--(IZQUIERDA(ABS(Datos);1)="2"))/FILAS(Datos))-LOG(1+1/2)}

Para el resto de nmeros, tan slo habra que sustituir los dos doses de esta ultima frmula por el
nmero que se deseara.

Con unas pequeas modificaciones es posible conseguir que la frmula funcione para los n
primeros dgitos, donde n lo determinar el nmero de fila de la celda en la que se encuentre la
frmula:
{=(SUMA(--(IZQUIERDA(ABS(Datos);LARGO(FILA()))*1=FILA()))/FILAS(Datos))-LOG(1+1/FILA())}

Notas:
Si se sabe con toda seguridad que no hay valores negativos en el rango Datos, es posible
sustituir ABS(Datos) por Datos, con lo que se ganar algo de rendimiento.
Dado que la ley de Benford slo se aplica a series de datos grandes (normalmente, miles),
me permito recomendar prudencia en cuanto al nmero de veces que se usen estas
frmulas en un mismo libro de Excel, puesto que en situaciones reales lo normal ser que
tengan que hacer muchsimos clculos.


Saber la cantidad de nmeros pares y/o impares que hay en un rango
Suponiendo que en el rango A1:A10 hay una serie de nmeros enteros y que se desea averiguar
cuantos de ellos son pares y cuantos impares, las frmulas seran:
=SUMAPRODUCTO(--NO(RESIDUO(A1:A10;2))) para los pares
y:
=SUMAPRODUCTO(RESIDUO(A1:A10;2)) para los impares

Nota: se entiende que en el rango A1:A10 hay slo nmeros enteros. Si hubiera celdas vacas,
fechas, nmeros con decimales, cadenas de texto, etc., las frmulas podran dar como resultado
un error o no devolver el resultado correcto.


Sumar los nmeros pares o impares de un rango
Suponiendo que en el rango A1:A10 hay una serie de nmeros enteros y que se desa averiguar la
suma de los pares y/o la suma de los impares, las frmulas seran:
=SUMAPRODUCTO(NO(RESIDUO(A1:A10;2))*A1:A10) para los pares
y:
=SUMAPRODUCTO(RESIDUO(A1:A10;2)*A1:A10) para los impares

Nota: se entiende que en el rango A1:A10 hay slo nmeros enteros. Si hubiera celdas vacas,
fechas, nmeros con decimales, cadenas de texto, etc., las frmulas podran dar como resultado
un error o no devolver el resultado correcto.


Averiguar un nmero de la serie Fibonacci
La siguiente frmula devuelve el nmero 50 de la serie Fibonacci:
=((((1+RAIZ(5))/2)^50)-(-((1+RAIZ(5))/2)^-50))/RAIZ(5)

Lgicamente, es posible averiguar cualquier otro sustituyendo los dos 50 de la frmula por el
nmero que se desee; pero hay que tener en cuenta que, debido a la precisin numrica de Excel
(15 dgitos), el mximo nmero que la frmula devolver correctamente es el 73 de la serie.

Usando una UDF que utilice el tipo de datos Decimal para hacer los clculos es posible averiguar
hasta el Fibonacci 139 (29 dgitos). En este libro de ejemplo hay un ejemplo de la funcin, junto
con algunas otras que hacen uso de este tipo de datos (artculo sobre el tema).

En esta pgina hay varias funciones para trabajar en Excel con enteros grandes, sirviendo una de
ellas para hallar nmeros de la serie Fibonacci ms all del 139 (en las pruebas he llegado hasta el
9999 de la serie).

La siguiente frmula devuelve VERDADERO si el nmero situado en A1 pertenece a la serie
Fibonacci y FALSO en caso contrario. Hay que tener en cuenta que, debido a la precisin numrica
de Excel, slo funciona hasta el nmero 73 de la serie (el 806.515.533.049.393):
{=NO(ESERROR(COINCIDIR(TEXTO($A$1;"0");TEXTO(((((1+RAIZ(5))/2)^FILA(INDIRECTO("2:73
")))-(-((1+RAIZ(5))/2)^-FILA(INDIRECTO("2:73"))))/RAIZ(5);0);"0")))}


"Rachas" [Ejemplo] <--Este ejemplo slo funciona en Excel 2007 y 2010
Por ejemplo, si en el rango A1:A30 hay un rango con nombre llamado Serie, con las letras
ABAACABBBAAACCAAAABCBBAAAAAACA (una letra en cada celda), y se necesita contar la
cantidad de "rachas" de A que tengan al menos dos aes, la frmula sera:

{=SUMA(SIGNO(SI(FRECUENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A")))>=2;FRECU
ENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"))))))}

Para averiguar el promedio de elementos que tienen esas "rachas", la frmula sera:

{=PROMEDIO(SI(FRECUENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A")))>=2;FRECU
ENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A")))))}

En esta ltima frmula sera posible sustituir PROMEDIO por otra funcin estadstica, como por
ejemplo MAX MIN.

Sera posible obtener un listado con el nmero de repeticiones que tiene cada una de las rachas.
La frmula es:

{=INDICE(SI(FRECUENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A")))>=2;FRECU
ENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"))));K.ESIMO.M
ENOR(SI(SI(FRECUENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A")))>=2;FRECU
ENCIA(SI(Serie="A";FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"));SI(Serie="A";
FILA(Serie)-
CONTAR.SI(DESREF(INDICE(Serie;1);;;FILA(INDIRECTO("1:"&FILAS(Serie))));"A"))));FILA(INDIR
ECTO("1:"&SUMA(SIGNO(SI(Serie="A";FILA(Serie)))))));FILA()))}

Esta frmula habra que situarla en la fila 1 de cualquier columna vaca, y luego copiarla y pegarla
hacia abajo. Cuando no queden "rachas" por mostrar comenzar a aparecer el error #NUM!

Como curiosidad, esta ltima frmula, con sus 973 caracteres, es la ms larga de las que aparecen
en esta pgina, y a mi juicio es tambin la ms complicada.

Ninguna de estas frmulas funciona con versiones de Excel anteriores a la 2007 puesto que
superan el lmite de siete niveles de anidamiento que admiten dichas versiones.


[Ejemplo para las tres frmulas que vienen a continuacin]
Averiguar la cantidad de divisores de un nmero entero positivo y obtener una lista de los
mismos
La siguiente frmula devuelve la cantidad de divisores del nmero entero positivo situado en A1:
{=SUMA(--((MULTIPLO.INFERIOR(A1;FILA(INDIRECTO("1:"&ENTERO(A1/2))))=A1)))}

Es posible obtener un listado de dichos divisores poniendo la siguiente frmula en la fila 1 de
cualquier columna:
{=K.ESIMO.MAYOR(((MULTIPLO.INFERIOR($A$1;FILA(INDIRECTO("1:"&ENTERO($A$1/2))))=$
A$1)*FILA(INDIRECTO("1:"&ENTERO($A$1/2))));FILA())}
y copindola hacia abajo hasta igualar el nmero de divisores del nmero (el resultado de la
primera frmula). Si se sustituye FILA() por un nmero entero, la frmula devolver el divisor que
ocupe ese nmero en la lista de divisores. Si el nmero excediese la cantidad de divisores, la
frmula devolver 0.

La frmula no considera el nmero que procesa como divisor de s mismo, aunque lgicamente lo
es.


Averiguar la suma de los divisores de un nmero entero positivo
La siguiente frmula devuelve la suma de los divisores del nmero entero positivo situado en A1:
{=SUMA((MULTIPLO.INFERIOR(A1;FILA(INDIRECTO("1:"&ENTERO(A1/2))))=A1)*FILA(INDIREC
TO("1:"&ENTERO(A1/2))))}

La frmula no considera el nmero que procesa como divisor de s mismo, aunque lgicamente lo
es.

Averiguar si un nmero entero positivo es Defectivo, Perfecto o Abundante
La siguiente frmula dir qu tipo de nmero es el situado en A1:
{=ELEGIR(SIGNO(SUMA((MULTIPLO.INFERIOR(A1;FILA(INDIRECTO("1:"&ENTERO(A1/2))))=A1
)*FILA(INDIRECTO("1:"&ENTERO(A1/2))))-A1)+2;"Defectivo";"Perfecto";"Abundante")}

El nmero ms alto que pueden procesar estas frmulas en Excel 2003 es el 131.073. En Excel
2007 y 2010 es el 2.097.153, pero los clculos necesarios para nmeros tan grandes pueden llevar
bastante tiempo.

Nota: en esta pgina hay funciones VBA que pueden hacer los tres clculos anteriores hasta el
mximo del tipo de datos Currency de VBA (922.337.203.685.477)


Complicando estas frmulas es posible llegar a procesar hasta el 13.107.200 en Excel 2003 y
hasta el 209.715.200 a partir de Excel 2007, pero hay que tener en cuenta que los clculos para
nmeros tan grandes pueden requerir muchsimo tiempo y, adems, que es posible que aparezca
el error "Excel se ha quedado sin recursos" dependiendo del nmero que se est intentando
procesar y de la memoria de que disponga la computadora.

La frmula para calcular la suma de los divisores del nmero entero positivo situado en A1 es:

{=SUMA((MULTIPLO.INFERIOR(A1;COLUMNA(INDIRECTO("a:cv"))+(FILA(INDIRECTO("1:"&RE
DONDEAR.MAS((A1/100)/2;0)))-
1)*100)=A1)*(COLUMNA(INDIRECTO("a:cv"))+(FILA(INDIRECTO("1:"&REDONDEAR.MAS((A1/10
0)/2;0)))-1)*100))}

La frmula para obtener el listado de los divisores es:
{=K.ESIMO.MAYOR((MULTIPLO.INFERIOR($A$1;COLUMNA(INDIRECTO("a:cv"))+(FILA(INDIRE
CTO("1:"&REDONDEAR.MAS(($A$1/100)/2;0)))-
1)*100)=$A$1)*(COLUMNA(INDIRECTO("a:cv"))+(FILA(INDIRECTO("1:"&REDONDEAR.MAS(($A
$1/100)/2;0)))-1)*100);FILA())}
Si se sustituye FILA() por un nmero entero, la frmula devolver el divisor que ocupe ese nmero
en la lista de divisores. Si el nmero excediese la cantidad de divisores, la frmula devolver 0.

Y la frmula para averiguar si el nmero es Defectivo, Perfecto o Abundante:

{=ELEGIR(SIGNO(SUMA((MULTIPLO.INFERIOR(A1;COLUMNA(INDIRECTO("a:cv"))+(FILA(INDI
RECTO("1:"&REDONDEAR.MAS((A1/100)/2;0)))-
1)*100)=A1)*(COLUMNA(INDIRECTO("a:cv"))+(FILA(INDIRECTO("1:"&REDONDEAR.MAS((A1/10
0)/2;0)))-1)*100))-A1)+2;"Defectivo";"Perfecto";"Abundante")}

Hay que tener en cuenta que las dos ltimas frmulas podran no devolver el resultado correcto si
el nmero a procesar fuese inferior al 101.

You might also like