Post by rPost by rPost by rPost by rPost by pliniusPost by pliniusPost by rma 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 rQueste 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
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.