Discussione:
[Quizzone di Excel] Quesito 39
(troppo vecchio per rispondere)
r
2011-11-17 15:15:54 UTC
Permalink
Per approfondire:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel

continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Berger
http://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.

Saluti
r
r
2011-11-17 16:26:24 UTC
Permalink
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
io ho finito :-)
già che c'ero l'ho fatto in 3 versioni ...
la prima restituisce res(giornate*2-1,squadre/2-1) ovvero ogni
giornata occupa 2 righe nella prima le squadre che giocano in casa
nella seconda quelle che giocano fuori casa

la seconda versione restituisce res(giornate-1,squadre-1) ovvero ogni
riga è una giornata le squadre sono in fila quindi ogni partita occupa
2 posizioni (la prima è la squadra che gioca in casa la seconda quella
che gioca fuori casa)

la terza restituisce res(giornate-1,squadre/2-1) ovvero ogni riga è
una giornata ogni cella contiene la stringa con le due squadre
separate da un punto e virgola ...

eh eh ... ci scrivo un articolo :-)
ma aspetto ... dopo che avete dato la soluzione al quesito :-)

ciao
r
r
2011-11-17 16:33:03 UTC
Permalink
Post by r
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
io ho finito :-)
già che c'ero l'ho fatto in 3 versioni ...
la prima restituisce res(giornate*2-1,squadre/2-1) ovvero ogni
giornata occupa 2 righe nella prima le squadre che giocano in casa
nella seconda quelle che giocano fuori casa
la seconda versione restituisce res(giornate-1,squadre-1) ovvero ogni
riga è una giornata le squadre sono in fila quindi ogni partita occupa
2 posizioni (la prima è la squadra che gioca in casa la seconda quella
che gioca fuori casa)
la terza restituisce res(giornate-1,squadre/2-1) ovvero ogni riga è
una giornata ogni cella contiene la stringa con le due squadre
separate da un punto e virgola ...
eh eh ... ci scrivo un articolo :-)
ma aspetto ... dopo che avete dato la soluzione al quesito :-)
ciao
r
cacchio! voglio provare con le formule!
che ne dite? altri 8 punti?
:-)
r
r
2011-11-17 17:23:35 UTC
Permalink
Post by r
Post by r
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
io ho finito :-)
già che c'ero l'ho fatto in 3 versioni ...
la prima restituisce res(giornate*2-1,squadre/2-1) ovvero ogni
giornata occupa 2 righe nella prima le squadre che giocano in casa
nella seconda quelle che giocano fuori casa
la seconda versione restituisce res(giornate-1,squadre-1) ovvero ogni
riga è una giornata le squadre sono in fila quindi ogni partita occupa
2 posizioni (la prima è la squadra che gioca in casa la seconda quella
che gioca fuori casa)
la terza restituisce res(giornate-1,squadre/2-1) ovvero ogni riga è
una giornata ogni cella contiene la stringa con le due squadre
separate da un punto e virgola ...
eh eh ... ci scrivo un articolo :-)
ma aspetto ... dopo che avete dato la soluzione al quesito :-)
ciao
r
cacchio! voglio provare con le formule!
che ne dite? altri 8 punti?
:-)
r
avete visto frankenstein junior ...
Si Può Fare! (anche con le formule)
:-)
plinius
2011-11-17 17:38:35 UTC
Permalink
"r" <***@gmail.com> ha scritto nel messaggio news:652af57a-41e4-41f1-bbe7-***@g7g2000vbd.googlegroups.com...
Per approfondire:
https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel

continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Berger
http://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.

Saluti
r

*****************

Tanto per capire di che parliamo:

Ogni squadra incontra ciascuna delle altre 2 volte (una in casa a l'altra
fuori).

Quindi si giocano in totale n*(n-1) partite distribuite su 2*(n-1) giornate
in ciascuna delle quali si disputano n/2 partite.

Tipo:
Squadre A, B, C, D

1^ giornata A-B; C-D
2^ giornata A-C; B-D
3^ giornata A-D; B-C
4^ giornata B-A; D-C
5^ giornata C-A; D-B
6^ giornata D-A; C-B

Oppure le partite in casa e quelle fuori casa devono alternarsi per ciascuna
squadra?

Deve essere seguito l'algoritmo di Berger (dopo averlo trovato) o serve solo
ottenere il risultato non importa come?

Se ho capito bene e se mi chiarisci questi punti domani ci penso, che
stasera non mi riesce proprio.
Ciao,
E.
r
2011-11-17 17:51:59 UTC
Permalink
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterr il nome delle 2 squadre separate da un trattino.
Saluti
r
*****************
Ogni squadra incontra ciascuna delle altre 2 volte (una in casa a l'altra
fuori).
Quindi si giocano in totale n*(n-1) partite distribuite su 2*(n-1) giornate
in ciascuna delle quali si disputano n/2 partite.
Squadre A, B, C, D
1^ giornata A-B; C-D
2^ giornata A-C; B-D
3^ giornata A-D; B-C
4^ giornata B-A; D-C
5^ giornata C-A; D-B
6^ giornata D-A; C-B
Oppure le partite in casa e quelle fuori casa devono alternarsi per ciascuna
squadra?
Deve essere seguito l'algoritmo di Berger (dopo averlo trovato) o serve solo
ottenere il risultato non importa come?
Se ho capito bene e se mi chiarisci questi punti domani ci penso, che
stasera non mi riesce proprio.
Ciao,
E.
stando alla pagina di wiki le giornate sono numero di squadre -1
quindi è solo un girone nel tuo esempio 3 giornate in cui ogni squadra
gioca in casa in modo alterno ... dovrebbe essere qualcosa tipo:
1^ giornata A-B; C-D
2^ giornata C-A; D-B
3^ giornata A-D; B-C

D;A C;B
A;B C;D
C;A B;D

se le squadre sono A,B,C,D,E,F
F;A E;B D;C
A;B C;F D;E
C;A B;D F;E
A;D E;C F;B
E;A D;F C;B

ciao
r
Scossa
2011-11-17 18:38:21 UTC
Permalink
Post by r
stando alla pagina di wiki le giornate sono numero di squadre -1
quindi è solo un girone nel tuo esempio 3 giornate in cui ogni squadra
gioca in casa in modo alterno ...
Ciao Roby, Plinius

stando a wiki NON alterna:
Nella sua versione di base[1], l'algoritmo produce un calendario che,
per ogni concorrente/squadra, *NON* alterna sistematicamente una
partita "in casa" con una "in trasferta".

Che facciamo?

Bye!
scossa
r
2011-11-17 23:25:38 UTC
Permalink
Post by Scossa
Post by r
stando alla pagina di wiki le giornate sono numero di squadre -1
quindi è solo un girone nel tuo esempio 3 giornate in cui ogni squadra
gioca in casa in modo alterno ...
Ciao Roby, Plinius
Nella sua versione di base[1], l'algoritmo produce un calendario che,
per ogni concorrente/squadra, *NON* alterna sistematicamente una
partita "in casa" con una "in trasferta".
Che facciamo?
Bye!
scossa
uffa ... ho postato 2 ore fa la risposta! non la vedo ancora ;-(
r
2011-11-17 23:27:15 UTC
Permalink
Post by Scossa
Post by r
stando alla pagina di wiki le giornate sono numero di squadre -1
quindi è solo un girone nel tuo esempio 3 giornate in cui ogni squadra
gioca in casa in modo alterno ...
Ciao Roby, Plinius
Nella sua versione di base[1], l'algoritmo produce un calendario che,
per ogni concorrente/squadra, *NON* alterna sistematicamente una
partita "in casa" con una "in trasferta".
Che facciamo?
Bye!
scossa
uffa ... ho postato 2 ore fa la risposta! non la vedo ancora    ;-(
riprovo ...
l'algoritmo sarebbe quello scritto in java ... però fate come volete
tanto la differenza è minima ... io java non lo mastico ma è facile
capire dai commenti ...
ciaooooo ELETTRICO!

r
r
2011-11-17 22:09:26 UTC
Permalink
Post by Scossa
Post by r
stando alla pagina di wiki le giornate sono numero di squadre -1
quindi è solo un girone nel tuo esempio 3 giornate in cui ogni squadra
gioca in casa in modo alterno ...
Ciao Roby, Plinius
Nella sua versione di base[1], l'algoritmo produce un calendario che,
per ogni concorrente/squadra, *NON* alterna sistematicamente una
partita "in casa" con una "in trasferta".
Che facciamo?
Bye!
scossa
Ciaooooo Elettrico! che piacere!
cambia veramente poco raga ... io ho seguito l'algoritmo java che c'è
alla pagina di wiki anche perchè fino a oggi non sapevo nemmeno
dell'esistenza dell'algoritmo e non sono riuscito a trovare nulla ...
java nno lo mastico, ma ci sono i commenti e si riesce a capire quel
che fa ...
comunque ripeto cambia poco una if per vedere se siano in giornata
pari o dispari per invertire le squadre ... fate voi!
ciaooo
r
r
2011-11-17 23:15:45 UTC
Permalink
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
questa è la soluzione con formula ... la prima sviluppa solo un girone
e non alterna partite in casa e in trasferta ... la seconda sviluppa
entrambi i gironi alternando le trasferte dalle partite in casa ...
eccole:

=SE(O(RIF.RIGA(A2)>_r;RIF.COLONNA(A1)*2>RIGHE(rng_r)
+1);NON.DISP();SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1)))

=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();SE(RESTO(RIF.RIGA(A1);2);SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1));INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&"-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))
))


i nomi sono:
rng=$A$1:INDICE($A:$A;CONTA.VALORI($A:$A))

rng_r=SCARTO(rng;1;;RIGHE(rng)-1)

_r=RIGHE(rng)

i nomi delle squadre partendo da A1 in giù ... numero pari di
squadre ... anche se è facile rendere possibile anche lo sviluppo con
numero dispari

saluti
r
r
2011-11-18 10:32:47 UTC
Permalink
Post by r
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
questa è la soluzione con formula ... la prima sviluppa solo un girone
e non alterna partite in casa e in trasferta ... la seconda sviluppa
entrambi i gironi alternando le trasferte dalle partite in casa ...
=SE(O(RIF.RIGA(A2)>_r;RIF.COLONNA(A1)*2>RIGHE(rng_r)
+1);NON.DISP();SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1)))
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();SE(RESTO(RIF.RIGA(A1);2);SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1));INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&"-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))
))
rng=$A$1:INDICE($A:$A;CONTA.VALORI($A:$A))
rng_r=SCARTO(rng;1;;RIGHE(rng)-1)
_r=RIGHE(rng)
i nomi delle squadre partendo da A1 in giù ... numero pari di
squadre ... anche se è facile rendere possibile anche  lo sviluppo con
numero dispari
saluti
r
accorcio la seconda:
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-";VAL.DISPARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( "-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.PARI(RIF.RIGA(A1))))

così è anche più chiara :-)
saluti
r
plinius
2011-11-18 12:16:24 UTC
Permalink
Post by r
Per
approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di
Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
questa è la soluzione con formula ... la prima sviluppa solo un girone
e non alterna partite in casa e in trasferta ... la seconda sviluppa
entrambi i gironi alternando le trasferte dalle partite in casa ...
=SE(O(RIF.RIGA(A2)>_r;RIF.COLONNA(A1)*2>RIGHE(rng_r)
+1);NON.DISP();SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1)))
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();SE(RESTO(RIF.RIGA(A1);2);SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1));INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&"-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))
))
rng=$A$1:INDICE($A:$A;CONTA.VALORI($A:$A))
rng_r=SCARTO(rng;1;;RIGHE(rng)-1)
_r=RIGHE(rng)
i nomi delle squadre partendo da A1 in giù ... numero pari di
squadre ... anche se è facile rendere possibile anche lo sviluppo con
numero dispari
saluti
r
accorcio la seconda:
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-";VAL.DISPARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( "-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.PARI(RIF.RIGA(A1))))

così è anche più chiara :-)
saluti
r

*************************

A me queste formule non funzionano.
Accoppiano sempre e solo la prima squadra con tutte le altre.

Ma, ti dirò, che anche l'algoritmo di Berger come descritto in Wikipedia non
mi quadra:
Eseguendo gli spostamenti descritti verrebbe:
casa | fuori
A B C | D E F
A C F | B D E
A F E | C B D
A E D | F C B
A D B | E F C
da cui deriverebbero queste partite (trascurando l'ordine casa/trasferta):
AF BE CD
AE CD FB
AD FB EC
AB EC DF
AC DF BE
dove la terza colonna e una ripetizione della seconda mentre mancherebbero
le partite: BC BD CF DE EF

Ora vado a mangiare qualcosa, dopo provo a capire dov'è l'errore.
Ciao,
E.
eliano
2011-11-18 12:51:51 UTC
Permalink
On 18 Nov, 13:16, "plinius" <***@LEVARElibero.it> wrote:

[cut]
Post by plinius
Ora vado a mangiare qualcosa, dopo provo a capire dov'è l'errore.
Ciao,
Enrico, controlla attentamente anche la bistecca, non si sa mai.:-))
Ciao
Eliano
r
2011-11-18 13:20:22 UTC
Permalink
Post by r
Post by r
Per
approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di
Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
questa è la soluzione con formula ... la prima sviluppa solo un girone
e non alterna partite in casa e in trasferta ... la seconda sviluppa
entrambi i gironi alternando le trasferte dalle partite in casa ...
=SE(O(RIF.RIGA(A2)>_r;RIF.COLONNA(A1)*2>RIGHE(rng_r)
+1);NON.DISP();SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1)))
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();SE(RESTO(RIF.RIGA(A1);2);SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-"&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-RIF.COLONNA(A1)-2;_r-1));INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&"-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))
))
rng=$A$1:INDICE($A:$A;CONTA.VALORI($A:$A))
rng_r=SCARTO(rng;1;;RIGHE(rng)-1)
_r=RIGHE(rng)
i nomi delle squadre partendo da A1 in giù ... numero pari di
squadre ... anche se è facile rendere possibile anche lo sviluppo con
numero dispari
saluti
r
=SE(O(RIF.RIGA(A2)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&"-";VAL.DISPARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( "-"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.PARI(RIF.RIGA(A1))))
così è anche più chiara :-)
saluti
r
*************************
A me queste formule non funzionano.
Accoppiano sempre e solo la prima squadra con tutte le altre.
Ma, ti dirò, che anche l'algoritmo di Berger come descritto in Wikipedia non
casa  | fuori
A B C | D E F
A C F | B D E
A F E | C B D
A E D | F C B
A D B | E F C
AF BE CD
AE CD FB
AD FB EC
AB EC DF
AC DF BE
dove la terza colonna e una ripetizione della seconda mentre mancherebbero
le partite: BC BD CF DE EF
Ora vado a mangiare qualcosa, dopo provo a capire dov'è l'errore.
Ciao,
E.
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
plinius
2011-11-18 13:34:20 UTC
Permalink
"r" <***@gmail.com> ha scritto nel messaggio news:b9ca028b-57f2-4780-9934-***@t36g2000prt.googlegroups.com...
On 18 Nov, 13:16, "plinius" <***@LEVARElibero.it> wrote:

ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r

*********************

Squadre: A, B, C, D

Risultato:
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C


Cos'è che mi sfugge?
plinius
2011-11-18 13:45:16 UTC
Permalink
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
r
2011-11-18 13:53:53 UTC
Permalink
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
     A-D A-D B-C
     B-A B-A D-C
     A-C A-C D-B
     D-A D-A C-B
     A-B A-B C-D
     C-A C-A B-D
     A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
plinius
2011-11-18 14:07:25 UTC
Permalink
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r

******************

Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)

=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.

Mò me la studio! :-))
Ciao,
E.
r
2011-11-18 14:19:27 UTC
Permalink
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
si me ne ero già accorto :-) ecco la versione corretta:
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))

ma molto più bella è la versione che restituisce una matrice e che va
inserita in un intervallo sovradimensionato ... eccola:
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)

=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))

ciao
r
r
2011-11-18 14:29:43 UTC
Permalink
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)

=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))

con excel 2007 va ...
riciao
r
r
2011-11-18 17:00:19 UTC
Permalink
Post by r
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&­INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)
=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
con excel 2007 va ...
riciao
r- Nascondi testo citato
- Mostra testo citato -
questa funziona con excel 2003:

=SE(RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2));
2)=0;SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))

si può togliere 2 caratteri qul =0 iniziale ... ma non ho voglia
:-)
r

p.s.
questa è la formula in forma di matrice ... può essere incollata
ovunque nel foglio, si riferisce al solo nome rng ed è completamente
indipendente dalla posizione in cui viene incollata ...
r
2011-11-18 17:33:32 UTC
Permalink
Post by r
Post by r
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&­INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)
=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
con excel 2007 va ...
riciao
r- Nascondi testo citato
- Mostra testo citato -
=SE(RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2));
2)=0;SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
si può togliere 2 caratteri qul =0 iniziale ... ma non ho voglia
:-)
r
p.s.
questa è la formula in forma di matrice ... può essere incollata
ovunque nel foglio, si riferisce al solo nome rng ed è completamente
indipendente dalla posizione in cui viene incollata ...
mmmm ... mi sa che ho allungato sostituendo i nomi ... devo
rivedere ...
intanto questa l'ultima versione di quelle che vanno trascinate:
=SE(O(RIF.RIGA(A3)>RIGHE(rng)*2;RIF.COLONNA(A1)-1>(RIGHE(rng)-1)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)))&";";RESTO(RIF.RIGA(A1);
2)=0)&INDICE(rng;2+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;RIGHE(rng)-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)));RESTO(RIF.RIGA(A1);
2)))

usa il solo nome rng ...

saluti
r
plinius
2011-11-18 18:02:22 UTC
Permalink
Post by r
Post by r
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&­INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)
=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
con excel 2007 va ...
riciao
r- Nascondi testo citato
- Mostra testo citato -
=SE(RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2));
2)=0;SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
si può togliere 2 caratteri qul =0 iniziale ... ma non ho voglia
:-)
r
p.s.
questa è la formula in forma di matrice ... può essere incollata
ovunque nel foglio, si riferisce al solo nome rng ed è completamente
indipendente dalla posizione in cui viene incollata ...
mmmm ... mi sa che ho allungato sostituendo i nomi ... devo
rivedere ...
intanto questa l'ultima versione di quelle che vanno trascinate:
=SE(O(RIF.RIGA(A3)>RIGHE(rng)*2;RIF.COLONNA(A1)-1>(RIGHE(rng)-1)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)))&";";RESTO(RIF.RIGA(A1);
2)=0)&INDICE(rng;2+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;RIGHE(rng)-1))&RIPETI(
";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)));RESTO(RIF.RIGA(A1);
2)))

usa il solo nome rng ...

saluti
r

*******************

Io mi sono limitato ad individuare l'errore nella sub di wiki (hanno
scambiato destra e sinistra) e ho fatto una sub che funziona senza
ammattirci sopra.

Queste formule solo tu puoi inventarle :-=))
Troppo complicate per me...

Ciao,
E. :-)
r
2011-11-18 21:42:16 UTC
Permalink
Post by r
mmmm ... mi sa che ho allungato sostituendo i nomi ... devo
rivedere ...
=SE(O(RIF.RIGA(A3)>RIGHE(rng)*2;RIF.COLONNA(A1)-1>(RIGHE(rng)-1)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)))&";";RESTO(RIF.RIGA(A1);
2)=0)&INDICE(rng;2+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;RIGHE(rng)-1))&RIPETI(
";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)));RESTO(RIF.RIGA(A1);
2)))
usa il solo nome rng ...
Queste formule solo tu puoi inventarle :-=))
Troppo complicate per me...
ho anche dimenticato di sostituire un _r con righe(rng) ... uff :-)
r
2011-11-18 21:35:21 UTC
Permalink
Post by r
Post by r
Post by r
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&­INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)
=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
con excel 2007 va ...
riciao
r- Nascondi testo citato
- Mostra testo citato -
=SE(RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2));
2)=0;SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
si può togliere 2 caratteri qul =0 iniziale ... ma non ho voglia
:-)
r
p.s.
questa è la formula in forma di matrice ... può essere incollata
ovunque nel foglio, si riferisce al solo nome rng ed è completamente
indipendente dalla posizione in cui viene incollata ...
mmmm ... mi sa che ho allungato sostituendo i nomi ... devo
rivedere ...
=SE(O(RIF.RIGA(A3)>RIGHE(rng)*2;RIF.COLONNA(A1)-1>(RIGHE(rng)-1)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)))&";";RESTO(RIF.RIGA(A1);
2)=0)&INDICE(rng;2+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;RIGHE(rng)-1))&RIPETI(
";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)));RESTO(RIF.RIGA(A1);
2)))
usa il solo nome rng ...
saluti
r
*******************
Io mi sono limitato ad individuare l'errore nella sub di wiki (hanno
scambiato destra e sinistra) e ho fatto una sub che funziona senza
ammattirci sopra.
e cosa aspetti a postarla? vi ho distratto dal quesito ... scusate, ma
ero abbastanza euforico, non tanto per le soluzioni ma per il
problema :-) è così difficile trovare sfide inesplorate ... avrei
detto che bruno si facesse vedere ... l'unico riferimento a questo
problema nell'ng che ho trovato era suo ... va beh
Post by r
Queste formule solo tu puoi inventarle :-=))
Troppo complicate per me...
non dire sciocchezze ... basta partire dalla più semplice quella che
sviluppa solo l'andata e non alterna partite in casa da quelle
fuori ... il resto è solo un bricolage
Post by r
Ciao,
E. :-)
ciao! e posta la function ...
r
plinius
2011-11-19 00:02:31 UTC
Permalink
Post by r
Post by r
Post by r
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&­INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI(
";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)
=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
con excel 2007 va ...
riciao
r- Nascondi testo citato
- Mostra testo citato -
=SE(RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2));
2)=0;SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))
si può togliere 2 caratteri qul =0 iniziale ... ma non ho voglia
:-)
r
p.s.
questa è la formula in forma di matrice ... può essere incollata
ovunque nel foglio, si riferisce al solo nome rng ed è completamente
indipendente dalla posizione in cui viene incollata ...
mmmm ... mi sa che ho allungato sostituendo i nomi ... devo
rivedere ...
=SE(O(RIF.RIGA(A3)>RIGHE(rng)*2;RIF.COLONNA(A1)-1>(RIGHE(rng)-1)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)))&";";RESTO(RIF.RIGA(A1);
2)=0)&INDICE(rng;2+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;RIGHE(rng)-1))&RIPETI(
";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng;
2+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;RIGHE(rng)-1)));RESTO(RIF.RIGA(A1);
2)))
usa il solo nome rng ...
saluti
r
*******************
Io mi sono limitato ad individuare l'errore nella sub di wiki (hanno
scambiato destra e sinistra) e ho fatto una sub che funziona senza
ammattirci sopra.
e cosa aspetti a postarla? vi ho distratto dal quesito ... scusate, ma
ero abbastanza euforico, non tanto per le soluzioni ma per il
problema :-) è così difficile trovare sfide inesplorate ... avrei
detto che bruno si facesse vedere ... l'unico riferimento a questo
problema nell'ng che ho trovato era suo ... va beh
Post by r
Queste formule solo tu puoi inventarle :-=))
Troppo complicate per me...
non dire sciocchezze ... basta partire dalla più semplice quella che
sviluppa solo l'andata e non alterna partite in casa da quelle
fuori ... il resto è solo un bricolage
Post by r
Ciao,
E. :-)
ciao! e posta la function ...
r

***************************************

Quel tipo di formule è tutt'altro che facile da leggere... bisogna
spezzettare e analizzare... a vederle così fanno paura eh!! :-))

Comunque le leggerò, con calma!

La function segue pedissequamente l'algoritmo di Berger, ma ruotanda
entrambe le matrici (casa e fuori) verso sinistra.
Solo per snellire la lettura ho messo fuori la sub "ruota" ma, volendo, si
può riportare all'interno della function, tanto è usata in un solo punto.
----------------------------------------------------------
Function Berger(rng As Range)
Dim n As Long, ng As Long, np As Long, i As Long, j As Long
Dim casa(), fuori(), cal()
n = rng.Rows.Count
ng = (n - 1) * 2
np = n / 2
ReDim casa(n / 2 - 1), fuori(n / 2 - 1), cal(1 To ng, 1 To np)
For i = 0 To np - 1
casa(i) = rng(i + 1)
fuori(i) = rng(i + np + 1)
Next
Do While j < ng
j = j + 1
For i = 1 To np
If j Mod 2 Then
cal(j, i) = casa(i - 1) & "-" & fuori(np - i)
Else
cal(j, i) = fuori(np - i) & "-" & casa(i - 1)
End If
Next
ruota casa, fuori
Loop
Berger = cal
End Function
----------------------------------------------------------
Sub ruota(casa, fuori)
Dim pivotc As String, pivotf As String, i As Long
pivotc = casa(0)
pivotf = fuori(0)
For i = 0 To UBound(fuori) - 1
fuori(i) = fuori(i + 1)
Next
fuori(UBound(fuori)) = casa(1)
For i = 0 To UBound(casa) - 1
casa(i) = casa(i + 1)
Next
casa(UBound(casa)) = pivotf
casa(0) = pivotc
End Sub
----------------------------------------------------------

Ciao,
E.
plinius
2011-11-19 00:34:26 UTC
Permalink
Post by plinius
Quel tipo di formule è tutt'altro che facile da leggere... bisogna
spezzettare e analizzare... a vederle così fanno paura eh!! :-))
Comunque le leggerò, con calma!
La function segue pedissequamente l'algoritmo di Berger, ma ruotanda
entrambe le matrici (casa e fuori) verso sinistra.
Solo per snellire la lettura ho messo fuori la sub "ruota" ma, volendo, si
può riportare all'interno della function, tanto è usata in un solo punto.
----------------------------------------------------------
Function Berger(rng As Range)
Dim n As Long, ng As Long, np As Long, i As Long, j As Long
Dim casa(), fuori(), cal()
n = rng.Rows.Count
ng = (n - 1) * 2
np = n / 2
ReDim casa(n / 2 - 1), fuori(n / 2 - 1), cal(1 To ng, 1 To np)
For i = 0 To np - 1
casa(i) = rng(i + 1)
fuori(i) = rng(i + np + 1)
Next
Do While j < ng
j = j + 1
For i = 1 To np
If j Mod 2 Then
cal(j, i) = casa(i - 1) & "-" & fuori(np - i)
Else
cal(j, i) = fuori(np - i) & "-" & casa(i - 1)
End If
Next
ruota casa, fuori
Loop
Berger = cal
End Function
----------------------------------------------------------
Sub ruota(casa, fuori)
Dim pivotc As String, pivotf As String, i As Long
pivotc = casa(0)
pivotf = fuori(0)
For i = 0 To UBound(fuori) - 1
fuori(i) = fuori(i + 1)
Next
fuori(UBound(fuori)) = casa(1)
For i = 0 To UBound(casa) - 1
casa(i) = casa(i + 1)
Next
casa(UBound(casa)) = pivotf
casa(0) = pivotc
End Sub
----------------------------------------------------------
Ciao,
E.
Per completezza, ci sarebbe da considerare (ed aggiungere) l'ipotesi di un
numero di squadre dispari, prevedendo il riposo di una squadra in ogni
giornata.

Ciao,
E.
plinius
2011-11-19 12:45:38 UTC
Permalink
Post by plinius
Per completezza, ci sarebbe da considerare (ed aggiungere) l'ipotesi di un
numero di squadre dispari, prevedendo il riposo di una squadra in ogni
giornata.
Ciao,
E.
Ecco la versione completa per squadre in numero sia pari che dispari:
--------------------------------------------------------------
Function Berger(rng As Range)
Dim n As Long, ng As Long, np As Long, i As Long, j As Long
Dim casa(), fuori(), cal(), dispari As Boolean, flag As Boolean
n = rng.Rows.Count
dispari = (n Mod 2) > 0
n = n - dispari
ng = (n - 1) * 2
np = n / 2
ReDim casa(n / 2 - 1), fuori(n / 2 - 1), cal(1 To ng, 1 To np + dispari)
For i = 0 To np - 1
casa(i) = rng(i + 1)
fuori(i) = rng(i + np + 1)
Next
If dispari Then fuori(np - 1) = vbNullChar
Do While j < ng
j = j + 1: i = 0: flag = False
Do While i < np
i = i + 1
If casa(i - 1) <> vbNullChar And fuori(np - i) <> vbNullChar Then
If j Mod 2 Then
cal(j, i + flag) = casa(i - 1) & "-" & fuori(np - i)
Else
cal(j, i + flag) = fuori(np - i) & "-" & casa(i - 1)
End If
Else
flag = dispari
End If
Loop
ruota casa, fuori
Loop
Berger = cal
End Function
--------------------------------------------------------------
Sub ruota(casa, fuori)
Dim pivotc As String, pivotf As String, i As Long
pivotc = casa(0)
pivotf = fuori(0)
For i = 0 To UBound(fuori) - 1
fuori(i) = fuori(i + 1)
Next
fuori(UBound(fuori)) = casa(1)
For i = 0 To UBound(casa) - 1
casa(i) = casa(i + 1)
Next
casa(UBound(casa)) = pivotf
casa(0) = pivotc
End Sub
--------------------------------------------------------------

Ciao,
E.
r
2011-11-19 21:35:06 UTC
Permalink
Post by plinius
Post by plinius
Per completezza, ci sarebbe da considerare (ed aggiungere) l'ipotesi di un
numero di squadre dispari, prevedendo il riposo di una squadra in ogni
giornata.
Ciao,
E.
--------------------------------------------------------------
Function Berger(rng As Range)
Dim n As Long, ng As Long, np As Long, i As Long, j As Long
Dim casa(), fuori(), cal(), dispari As Boolean, flag As Boolean
   n = rng.Rows.Count
   dispari = (n Mod 2) > 0
   n = n - dispari
   ng = (n - 1) * 2
   np = n / 2
   ReDim casa(n / 2 - 1), fuori(n / 2 - 1), cal(1 To ng, 1 To np + dispari)
   For i = 0 To np - 1
      casa(i) = rng(i + 1)
      fuori(i) = rng(i + np + 1)
   Next
   If dispari Then fuori(np - 1) = vbNullChar
   Do While j < ng
      j = j + 1: i = 0: flag = False
      Do While i < np
         i = i + 1
         If casa(i - 1) <> vbNullChar And fuori(np - i) <> vbNullChar Then
            If j Mod 2 Then
               cal(j, i + flag) = casa(i - 1) & "-" & fuori(np - i)
            Else
               cal(j, i + flag) = fuori(np - i) & "-" & casa(i - 1)
            End If
         Else
            flag = dispari
         End If
      Loop
      ruota casa, fuori
   Loop
   Berger = cal
End Function
--------------------------------------------------------------
Sub ruota(casa, fuori)
   Dim pivotc As String, pivotf As String, i As Long
   pivotc = casa(0)
   pivotf = fuori(0)
   For i = 0 To UBound(fuori) - 1
      fuori(i) = fuori(i + 1)
   Next
   fuori(UBound(fuori)) = casa(1)
   For i = 0 To UBound(casa) - 1
      casa(i) = casa(i + 1)
   Next
   casa(UBound(casa)) = pivotf
   casa(0) = pivotc
End Sub
--------------------------------------------------------------
Ciao,
E.
ok perfetto ... ora l'ng ha una funzione in vba per berger ... e una
formula :-)
possiamo ritenerci soddisfatti!
cacchio ... il tondo 40 avrei voluto farlo io :-)
al prossimo quesito quindi ...
r
eliano
2011-11-19 00:46:12 UTC
Permalink
Post by plinius
Quel tipo di formule è tutt'altro che facile da leggere... bisogna
spezzettare e analizzare... a vederle così fanno paura eh!! :-))
Comunque le leggerò, con calma!
La function segue pedissequamente l'algoritmo di Berger, ma ruotanda
entrambe le matrici (casa e fuori) verso sinistra.
Solo per snellire la lettura ho messo fuori la sub "ruota" ma, volendo, si
può riportare all'interno della function, tanto è usata in un solo punto.
----------------------------------------------------------
Function Berger(rng As Range)
Dim n As Long, ng As Long, np As Long, i As Long, j As Long
Dim casa(), fuori(), cal()
   n = rng.Rows.Count
   ng = (n - 1) * 2
   np = n / 2
   ReDim casa(n / 2 - 1), fuori(n / 2 - 1), cal(1 To ng, 1 To np)
   For i = 0 To np - 1
      casa(i) = rng(i + 1)
      fuori(i) = rng(i + np + 1)
   Next
   Do While j < ng
      j = j + 1
      For i = 1 To np
         If j Mod 2 Then
            cal(j, i) = casa(i - 1) & "-" & fuori(np - i)
         Else
            cal(j, i) = fuori(np - i) & "-" & casa(i - 1)
         End If
      Next
      ruota casa, fuori
   Loop
   Berger = cal
End Function
----------------------------------------------------------
Sub ruota(casa, fuori)
   Dim pivotc As String, pivotf As String, i As Long
   pivotc = casa(0)
   pivotf = fuori(0)
   For i = 0 To UBound(fuori) - 1
      fuori(i) = fuori(i + 1)
   Next
   fuori(UBound(fuori)) = casa(1)
   For i = 0 To UBound(casa) - 1
      casa(i) = casa(i + 1)
   Next
   casa(UBound(casa)) = pivotf
   casa(0) = pivotc
End Sub
----------------------------------------------------------
Ciao,
E.- Nascondi testo citato
- Mostra testo citato -
Grazie Enrico, queste le capisco anch'io.
Eliano
paoloard
2011-11-18 17:54:01 UTC
Permalink
Post by r
Post by plinius
Post by plinius
Post by r
ma che stai a diii!
su ogni riga trovi sempre tutte le squadre ... ogni riga è una
giornata del campionato ... funzionano e come :-)
ciao
r
*********************
Squadre: A, B, C, D
A-D A-D B-C
B-A B-A D-C
A-C A-C D-B
D-A D-A C-B
A-B A-B C-D
C-A C-A B-D
A-D A-D B-C
Cos'è che mi sfugge?
Aspe' che ho sbagliato tutto :-))
Ora vedo bene...
E.
:-)
r
******************
Funziona perfettamente! :-))
Restituisce solo una riga di troppo (bisogna aggiustare l'inizio)
=SE(O(RIF.RIGA(A3)>_r*2 ...................... ecc.
Mò me la studio! :-))
Ciao,
E.
=SE(O(RIF.RIGA(A3)>_r*2;RIF.COLONNA(A1)-1>RIGHE(rng_r)/
2);NON.DISP();RIPETI(SE(RIF.COLONNA(A1)=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)))&";";VAL.PARI(RIF.RIGA(A1)))&INDICE(rng_r;
1+RESTO(_r+RIF.RIGA(A1)-
RIF.COLONNA(A1)-2;_r-1))&RIPETI( ";"&SE(RIF.COLONNA(A1)=1;INDICE(rng;
1);INDICE(rng_r;
1+RESTO(RIF.RIGA(A1)+RIF.COLONNA(A1)-3;_r-1)));VAL.DISPARI(RIF.RIGA(A1))))
ma molto più bella è la versione che restituisce una matrice e che va
ho aggiunto altri 3 nomi (per comodità)
Arr_rng=SCARTO($A$1;;;_r*2-2;_r/2)
_column=RIF.COLONNA(Arr_rng)
-row=RIF.RIGA(Array!Arr_rng)
=SE(VAL.PARI(_row);SE(_column=1;INDICE(rng;1);INDICE(rng_r;1+RESTO(_row
+_column-3;_r-1)))&";"&INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1));INDICE(rng_r;1+RESTO(_r+_row-
_column-2;_r-1))&";"&SE(_column=1;INDICE(rng;1);INDICE(rng_r;
1+RESTO(_row+_column-3;_r-1))))
ciao
r
che poi mantenendo solo il nome rng che definisce il range delle
squadre ... diventa un po' più complicata da leggere :-)

=SE(VAL.PARI(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2)));SE(RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))=1;INDICE(rng;1);INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))
+RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-3;RIGHE(rng)-1)))&";"&INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1));INDICE(SCARTO(rng;1;;RIGHE(rng)-1);
1+RESTO(RIGHE(rng)+RIF.RIGA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-RIF.COLONNA(SCARTO($A$1;;;RIGHE(rng)*2-2;RIGHE(rng)/
2))-2;RIGHE(rng)-1))&";"&SE(RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))=1;INDICE(rng;1);INDICE(SCARTO(rng;
1;;RIGHE(rng)-1);1+RESTO(RIF.RIGA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))+RIF.COLONNA(SCARTO($A
$1;;;RIGHE(rng)*2-2;RIGHE(rng)/2))-3;RIGHE(rng)-1))))

con excel 2007 va ...
riciao
r

acc...... questa è troppo lunga, mi esce dallo schermo e mi finisce sulla
tastiera. Spero non me l'abbia rovinata :-)
Questa è un'eruzione che neanche il Krakatoa.....
Vai VulcanRoby! per me sei ormai irraggiungibile :-(

PS: non hai più risposto alla mia mail in risposta alla tua sulle
combinazioni. Non l'hai vista?

ciao paoloard
http://www.riolab.org
r
2011-11-18 21:39:58 UTC
Permalink
Post by paoloard
acc...... questa è troppo lunga, mi esce dallo schermo e mi finisce sulla
tastiera. Spero non me l'abbia rovinata :-)
non chiedere i danni che chiamo il mio avvocato :-)
Post by paoloard
Questa è un'eruzione che neanche il Krakatoa.....
Vai VulcanRoby! per me sei ormai irraggiungibile :-(
beh grazie ragazzi ... ma come già detto a plinius non è così
complicata come sembra ... poi mi sa che c'è un sacco di roba in più
di quel che serve ... avevo usato 6 nomi e quando ho deciso di
toglierli ho solo sostituito di qui e di la ... mi sa che ci sono
molte ridondanze :-)
Post by paoloard
PS: non hai più risposto alla mia mail in risposta alla tua sulle
combinazioni. Non l'hai vista?
si si scusa ho letto ... vai pure aggiungi i file, se vuoi i commenti
devo ancora scriverli (anche sul mio sito) quindi devi avere
pazienza ... quindi per ora se vuoi aggiungi solo che c'è il file con
la soluzione per le combinazioni con ripetizione e altre soluzioni in
matrici ... insomma fai tu :-)
Post by paoloard
ciao paoloardhttp://www.riolab.org
ciao
r
r
2011-11-22 17:31:47 UTC
Permalink
Per approfondire:https://sites.google.com/site/e90e50/documento-plinius/quizzone-di-excel
continuiamo con il codice e con le cose abbastanza facili ...
ho provato a cercare ma non l'ho trovato in VBA quindi ...
si chiede di scrivere l'algoritmo di Bergerhttp://it.wikipedia.org/wiki/Algoritmo_di_Berger#cite_ref-0
voglio una funzione alla quale passare un range o una array contenente
il nome delle squadre e che restituisca una matrice di stringhe
composta da un numero di righe pari al numero di partite (numero di
squadre-1) e un numero di colonne pari al numero di squadre/2 ... ogni
stringa conterrà il nome delle 2 squadre separate da un trattino.
Saluti
r
ci ho scritto un paio di articoli :-)
https://sites.google.com/site/e90e50fx/home/girone-all-italiana-round-robin-tournament

ciao
r
Andrea.9
2011-11-22 21:39:30 UTC
Permalink
ci ho scritto un paio di articoli :-)https://sites.google.com/site/e90e50fx/home/girone-all-italiana-round...
ciao
r
bello anche il restiling del sito
ciao
andrea
eliano
2011-11-23 00:09:47 UTC
Permalink
Post by Andrea.9
ci ho scritto un paio di articoli :-)https://sites.google.com/site/e90e50fx/home/girone-all-italiana-round...
ciao
r
bello anche il restiling del sito
ciao
andrea
+1

Loading...