Condividi:        

funzione classifica avulsa

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

funzione classifica avulsa

Postdi Folle_tto » 25/09/15 17:20

premetto che non sono pratico di excel, e vorrei fare una classifica avulsa di un girone (tipo 6 squadre) dipendente da:
1 - punti;
2 - in caso di pari punti, gli scontri diretti tra le sole squadre interessate (classifica avulsa);
3 - in caso ancora di parità aggiungere la differenza reti nella classifica avulsa;
4 - infine la differenza reti totali.

Probabilmente per chi ha una panoramica ampia avrà più modi (tutti sicuramente non facili per me) ma io che non sono esperto gradirei la funzione da inserire direttamente all'interno della cella senza macro e senza altre cose complicate; accetto cmq ogni buon consiglio alla solo una combinazione di funzioni.

Immagine

Ringrazio chiunque possa aiutarmi
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Sponsor
 

Re: funzione classifica avulsa

Postdi Folle_tto » 25/09/15 17:43

L'immagine è tagliata ma se c s clicca sopra si espande!
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Folle_tto » 25/09/15 20:45

qui di seguito troverete il file:
se qualcuno potesse completarlo sarebbe il top:

http://www.filedropper.com/gestionetorneicongironida6
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 26/09/15 00:17

Avevamo fatto qualcosa per il basket qui: viewtopic.php?p=611999
Vedi se riesci ad sfruttare la "Function FullPoints" li' presentata.

Il tuo file contiene "contenuto illegibile", prova a pubblicarne un'altra versione in formato xls.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 27/09/15 05:34

questo è il file aggiornato, apribile con excel, ma sempre mancante della classifica avulsa;
vedere il primo foglio (dei 3 totali).

http://www.filedropper.com/gestionetorneicongironida6_1

se un'anima gentile lo implementasse sarebbe utile a molti
D
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 27/09/15 19:32

Dovendo fare i calcoli per la classifica sarebbe bene che spiegassi come si assegnano i punti nel gioco; altrimenti ti tocca aspettare uno che sappia di calcio balilla...

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 28/09/15 02:37

Sono 3 punti per le vittorie (si vince a 7) e 1 punto per il pareggio (6-6).
Come si vede nell' ultimo file (http://www.filedropper.com/gestionetorn ... ronida6_1) nel primo foglio "Gironi Fisso", in fondo alla pagina c'è da mettere il nome delle squadre nel corretto ordine di punteggio.
E vorrei che in caso di parità di punti tra due o piu squadre, si vedesse:
a) punti conseguiti negli incontri diretti fra tutte le squadre a pari punti “classifica avulsa;
b) la differenza tra reti segnate e subite nei medesimi incontri;
c) la differenza tra reti segnate e subite nell’intero Campionato;
d) del maggior numero di reti segnate nell’intero Campionato;
e) del sorteggio.
è una cosa piuttosto complessa da programmare ma essendo una modalità valida per la maggior parte degli sport credo sia facile da reperire. se qualcuno l'a reperisce e la sa "incorporare" nel file sarebbe un sogno!
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Folle_tto » 28/09/15 02:51

Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 29/09/15 00:54

Il file ultimo allegato "include contenuto illegibile", quindi faccio ancora riferimento al file xls pubblicato il 27 mattina.
Ho modificato la Function FullPoints a cui ti avevo indirizzato per adattarla al nuovo layout dati e al calcolo dei punteggi; diventa pertanto:
Codice: Seleziona tutto
Function FullPoints2(ByRef myTeams As Range, ByRef myCalend As Range) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104795 (base)
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105492 (questa vers)
'
Dim M1() As Double, M2(), M3(), M4(), wArr, RCal As Range
Dim HMTms As Long, HMCals As Long, I As Long, J As Long, LB2 As Integer, K As Long
Dim sHm As Integer, sAw As Integer, tHm As Integer, tAw As Integer
HMTms = myTeams.Rows.Count
HMCals = myCalend.Rows.Count
'
Set RCal = Application.Intersect(myCalend, myCalend.Parent.UsedRange)
'
'Debug.Print Timer
'
ReDim M1(1 To HMTms)
wArr = RCal.Value
'sHm = 0: sAw = 1: tHm = 2: tAw = 4      'mappa di tabella Calendario e risultati
sHm = 4: sAw = 6: tHm = 0: tAw = 7      'mappa di tabella Calendario e risultati; s=Score, t=Team
'calcolo punti per vittoria e delta punti generale (/100000000)
LB2 = LBound(wArr, 2)
For I = 1 To HMTms
    For J = LBound(wArr, 1) To UBound(wArr, 1)
        If wArr(J, LB2 + tHm) = myTeams.Cells(I, 1).Value Then
            If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 3
            If wArr(J, LB2 + sHm) = wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 1
           
            M1(I) = M1(I) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 1000000
        End If
        If wArr(J, LB2 + tAw) = myTeams.Cells(I, 1).Value Then
            If wArr(J, LB2 + sHm) < wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 3
            If wArr(J, LB2 + sHm) = wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 1
            M1(I) = M1(I) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 1000000
        End If
       
    Next J
Next I
'aggiungi VITTORIE (/100) e delta punti (/10000) in scontri diretti
For I = 1 To HMTms - 1
    For K = I + 1 To HMTms
        If Round(M1(I), 0) = Round(M1(K), 0) Then
            For J = LBound(wArr, 1) To UBound(wArr, 1)
'Debug.Print I & " > " & K & " > " & J
                If wArr(J, LB2 + tHm) = myTeams.Cells(I, 1).Value And wArr(J, LB2 + tAw) = myTeams.Cells(K, 1).Value Then
                    '(a) Delta punti dirette
                    M1(I) = M1(I) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    M1(K) = M1(K) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    '(b) Vittorie dirette
                    If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then
                        M1(I) = M1(I) + 0.01
                    Else
                        M1(K) = M1(K) + 0.01
                    End If
                End If
                If wArr(J, LB2 + tHm) = myTeams.Cells(K, 1).Value And wArr(J, LB2 + tAw) = myTeams.Cells(I, 1).Value Then
                    '(a)
                    M1(I) = M1(I) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    M1(K) = M1(K) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    '(b)
                    If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then
                        M1(K) = M1(K) + 0.01
                    Else
                        M1(I) = M1(I) + 0.01
                    End If
                End If
            Next J
        End If
    Next K
Next I
'
FullPoints2 = Application.WorksheetFunction.Transpose(M1)
DoEvents
End Function
Inseriscila nel tuo elenco macro: partendo da excel premi Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.

Poi vai sulle tabelle "Classifica Girone", ad esempio per quella in B48:N54 vai in N49 e usi la formula
Codice: Seleziona tutto
=INDICE(FullPoints2($B$49:$B$54;$C$29:$J$43);RIF.RIGA(A1))

Poi copi la formula verso il basso per le altre squadre (vedi Nota*)
$B$49:$B$54 e' l'elenco squadre, $C$29:$J$43 e' la tabella dei risultati, RIF.RIGA(A1) serve per estrarre il dato della prima squadra; copiando verso il basso i riferimenti verranno automaticamente adeguati.

Nota*: si puo' anche usare la notazione "a matrice" per ottenere tutti i risultati:
Selezioni l'area N49:N54 e inserisci la formula
Codice: Seleziona tutto
=FullPoints2($B$49:$B$54;$C$29:$J$43)
da confermare pero' con Contr-Maiusc-Enter

Il campo "Punteggio" va formattato come Numero con 0 decimali. Il Rango invece terra' conto anche dei decimali.
Non so cosa devi fare sul file dopo il calcolo dei punteggi, ma se usi il valore di questi punteggi in altre formule successive, allora dovrai usare ARROTONDA(IlPunteggio;0) invece del solo IlPunteggio.

Non so quale e' la compatibilita' tra quanto ti ho proposto e OpenOffice, se usi OpnOffice.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 29/09/15 14:36

grazie per il tempo dedicatomi ma non riesco proprio a utilizzare quella funzione fullpoints. Sbagliero' forse io!!! Fatto tentativi ma ogni volta mi scombussola le altre macro e non tonna indietro. Risultato è che sto combinando + danni irrimediabili che altro!
Eppure dicevano che i 2 programmi Calc di open office e excel di windows erano completamente compatibili. Forse lo sono ma non si puo' comunicare qui con 2 piattaforme differenti, soprattutto se sono alle prime armi.
grazie
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Folle_tto » 30/09/15 03:58

qui c'è il file definitivo che non è di certo il massimo ma puo' essere usato ( e lo usero' cosi, aiutandomi con la compilazione manuale di volta in volta). Se qualcuno ha le competenze per raffinarlo lo invito a rimetterlo in linea per essere usato da me e altri.
Ciao

http://www.filedropper.com/gestionetorneicon2gironida6
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 30/09/15 21:59

Questo e' il file xls che avevi allegato con la funzione fullpoints utilizzata per calcolare il punteggio integrato con i dati della classifica avulsa.
https://www.dropbox.com/s/4ibop1vmowf7c ... 7.xls?dl=0

Il punteggi del Girone 1 sono calcolati con la funzione FullPoints in A49:A54, la relativa posizione in classifica (rango) e' calcolata in O49:O54; ho lasciato la tua classifica in N49:N54 per confrontarla con la mia. Le differenze clamorose sono legate probbilmente alla composizione della Partita1, dove Io & PincoPallino giocano 2 volte e Batman & Superman nessuna.
Ho lasciato la mia classifica visualizzata con i decimali per vedere come i componenti della classifca avulsa intervengono per variare, con diverso peso, il punteggio finale; per essere fruita regolarmente andrebbe invece visualizzata senza decimali.
In base a questi dati ho creato in J59 e sottostanti la classifica ordinata, con la formula
Codice: Seleziona tutto
=GRANDE($A$49:$A$54;RIF.RIGA(A1))
che ho poi copiato verso il basso.
Le relative squadre sono state posizionate in K59 e sottostanti con la formula
Codice: Seleziona tutto
=INDICE($B$49:$B$54;CONFRONTA(J59;$A$49:$A$54;0))
che ho poi copiato verso il basso.

Un lavoro analogo e' da fare sul Girone2, ma spero che con l'esempio pubblicato sia piu' chiaro; soprattutto spero che funzioni anche su OpenOffice.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 01/10/15 02:52

su open office non funziona infatti! :(
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Folle_tto » 01/10/15 16:51

Mi sono procurato una vecchia versione di excel e vorrei sapere come correggere l'errore che Anthony ha trovato nel girone 1 ("...Io & PincoPallino giocano 2 volte e Batman & Superman nessuna...") e ho messo quindi Batman e superman in J31.

A quanto pare temo ora d dove aggiustare in codice FullPoints! E' cosi?
vedere qui:
http://www.filedropper.com/torneo12squadre
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 03/10/15 00:27

La funzione FullPoints la puoi usare nelle tue formule con la sintassi che ti ho descritto e che ho anche usato nel file che ho pubblicato; non c'e' bisogno di modifiche al codice fintanto che il layout della tabella Risultati rimane quello che e' (personalmente depreco l'uso di celle unite, ma il codice ora e' allineato).
Nel tuo ultimo allegato ci sono ancora discrepanze tra i punteggi calcolati col tuo metodo e con la FullPoints, e mi pare che abbia ancora ragione la formula FullPoints, che lavora sull'intera tabella risultati e non su singole partite.
Non ho capito perche' non sei ripartito dal mio file, che ti popola anche la tabella Classifca Girone 1; per il Girone2 non dovrebbe essere difficile replicare quanto descritto nel mio messaggio precedente.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 03/10/15 05:28

la funzione mi pare che restituisca valori errati!
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 03/10/15 13:46

la funzione mi pare che restituisca valori errati!
Per esempio, facendo riferimento al file da me allegato o all'ultimo tuo?
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: funzione classifica avulsa

Postdi Folle_tto » 03/10/15 14:46

entrambi
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Folle_tto » 03/10/15 14:54

Se t va di rimetterci mano ti prego fallo qui in quest'ultimo file che allego in quanto è finito e mi manca solo questa classifica avulsa fatidica.
http://www.filedropper.com/torneo12squadre_1
Folle_tto
Utente Junior
 
Post: 19
Iscritto il: 29/11/07 20:46

Re: funzione classifica avulsa

Postdi Anthony47 » 03/10/15 23:54

L' ultimo file pubblicato e' vuoto, non ho idea di come si usi; pero' mi ha fatto capire che le tabelle Risultati Partite Girone x vengono compilate parzialmente anche prima che le partite siano effettivamente giocate, e questo falsava il calcolo della classifica temporanea (prima del completamento di tutte le partite).
Ho pertanto rivisto il codice della FullPoints per rendere i punti di classifica anche prima che tutte le partite siano giocate; il nuovo codice va a sostituire completamente quello vecchio:
Codice: Seleziona tutto
Function FullPoints2(ByRef myTeams As Range, ByRef myCalend As Range) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104795 (base)
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105492 (questa vers) - B51003
'
Dim M1() As Double, M2(), M3(), M4(), wArr, RCal As Range
Dim HMTms As Long, HMCals As Long, I As Long, J As Long, LB2 As Integer, K As Long
Dim sHm As Integer, sAw As Integer, tHm As Integer, tAw As Integer
HMTms = myTeams.Rows.Count
HMCals = myCalend.Rows.Count
'
Set RCal = Application.Intersect(myCalend, myCalend.Parent.UsedRange)
'
'Debug.Print Timer
'
ReDim M1(1 To HMTms)
wArr = RCal.Value
'sHm = 0: sAw = 1: tHm = 2: tAw = 4      'mappa di tabella Calendario e risultati
sHm = 4: sAw = 6: tHm = 0: tAw = 7      'mappa di tabella Calendario e risultati; s=Score, t=Team
'calcolo punti per vittoria e delta punti generale (/100000000)
LB2 = LBound(wArr, 2)
For I = 1 To HMTms
    For J = LBound(wArr, 1) To UBound(wArr, 1)
        If wArr(J, LB2 + tHm) = myTeams.Cells(I, 1).Value Then
            If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 3
            If wArr(J, LB2 + sHm) = wArr(J, LB2 + sAw) And wArr(J, LB2 + sHm) = 6 Then M1(I) = M1(I) + 1
           
            M1(I) = M1(I) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 1000000
        End If
        If wArr(J, LB2 + tAw) = myTeams.Cells(I, 1).Value Then
            If wArr(J, LB2 + sHm) < wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 3
            If wArr(J, LB2 + sHm) = wArr(J, LB2 + sAw) And wArr(J, LB2 + sHm) = 6 Then M1(I) = M1(I) + 1
            M1(I) = M1(I) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 1000000
        End If
       
    Next J
Next I
'aggiungi VITTORIE (/100) e delta punti (/10000) in scontri diretti
For I = 1 To HMTms - 1
    For K = I + 1 To HMTms
        If Round(M1(I), 0) = Round(M1(K), 0) Then
            For J = LBound(wArr, 1) To UBound(wArr, 1)
'Debug.Print I & " > " & K & " > " & J
                If wArr(J, LB2 + tHm) = myTeams.Cells(I, 1).Value And wArr(J, LB2 + tAw) = myTeams.Cells(K, 1).Value Then
                    '(a) Delta punti dirette
                    M1(I) = M1(I) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    M1(K) = M1(K) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    '(b) Vittorie dirette
                    If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then
                        M1(I) = M1(I) + 0.01
                    Else
                        If wArr(J, LB2 + sHm) < wArr(J, LB2 + sAw) Then M1(K) = M1(K) + 0.01   '°
                    End If
                End If
                If wArr(J, LB2 + tHm) = myTeams.Cells(K, 1).Value And wArr(J, LB2 + tAw) = myTeams.Cells(I, 1).Value Then
                    '(a)
                    M1(I) = M1(I) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    M1(K) = M1(K) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 10000
                    '(b)
                    If wArr(J, LB2 + sHm) > wArr(J, LB2 + sAw) Then
                        M1(K) = M1(K) + 0.01
                    Else
                        If wArr(J, LB2 + sHm) < wArr(J, LB2 + sAw) Then M1(I) = M1(I) + 0.01
                    End If
                End If
            Next J
        End If
    Next K
Next I
'
FullPoints2 = Application.WorksheetFunction.Transpose(M1)
DoEvents
End Function
L'uso all'interno delle formule rimane lo stesso che per il vecchio codice
Ho aggiornato il codice anche sul file precedentemente pubblicato su Dropbox.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "funzione classifica avulsa":


Chi c’è in linea

Visitano il forum: Nessuno e 73 ospiti

cron