Posicionamiento Ordinal en Base un rango variante

Buen día,
Mi pregunta es la siguiente, bueno en realidad no se como articularla así que voy ser lo más explicito posible, ya que creo tener la mitad del trabajo hecho:
Dado un conjunto de Nombres de un rango dado, contarlos para determinar el total de veces que aparecen, ok hasta aquí todo bien, luego de estos determinar el numero de veces que aparece cada uno individualmente para determinar quien tuvo la mayor cantidad de apariciones, luego de esto que se ordenen de manera automática para determinar su posición ordinal, es decir, el que tuvo más apariciones de primero, luego el segundo, y así consecutivamente, voy a poner un ejemple sencillo en especifico:
En una empresa "X" se busca la manera de determinar cual de los empleados tiene mayor cantidad de devoluciones al mes, la empresa cuenta con 4 vendedores, Carlos, Jose, Vladimir e Ian. A final de mes esto fueron los resultados:
A
1
Vendedor
2
Vladimir
3
Jose
4
Vladimir
5
Ian
6
Ian
7
Ian
8
Jose
9
Vladimir
10
Jose
11
Jose
12
Jose
13
Vladimir
14
Vladimir
15
Carlos
16
Jose
17
Carlos
16
<== Total de devoluciones al mes
Ok, para determinar el total de devoluciones use la siguiente función:
=CONTAR.SI(A3:A18;"Carlos")+CONTAR.SI(A3:A18;"Jose")+CONTAR.SI(A3:A18;"Vladimir")+CONTAR.SI(A3:A18;"Ian")
Para determinar las veces que aparecieron cada uno es la misma resumida para cada caso
A
B
22
Carlos
=CONTAR.SI(B3:B18;"Carlos")
2
23
Jose
=CONTAR.SI(B3:B18;"Jose")
6
24
Vladimir
=CONTAR.SI(B3:B18;"Vladimir")
5
25
Ian
=CONTAR.SI(B3:B18;"Ian")
3
Y para acomoarlos ordinalmente partiendo de los datos de la tabla anterior use el siguiente conjunto de funciones:
Posición
Función
Vendedor

=SI(MAX(B22:B25)=B22;A22;SI(MAX(B22:B25)=B23;A23;SI(MAX(B22:B25)=B24;A24;SI(MAX(B22:B25)=B25;A25))))
Jose

=SI(K.ESIMO.MAYOR(B22:B25;2)=B22;A22;SI(K.ESIMO.MAYOR(B22:B25;2)=B23;A23;SI(K.ESIMO.MAYOR(B22:B25;2)=B24;A24;SI(K.ESIMO.MAYOR(B22:B25;2)=B25;A25))))
Vladimir

=SI(K.ESIMO.MAYOR(B22:B25;3)=B22;A22;SI(K.ESIMO.MAYOR(B22:B25;3)=B23;A23;SI(K.ESIMO.MAYOR(B22:B25;3)=B24;A24;SI(K.ESIMO.MAYOR(B22:B25;3)=B25;A25))))
Ian

=SI(MIN(B22:B25)=B22;A22;SI(MIN(B22:B25)=B23;A23;SI(MIN(B22:B25)=B24;A24;SI(MIN(B22:B25)=B25;A25))))
Carlos
Hasta este momento todo funciona a la perfección, mi problema es cuando dos o más tienen la misma cantidad de apariciones; es decir si Jose y Vladimir tienen el ismo numero, me aparece por defecto Jose en la posición 1ª y 2ª, y si tres o todos tienen la misma cantidad aparece solamente José en todas las posiciones, entonces mi pregunta es la siguiente:
Como hago para en caso de que 2 o más tengan el mismo numero de apariciones aparezcan uno luego del otro de forma alfabética y en caso de que sean mayor o menor que otros su posición sea exacto, es decir en caso de que Vladimir e Ian tengan la misma cantidad de Apariciones pero menos que Jose aparezcan en la 3ª y 2ª posición respectivamente.
Gracias por su pronta respuesta.

1 respuesta

Respuesta
Yo te propondría lo siguiente. Luego de contar ya tendrías el numero de devoluciones.
Como son solo 4 vendedores yo podría en un rango el resultado de la tabla y después de contar y utilizaría este código para ordenarlos
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B2") = Range("B3") And Range("B2") = Range("B4") And Range("B2") = Range("B5") Then
Sheets("Hoja1").Select
Range("A2:B5").Select
Selection.Sort Key1:=Range("a2:a5"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Else
Sheets("Hoja1").Select
Range("A2:b5").Select
Selection.Sort Key1:=Range("b2:b5"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End If
End Sub
Modifica los rangos donde tengas tus valores, acá coloque como ejemplo el rango A2 hasta B5.
Adáptalo a tus necesidades y espero te sirva.
El código debes colocarlo dentro de la hoja donde están tus datos y guardar e archivo como .xlsm
Gracias por tu pronta respuesta,
Creo que no me explique bien, lo que pasa es que no me fije que las tablas no se pegana bien, porque el caso es este, :
De un conjunto de operaciones tengo estos resultados, de un total de 16 errores, cometidos por 4 vendedores A, B, C y DE los resultados para el mes de Junio son:
Vendedor nº de errores
A5
B6
<span class="Apple-tab-span" style="white-space: pre;">C </span>2
D3
Basados en estos datos elabore otra tabla donde se acomodan de manera ordinal de mayor a menor según el numero de errores (las funciones están en la pregunta inicial).
posicionvendedor
1ºB
2ºA
3ºD
<span class="Apple-tab-span" style="white-space: pre;">4</span>ºC
Siempre que los errores tengas diversos valores no hay problema, el problema es cuando se presenta el siguiente caso:
Vendedor nº de errores
A5
B4
C3
D4
Si te fijas el Nº de error de A y B es igual, por consiguiente la tabla que me muestra la posición de cada vendedor me arroja por defecto los siguientes resultados:
posicionvendedor
1ºA
2ºB
3ºB
4ºC
En caso de que 3 o todos los vendedores tengan la misma cantidad de errores siempre me muestra por defecto el nombre del primero que se consiga, en este ejemplo en especifico
¿Aprecias mi problema?
No solo me muestra a B en dos posiciones distintas, sino que obvia a D.
Quiero la manera en que basado en los datos de la penúltima tabla me arroje lo siguiente:
Posición vendedor
1ºA
2ºB
3ºD
4ºC
Gracias por cualquier ayuda que me quieras proporcionar.
Espero haber podido expresar lo que quiero lograr.
Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas