En esa nota vimos una técnica para lograr que cada valor en la lista tenga un número de jerarquía único.
Uno de mis lectores me hace la siguiente pregunta:
Tenemos valores con sus jerarquías así:
valor | jerarquía |
5 | 5 |
7 | 4 |
10 | 1 |
10 | 1 |
8 | 3 |
¿No hay manera de que en efecto, los dos valores de 10 tengan la jerarquía de 1 pero el 8 tenga jerarquía de 2, el 7 tenga jerarquía de 3 y el 5 tenga jerarquía de 4?
En otras palabras, lograr un rango continuo de orden de jerarquía.
En esta nota veremos como hacerlo, pero primero daremos un repaso al tema de la función JERARQUIA.
Supongamos esta lista de valores
A los valores duplicados les hemos puesto un fondo de color de acuerdo al orden de aparición, para poder distinguirlos cuando ordenemos la lista de acuerdo al orden de jerarquía.
Aplicamos la fórmula =JERARQUIA(A2, $A$2:$A$11) a la celda B2 y la copiamos al resto del rango (hasta la celda B11)
En el rango E1:F11 mostramos la misma lista ordenada de acuerdo al resultado de JERARQUIA.
Podemos ver que los dos valores 7 reciben el mismo número de posición (2) y que no existe el número de posición 3. Lo mismo sucede con el valor 2 de la lista que también aparece dos veces.
Si queremos que cada valor en la lista reciba un orden de jerarquía único, aplicamos la fórmula
=JERARQUIA(A2, $A$2:$A$11)+CONTAR.SI($A2:A$11,A2)-1
Si queremos revertir el orden de aparición de los duplicados (los de fondo morado aparecerán antes de los de fondo turquesa), usamos la fórmula
=JERARQUIA(A2, $A$2:$A$11)+CONTAR.SI($A$2:$A$11,A2)-CONTAR.SI($A$2:A2,A2)
Si queremos que cada valor muestre su verdadero orden de jerarquía, pero que el rango de jerarquías sea continuo (sin "saltos") creamos primero una tabla corriente con la función JERARQUIA
Luego escribimos esta fórmula matricial en la celda C2
={SUMA((SI($B$2:$B$11<B2,1/CONTAR.SI($B$2:$B$11,$B$2:$B$11),0)))+1}
y la copiamos a lo largo del rango C2:C11
En la tabla E1:G11 podemos comparar los resultados de usar la función JERARQUIA y la fórmula matricial.
Una explicación sobre la fórmula, analizando el resultado de C2:
1 – La expresión $B$2:$B$11<B2 genera esta matriz
$B$2:$B$11<B2 | Resultado |
9<9 | FALSO |
7<9 | VERDADERO |
1<9 | VERDADERO |
5<9 | VERDADERO |
9<9 | FALSO |
2<9 | VERDADERO |
6<9 | VERDADERO |
7<9 | VERDADERO |
2<9 | VERDADERO |
4<9 | VERDADERO |
2 – La expresión 1/CONTAR.SI($B$2:$B$11,$B$2:$B$11) genera la siguiente matriz
0.5
0.5
1
1
0.5
0.5
1
0.5
0.5
1
El argumento si_es_falso genera una matriz de 0 (cero)
Finalmente sumamos el resultado de la función SI y le agregamos 1. Para la celda C2 el esquema de cálculo es el siguiente:
Referencias a esta nota: Tushar Metha – Excel
Categorías: Funciones&Formulas_, Manejo de Datos_, Formulas Matriciales_
Technorati Tags: Excel
Recien he comenzado a visitar tu blog y la verdad es que hay temas interesantes de los cuales yo y seguramente mucha gente tambien desconocia, pero por ejemplo tengo un caso particular es que tengo que elegir al mejor arquero de un campeonato (10 equipos 20 arqueros en total,2 x equipo-titular y suplente)pero de los veinte que es la base de datos no todos juegan debido a que los suplentes esperan su oportunidad, entonces el problema radica en que tengo que seleccionar solo a los que estan jugando y dejar al final a los que todavia no han tenido su oportunidad de jugar, la calificacion que se les da a ellos es 1º numeros de goles recibidos, 2º partidos jugados y 3º promedio de goles recibidos(1º/2º), entonces ordenarlos con estos criterios, lo he intentado hacer con la función jerarquia pero considera todos los jugadores y los ordena en orden descendente es decir 20,19,18, etc (si considero como criterio la cantidad de goles recibidos) y quisiera que el que tiene menos sea el numero 1,luego el 2 y asi sucesivamente, espero me puedas ayudar, gracias por tu ayuda .
ResponderBorrarHola, gracias por leer el blog.
ResponderBorrarMe parece que no desconces que JERARQUIA tiene tres argumentos, el número evaluado, el rango de los números y el orden de jerarquía.
Este último argumento es opcional, y si no lo pones, Excel ordena la jerarquía de mayor a menor. Para obtener un orden de menor a mayor debes incluir un valor distinto de 0 para el tercer argumento.
Tu función debe verse así:
=JERARQUIA(arquero, lista de arqueros,2)
ok, lo voy a intentar pero como hacer para no considerar a los arqueros que todavia no han jugado.
ResponderBorrarHola, la solución es un tanto compleja, así que en breve estaré publicando la solución a tu pregunta en el blog.
ResponderBorrarTe pasaste, muchas gracias por tu ayuda, sabia que me podias ayudar.
ResponderBorrarQuiero aplicar la funcion jerarquia a celdas separasdas (no contiguas) me podrian dar alguna opcion???
ResponderBorrarLa función JERARQUIA funciona también con celdas no contiguas. El único detalle a tener en cuenta es usar un nombre que se refiera al rango de referencia.
ResponderBorrarPara crear el nombre puedes seleccionar las celdas, apretando la tecla Ctrl para hacer la selcción múltiple, y luego poner el nombre en el cuadro de nombres.
Digamos que creamos el nombre "rngNoContinuo" que se refiere a las celdas A1,A5,A8,A14.
La fórmula sería
=JERARQUIA(A1,rngNoContinuo)
La función JERARQUIA también funciona en celdas discontinuas de una manera sencilla. (si queremos poner la jerarquia de A1 hasta A9 y añadir la jerarquia de la celda A29 pondremos el parámetro del rango entre paréntesis.
ResponderBorrarLa jerarquia de la celda A3 en el rango de estudio sería
=JERARQUIA(A3;(A1:A9;A29))
Como saben el rango continuo se establece con los dos puntos y añadir una celda se establece con el punto y coma.
hola, gracias por tú blog, es muy bueno, sin embargo quisiera aplicar el comando de JERARQUIA para ordenar datos de panel, ¿es esto posible?
ResponderBorrarDiana, ¿podrías ser un poco más explícita? ¿Que es "datos de panel"?
ResponderBorrarHola Jorge, estoy estudiando todo lo que puedo sobre ordenar listas pero no acabo de entender la explicación de la fórmula matricial de este post, en concreto el punto 1: $b$2:$b$11<B2. ¿De dónde sale los valores de la matriz 9,7,1,5... y que la segunda parte sea siempre constante el 9?. Gracias anticipadas
ResponderBorrarHola, este post tiene más de aiete años y para serte sincero, no recuerdo por qué puse en la explicación la serie 9,7,1,5.. cuando en el rango B2:B11 están los valores 10,8,1,6..Pero esto no altera la explicación tal como está en la nota. Hay que prestar atención que la fórmula es matricial (se introduce apretando simultáneamente Ctrl-Mayúscula-Enter).
ResponderBorrarporque para evitar el error de jerarquía vuelves a considerar la primera celta restando CONTAR.SI????
ResponderBorrarCristian, no es un error sino una adaptación para que la función funcione distinto. COmo pongo en la nota, si un valor aparece dos veces en la lista ambos reciben la misma jerarquía. AL usar esta fórmula
ResponderBorrar=JERARQUIA(A2, $A$2:$A$11)+CONTAR.SI($A2:A$11,A2)-1
la expresión CONTAR.SI($A2:A$11,A2) da 1 en la primer instancia y 2 en la segunda. Al restar 1, la expresión CONTAR.SI($A2:A$11,A2)-1 da 0 en la primer aparición del valor y no altera el resultado de JERARQUIA; en la segunda aparición de 1 (2 -1) y suma 1 al valor de JERARQUIA.
Hola, como puedo hacer si tengo una lista por ejemplo con 3 columas: 1 Vendedor, Sucursal, articulos vendidos; y quiero que la jerarquia se vaya asignando por sucursal, o sea que cuando el vendedor sea de la sucursal 1 la jerarquia empiece a contabilizarlo y que se reinicie cuando encuentre un vendedor de otra sucursal? gracias de antemano, saludos
ResponderBorrarHola Dennis, fijate en este post.
ResponderBorrarHola Jorge, tengo una pregunta, es que tengo una lista de estudiantes con notas distintas, hay una columna que dice puestos, cada uno tiene su puesto correcto de acuerdo a sus notas definitivas, lo que quiero saber es que formula utilizo para que en una celda me diga que el chico que tiene primer puesto es Antonio con 10.0 por ejemplo y la chica con primer puesto es Andrea con 10.0, osea que diga los puestos por genero,te lo agradecería mucho
ResponderBorrarVeo dos posibilidades:
Borrar1 - tener dos listas separadas por géneros (posibilidad obvia por lo que supongo que no es relevante para tu caso);
2 - crear una forma condicional. Seguramente tendrías que usar una fórmula matricial. La explicación es un tanto larga para un comentario.