Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Funzione Rango - problema tosto

409 views
Skip to first unread message

Morrison

unread,
Jan 24, 2013, 4:02:45 PM1/24/13
to
Nella riga da A1 a F1 ho i seguenti valori:

2 3 5.8 5.8 5.8 8


Nella riga da A2 a F2 ho trascinato la seguente formula:

=RANGO(A1;$A$1:$F$1;1)

La riga 2 si presenta quindi con i seguenti valori:

1 2 3 5 3 6


Appare chiaro che il mio obiettivo e' individuare il rango di ciascun
valore nella prima riga, ma non saltando l'ordine sequenziale.

Chiaramente il problema sono quei valori ripetuti nella prima riga,
non due ma ben tre!!!

Leggendo l'help della funzione ho capito che i ranghi della riga 2
sono coerenti con la logica con cui e' stata pensata la funzione.

Io pero', come accennavo, ho necessita' che non ci siano ne' numeri
(ranghi) doppi ne' che si salti l'ordine sequenzionale.

Per ulteriore chiarezza indico la sequenza ideale dei ranghi, dove
quando ci si inbatte in numeri doppi o tripli non mi venga ritornato
lo stesso rango e dove non ci siano salti numerici.
Questa la sequenza ideale:

1 2 3 4 5 6 7


Lo so e' abbastanza tosta la cosa, almeno io non sono riuscito a
trovare una soluzione.

Credo di averla trovata nel caso in cui ci siano solo due valori
uguali, ma non nel caso in cui i valori sono 3.

Avete delle idee in merito?
Message has been deleted

Maurizio Borrelli

unread,
Jan 24, 2013, 4:39:17 PM1/24/13
to
l giorno giovedì 24 gennaio 2013 22:02:45 UTC+1, Morrison ha scritto:
> Nella riga da A1 a F1 ho i seguenti valori:
> 2 3 5.8 5.8 5.8 8
> Nella riga da A2 a F2 ho trascinato la seguente formula:
> =RANGO(A1;$A$1:$F$1;1)
> La riga 2 si presenta quindi con i seguenti valori:
> 1 2 3 5 3 6

5???

> Appare chiaro che il mio obiettivo e' individuare il rango di ciascun
> valore nella prima riga, ma non saltando l'ordine sequenziale.
> Chiaramente il problema sono quei valori ripetuti nella prima riga,
> non due ma ben tre!!!
> Leggendo l'help della funzione ho capito che i ranghi della riga 2
> sono coerenti con la logica con cui e' stata pensata la funzione.
> Io pero', come accennavo, ho necessita' che non ci siano ne' numeri
> (ranghi) doppi ne' che si salti l'ordine sequenzionale.
> Per ulteriore chiarezza indico la sequenza ideale dei ranghi, dove
> quando ci si inbatte in numeri doppi o tripli non mi venga ritornato
> lo stesso rango e dove non ci siano salti numerici.
> Questa la sequenza ideale:
> 1 2 3 4 5 6 7

7???

> Lo so e' abbastanza tosta la cosa, almeno io non sono riuscito a
> trovare una soluzione.
> Credo di averla trovata nel caso in cui ci siano solo due valori
> uguali, ma non nel caso in cui i valori sono 3.
> Avete delle idee in merito?

Invece di cominciare i dati da A1 e le formule da A2, comincia da B1 e B2 con questa formula in A2, da ricopiare a destra q.b.:
=SE(RANGO(B1;$B$1:$G$1;1)<=A2;A2+1;RANGO(B1;$B$1:$G$1;1))
(Ma non fai prima a immettere semplicemente e senza formula 1, 2, 3, 4, 5 e 6? :)
--
Ciao!
Maurizio

Maurizio Borrelli

unread,
Jan 24, 2013, 4:45:56 PM1/24/13
to
Il giorno giovedì 24 gennaio 2013 22:39:17 UTC+1, Maurizio Borrelli ha scritto:
> l giorno giovedì 24 gennaio 2013 22:02:45 UTC+1, Morrison ha scritto:

Errore:
> con questa formula in A2

Correzione:
con questa formula in B2

--
Ciao!
Maurizio

Morrison

unread,
Jan 25, 2013, 2:07:37 AM1/25/13
to
On Thu, 24 Jan 2013 13:45:56 -0800 (PST), Maurizio Borrelli
<maurizio...@freepass.it> wrote:

>Il giorno gioved� 24 gennaio 2013 22:39:17 UTC+1, Maurizio Borrelli ha scritto:
>> l giorno gioved� 24 gennaio 2013 22:02:45 UTC+1, Morrison ha scritto:
>
>Errore:
>> con questa formula in A2
>
>Correzione:
>con questa formula in B2


Grazie Maurizio.
Chiaramente se avessi una sola riga agirei manualmente ;-)
Avendone 1000 ho bisogno di "automatizzare" e generalizzare,
considerando che le casistiche possono essere le piu' disparate:
nessun valore ripetuto, 1 valore ripetuto, due valori ripetuti ....
e, devo ancora verificare, persino valori non numerici che andranno
bellamente ignorati come non ci fossero. Ma a quest'ultima cosa ci
penso dopo.

Per quanto riguarda la soluzione da te proposta non produce tutte le
caratteristiche ricercate. Infatti manca il quattro.

Questo l'output (ranghi) che ottengo:

1 2 3 5 6 7


Il problema sono i tre valori ripetuti: 5.8 nel mio esempio
Se fossero solo due andrebbe tutto bene. Il fatto e' che ne sono tre
ed al secondo 5.8 excel attribuisce un rango di 5!


Maurizio Borrelli

unread,
Jan 25, 2013, 2:52:49 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 08:07:37 UTC+1, Morrison ha scritto:
> On Thu, 24 Jan 2013 13:45:56 -0800 (PST), Maurizio Borrelli

> Questo l'output (ranghi) che ottengo:
> 1 2 3 5 6 7

Io pero`, con la tua formula, dove tu ottieni
1, 2, 3, 5, 3, 6
ottengo
1, 2, 3, 3, 3, 6.
C'e` qualcosa che non torna. Sicuro che i tuoi valori sono
2, 3, 5.8, 5.8, 5.8, 8
?

--
Ciao!
Maurizio

r

unread,
Jan 25, 2013, 3:03:27 AM1/25/13
to
=RANGO(A1;$A$1:$F$1;1)+conta.se($a$2:a2;a1)-1
prova perché sto scrivendo dal telefono

r

r

unread,
Jan 25, 2013, 3:06:51 AM1/25/13
to
No così
RANGO(A1;$A$1:$F$1;1)+conta.se($a$1:a1;a1)-1

r

unread,
Jan 25, 2013, 3:16:12 AM1/25/13
to
Ciao Maurizio non penso funzionera' forse se l'elenco fosse sempre ordinato, ma in quel caso andrebbe bene 1,2,3,4,5,6 ... Um forse e' quello che intendevi?
:-)
r

Morrison

unread,
Jan 25, 2013, 7:15:40 AM1/25/13
to
On Thu, 24 Jan 2013 23:52:49 -0800 (PST), Maurizio Borrelli
<maurizio...@freepass.it> wrote:
Hai ragione, deve essere stato un problema di decimali invisibili.

Bene ottengo anche io la sequenza:

1,2,3,3,3,6

La tua soluzione mi sembra di intuire che non sia sufficentemente
generalizzante, perche' ad esempio e' dipendente dalla posizione in
cui si trova il numero doppio o triplo.
(Nei miei dati non so se ci saranno o meno numeri ripetuti e in che
posizione si troveranno)

Ad esempio prova a cambiare di posizione il terzo 5.8 mettendolo al
posto del primo due:
5.8 3 5.8 5.8 2 8

Applicando la tua formula mi vien fuori:

3 4 5 6 7 8


che non ha alcun senso, primo perche' mancano il rango 1 e 2, secondo
perche' 5.8 e' maggiore di 3 eppure si ritrova un rango inferiore

Bruno Campanini

unread,
Jan 25, 2013, 7:41:41 AM1/25/13
to
Morrison expressed precisely :
> Nella riga da A1 a F1 ho i seguenti valori:
>
> 2 3 5.8 5.8 5.8 8
>
>
> Nella riga da A2 a F2 ho trascinato la seguente formula:
>
> =RANGO(A1;$A$1:$F$1;1)
>
> La riga 2 si presenta quindi con i seguenti valori:
>
> 1 2 3 5 3 6

Intanto, come hai già rilevato, otterrai i seguenti valori:
1 2 3 3 3 6

Poi, la riga originaria si trova già ordinata o potrebbe anche non
esserlo?
Nel primo caso cambiare i numeri uguali successivi al primo in numeri
naturalmente sequenziali col tutto mi sembra un gioco da ragazzi.

Nel secondo caso ad es: 5.8 2 8 5.8 5.8 3
vorresti ottenere non: 3 1 6 3 3 2
bensì: 3|4|5 1 6 3|4|5 3|4|5 2

Cioè i tre casi 5.8 andrebbero ad assumere RANDOM tre delle
P(3,4,5) = 6 permutazioni (345,354,453,435,534,543).
O c'è anche una preferenza da mettere in conto?

Bruno


r

unread,
Jan 25, 2013, 8:12:39 AM1/25/13
to
@Bruno e Morrison

se i dati sono ordinati sempre il risultato è sempre 1 2 3 4 5 6
quindi l'elenco non è ordinato.

la mia soluzione partendo dal tuo elenco:
5,8 2 8 5,8 5,8 3

restituisce:

3 1 6 4 5 2

cosa c'è che non va in questa soluzione?
questa è la soluzione:
=RANGO(A1;$A$1:$F$1;1)+CONTA.SE($A$1:A1;A1)-1
in inglese:
=RANK(A1,$A$1:$F$1,1)+COUNTIF($A$1:A1,A1)-1

bho ... ma li leggete i post o no?
saluti
r

Bruno Campanini

unread,
Jan 25, 2013, 8:34:03 AM1/25/13
to
r formulated the question :
> @Bruno e Morrison
>
> se i dati sono ordinati sempre il risultato ᅵ sempre 1 2 3 4 5 6
> quindi l'elenco non ᅵ ordinato.

Questo ᅵ un elenco ordinato:
2 3 5.8 5.8 5.8 8
e il risultato (con RANK) ᅵ 1 2 3 3 3 6.
Diventa 1 2 3 4 5 6 previo "arrangiamento"
(richiesta dell'OP).

> la mia soluzione partendo dal tuo elenco:
> 5,8 2 8 5,8 5,8 3
>
> restituisce:
>
> 3 1 6 4 5 2

Io ho chiesto che ordine assegnare ai tre 5.8
(3 al primo, 4 al secondo, 5 al terzo come hai fatto tu ovvero
in un'altra delle sei permutazioni P(3,4,5)?

Ma tu li leggi i post o vai a tasto?

Bruno


Morrison

unread,
Jan 25, 2013, 8:44:00 AM1/25/13
to
On Fri, 25 Jan 2013 05:12:39 -0800 (PST), r <robb...@gmail.com>
wrote:
Ciao R, grazie per la soluzione In effetti era la stessa soluzione a
cui ero gia' arrivato io ma che in un primo momento avevo valutato non
funzionasse. Ad una piu' attenta analisi mi son reso conto che avevo
problemi con i formati dei valori di base a cui attribuire un rango,
cosa che faceva "impazzire" la funzione rango.

Sistemati quei valori di base (sostanzialmente usando la funzione
arrotonda con un numero fisso di decimali) tutto torrna.

Un grazie e' doveroso

r

unread,
Jan 25, 2013, 8:46:02 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 14:34:03 UTC+1, Bruno Campanini ha scritto:
> r formulated the question : > @Bruno e Morrison > > se i dati sono ordinati sempre il risultato ᅵ sempre 1 2 3 4 5 6 > quindi l'elenco non ᅵ ordinato. Questo ᅵ un elenco ordinato: 2 3 5.8 5.8 5.8 8 e il risultato (con RANK) ᅵ 1 2 3 3 3 6. Diventa 1 2 3 4 5 6 previo "arrangiamento" (richiesta dell'OP). > la mia soluzione partendo dal tuo elenco: > 5,8 2 8 5,8 5,8 3 > > restituisce: > > 3 1 6 4 5 2 Io ho chiesto che ordine assegnare ai tre 5.8 (3 al primo, 4 al secondo, 5 al terzo come hai fatto tu ovvero in un'altra delle sei permutazioni P(3,4,5)? Ma tu li leggi i post o vai a tasto? Bruno

se i dati sono sempre ordinati e in base a quanto richiesto dall'OP il risultato sarebbe sempre
1 2 3 4 5 6
si deduce che i dati non sono sempre ordinati ... oppure che l'OP è un emerito cretino

un'altra delle 6 permutazioni? ... se sono 3 dati uguali e se sono n ... cosa ti aspetti che l'op ti dica che vuole un ordine tipo 4 3 5?
già mi sembra impossibile che richieda un ordine ordinato in modo decrescente 5 4 3 perchè non ci vedo molto senso ... ma altri diversi dai due ordinati proprio non me li riesco a immaginare ...
comunque dimmi tu se vuoi l'ordine 5 4 3 io una formula che funziona te la scrivo

saluti
r

r

unread,
Jan 25, 2013, 8:48:34 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 14:44:00 UTC+1, Morrison ha scritto:
> On Fri, 25 Jan 2013 05:12:39 -0800 (PST), r <robb...@gmail.com> wrote: >@Bruno e Morrison > >se i dati sono ordinati sempre il risultato è sempre 1 2 3 4 5 6 >quindi l'elenco non è ordinato. > >la mia soluzione partendo dal tuo elenco: >5,8 2 8 5,8 5,8 3 > >restituisce: > >3 1 6 4 5 2 > >cosa c'è che non va in questa soluzione? >questa è la soluzione: >=RANGO(A1;$A$1:$F$1;1)+CONTA.SE($A$1:A1;A1)-1 >in inglese: >=RANK(A1,$A$1:$F$1,1)+COUNTIF($A$1:A1,A1)-1 > >bho ... ma li leggete i post o no? >saluti >r Ciao R, grazie per la soluzione In effetti era la stessa soluzione a cui ero gia' arrivato io ma che in un primo momento avevo valutato non funzionasse. Ad una piu' attenta analisi mi son reso conto che avevo problemi con i formati dei valori di base a cui attribuire un rango, cosa che faceva "impazzire" la funzione rango. Sistemati quei valori di base (sostanzialmente usando la funzione arrotonda con un numero fisso di decimali) tutto torrna. Un grazie e' doveroso

Ma che diavolo stai dicendo?????
quale formula?????

RANGO su valori uguali restituisce valori uguali! quindi se vuoi che non ci siano doppioni o aggiusti i valori della lista in modo che non ci siano doppioni o aggiusti i valori del risultato di rango come ti ho suggerito

r

Morrison

unread,
Jan 25, 2013, 9:27:48 AM1/25/13
to
On Fri, 25 Jan 2013 05:46:02 -0800 (PST), r <robb...@gmail.com>
wrote:
Per quanto riguarda me l'ordine non e' importante.
Ma perche' si puo' addirittura stabilire un ordinamento dei 3 valori
uguali? E magari in base ad un criterio personalizzato ....

Beh a questo punto sono curioso, a puri fini di apprendimento dato
che, come dicevo, la cosa non e' strettamente necessaria nel caso
specifico.


r

unread,
Jan 25, 2013, 9:34:46 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 14:46:02 UTC+1, r ha scritto:

questa per un ordinamento decrescente tipo 5 4 3
=RANGO(A1;$A$1:$F$1;1)+CONTA.SE(A1:$F$1;A1)-1

r

r

unread,
Jan 25, 2013, 9:39:33 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 15:34:46 UTC+1, r ha scritto:

=RANGO(A1;$A$1:$F$1;1)+CONTA.SE(A1:$F$1;A1)-1

dimenticata la traduzione:
=RANK(A1,$A$1:$F$1,1)+COUNTIF(A1:$F$1,A1)-1

r

Maurizio Borrelli

unread,
Jan 25, 2013, 11:31:56 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 09:16:12 UTC+1, r ha scritto:
> ma in quel caso andrebbe bene 1,2,3,4,5,6 ... Um forse e' quello che intendevi?
> :-)

:-))
--
Ciao!
Maurizio

r

unread,
Jan 25, 2013, 11:43:38 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 15:39:33 UTC+1, r ha scritto:
> Il giorno venerdì 25 gennaio 2013 15:34:46 UTC+1, r ha scritto: =RANGO(A1;$A$1:$F$1;1)+CONTA.SE(A1:$F$1;A1)-1 dimenticata la traduzione: =RANK(A1,$A$1:$F$1,1)+COUNTIF(A1:$F$1,A1)-1 r

ho pensato a come ottenere una soluzione con formula matriciale che restituisce una matrice ... per intendersi una formula da inserire in a2 poi selezionare a2:f2 e confermando con ctrl+mnaiusc+invio restituisse il risultato atteso ....

l'unica cosa che mi è venuta in mente è questa oscenità:
=CONFRONTA(PERCENT.RANGO(A1:F1+RIF.COLONNA(A1:F1)%%;A1:F1+RIF.COLONNA(A1:F1)%%;6);PICCOLO(PERCENT.RANGO(A1:F1+RIF.COLONNA(A1:F1)%%;A1:F1+RIF.COLONNA(A1:F1)%%;6);RIF.RIGA(1:6));)

versione inglese
=MATCH(PERCENTRANK(A1:F1+COLUMN(A1:F1)%%,A1:F1+COLUMN(A1:F1)%%,6),SMALL(PERCENTRANK(A1:F1+COLUMN(A1:F1)%%,A1:F1+COLUMN(A1:F1)%%,6),ROW(1:6)),)

che sembra funzionare ... ma che sono certo possa essere accorciata

saluti
r

r

unread,
Jan 25, 2013, 11:51:52 AM1/25/13
to
Il giorno venerdì 25 gennaio 2013 17:43:38 UTC+1, r ha scritto:
ma che sono certo possa essere accorciata saluti r

questa già mi sembra meglio:
=RANGO(A1:F1;A1:F1;1)+CONTA.SE(SCARTO(A1;;;;RIF.COLONNA(A:F));SCARTO(A1;;RIF.COLONNA(A:F)-1))-1

versione inglese
=RANK(A1:F1,A1:F1,1)+COUNTIF(OFFSET(A1,,,,COLUMN(A:F)),OFFSET(A1,,COLUMN(A:F)-1))-1

saluti
r
0 new messages