Condividi:        

Excel e 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

Excel e classifica avulsa

Postdi alfaking78 » 08/06/15 10:35

ciao a tutti
è da un pò che gestisco diversi tornei di basket con dei fogli excel.
inserisco i risultati in un foglio chiamato CALENDARIO
e poi ho un altro foglio (stesso file ovviamente) in cui ho la classifica.
tramite una banalissima macro poi ordino la classifica in base al punteggio (2 punti per la vittoria, 0 per la sconfitta).
il problema è che quando 2 (o più) squadre sono a pari punti, bisogna considerare la classifica avulsa, ovvero
-vittorie negli scontri diretti
-differenza canestri negli scontri diretti
-differenza canestri totale
mi sapete dare una mano su come gestire questo tipo di classifica ?
in pratica, la macro dovrebbe
1) estrapolare le squadre a pari punti
2) controllare gli scontri diretti e fare una miniclassifica solo tra quelle squadre a pari punti
3) in caso di ulteriori parità controllare la differenza canestri in quelle partite
4) in caso di tutto pari controllare la differenza canestri totale
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Sponsor
 

Re: Excel e classifica avulsa

Postdi Anthony47 » 08/06/15 22:34

Ciao alfaking78 , benvenuto nel forum.
Avevamo fatto qualcosa per l' utente giangi82; vedi viewtopic.php?f=26&t=104159#p607221
Ovviamente e' solo un esempio per dire "si puo' fare", ma per i dettagli serve il tuo file, contenente incontri, risultati, classifica.
Per allegare un file vedi viewtopic.php?f=26&t=103893&p=605487#p605487

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

Re: Excel e classifica avulsa

Postdi alfaking78 » 15/06/15 17:12

Ciao e grazie della risposta.
ho visto il precedente topic, ma non fa proprio al mio caso...

questo è il mio file, generalizzato il più possibile
https://dl.dropboxusercontent.com/u/560 ... ifica.xlsm

ci sono 3 esempi che calzano a pennello, divisi in 3 fogli della stessa cartella di lavoro.
2° foglio -> girone B -> tutto ok, ordinato bene da macro perchè ogni squadra ha dei punteggi diversi

3° foglio -> girone C -> 2 squadre a pari punti, bisogna valutare gli scontri diretti tra le 2 squadre

1° foglio -> girone A -> 3 squadre a pari punti, bisogna valutare prima gli scontri diretti e poi la differenza punti negli scontri diretti (come se fosse un campionato a 3 squadre).
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Re: Excel e classifica avulsa

Postdi Anthony47 » 16/06/15 01:44

Anche in questo caso meglio ricorrere a una userfunction, che possa calcolare il punteggio integrandolo con gli elementi che servono.
Il codice della userfunction:
Codice: Seleziona tutto
Function FullPoints(ByRef myTeams As Range, ByRef myCalend As Range) As Variant
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104795
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
'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) + 2
            M1(I) = M1(I) + (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 100000000
        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) + 2
            M1(I) = M1(I) - (wArr(J, LB2 + sHm) - wArr(J, LB2 + sAw)) / 100000000
        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
'
FullPoints = Application.WorksheetFunction.Transpose(M1)
DoEvents
End Function
Poi in C4 del primo foglio calcoli il punteggio della squadra con la formula
Codice: Seleziona tutto
=INDICE(FullPoints($B$4:$B$9;Calendario!$I:$M);RIF.RIGA(A1))
Poi copi la formula verso il basso.
Nella formula, $B$4:$B$9 e' l' elenco delle squadre da valutare e Calendario!$I:$M) e' il riferimento alle colonne in cui si trovano risultati e squadre (la parte elaborata con le tue formule).

Il questo modo il punteggio sara' calcolato secondo le vittorie totali, piu' un fattore per gli scontri tra i pari punto, piu' un fattore piu' basso del delta punti sugli scontri tra i pari punto, piu' un fattore piu' basso per il delta pnti generale.
Dopo che hai collaudato il comportamento di quanto descritto, per non vedere i decimali formatterai le celle eliminando i decimali.

Riguardando le formule in Calendario non capisco le formule in colonna J e colonna M; io in J2 inserirei
Codice: Seleziona tutto
=SOSTITUISCI(G2;I2&"-";"")
da copiare poi verso il basso
E in M2 analogamente
Codice: Seleziona tutto
=SOSTITUISCI(A2;K2&"-";"")


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

Re: Excel e classifica avulsa

Postdi alfaking78 » 16/06/15 08:31

Anthony47 ha scritto:Riguardando le formule in Calendario non capisco le formule in colonna J e colonna M; io in J2 inserirei
Codice: Seleziona tutto
=SOSTITUISCI(G2;I2&"-";"")
da copiare poi verso il basso
E in M2 analogamente
Codice: Seleziona tutto
=SOSTITUISCI(A2;K2&"-";"")


Ciao


sì, fanno la stessa cosa e le tue sono decisamente più semplici...
per la userfunction grazie, la provo subito.
--edit
ok, l'ho provata, e funziona, salvo far uscire dei decimali ma non è un problema.
siccome è la prima volta che uso delle userfunction, puoi perdere 5 minuti a spiegarmi i singoli passaggi ?
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Re: Excel e classifica avulsa

Postdi Anthony47 » 18/06/15 21:24

Ho utilizzato i decimali per consentire il facile ordinamento successivo; se usi la classifica anche per altri calcoli (oltre che visualizzarla), allora dovrai far riferimento alle cele della classifica con
Codice: Seleziona tutto
ARROTONDA(LaCella;0)


Se hai chiesto di conoscere come lavora la Function allora essa:
-copia in wArr il Calendario e i risultati per ridurre l'accesso al foglio Excel
-per ogni team, calcola nell' array M1 i punti per la vittoria e per la quota "differenza punti" (dividendola per 100000000, per dargli un peso inferiore ad altri valori)
-poi per ogni team cerca quelli che hanno pari punteggio, aggiunge 0.01 per ogni vittoria diretta e "differenza punti" /10000.
Ne risulta che le vittorie dirette hanno un peso 1/100, la differenza punti negli scontri diretti hanno peso 1/10000, la differenza punti totale ha un peso 1/100000000.

Altri dettagli, se hai una certa conoscenza di vba non farai fatica a decodificarli nella macro; se invece non ce l'hai allora nessuna ulteriore descrizione sarebbe di qualche utilita'.

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

Re: Excel e classifica avulsa

Postdi alfaking78 » 07/07/15 08:38

grazie della spiegazione, e scusa il ritardo nella risposta ma non mi arrivano le mail di notifica....
quello che non capisco è come mai nel foglio 2, dove non ci sono squadre a pari punti e quindi non ci dovrebbero essere calcoli diversi dai soliti, in realtà ci sono i decimali su ogni punteggio in classifica... da cosa può dipendere ?
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Re: Excel e classifica avulsa

Postdi Anthony47 » 09/07/15 01:42

alfaking78 ha scritto: come mai nel foglio 2, dove non ci sono squadre a pari punti e quindi non ci dovrebbero essere calcoli diversi dai soliti, in realtà ci sono i decimali su ogni punteggio in classifica... da cosa può dipendere ?

Anthony ha scritto:Il questo modo il punteggio sara' calcolato secondo le vittorie totali, piu' un fattore per gli scontri tra i pari punto, piu' un fattore piu' basso del delta punti sugli scontri tra i pari punto, piu' un fattore piu' basso per il delta pnti generale.
Cioe' la quota dovuta alla differenza punti e' calcolata sempre, con un peso piu' basso di tutti gli altri calcoli che saranno fatti solo tra i pari punti.

Formattando l'area "senza decimali" il problema sara' risolto.

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

Re: Excel e classifica avulsa

Postdi alfaking78 » 09/07/15 09:35

wow, mi era sfuggito questo passaggio.
grazie mille della spiegazione!
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Re: Excel e classifica avulsa

Postdi PaoloTSI » 07/03/17 13:46

Salve anche io sto creando un file di excel per gestire un campionato di basket.
Tutto è andato bene per organizzare classifica ecc. ecc. fino alla "maledetta" classifica avulsa
praticamente in caso di squadre a parimerito si deve prendere in considerazione alla fine del campionato
1) scontri diretti
2) differenza canestri negli scontri diretti
3) differenza canestri totale
quindi è come se per le squadre a pari punti si debba creare una sottoclassifica.
sono praticamente acerbo in programmazione VBA quindi vi chiederei il vostro aiuto qui c'è il file che ho già creato

https://www.dropbox.com/s/rbkjxjut4ojx8cl/CAMPIONATO_BASKET_15SQUADRE.xlsx?dl=0

grazie attendo vostre risposte
PaoloTSI
Newbie
 
Post: 1
Iscritto il: 07/03/17 13:30

Re: Excel e classifica avulsa

Postdi alfaking78 » 07/03/17 15:07

io ho risolto un problema identico al tuo, ma il mio file excel è molto diverso dal tuo.
te lo posto appena lo ritrovo
alfaking78
Newbie
 
Post: 6
Iscritto il: 08/06/15 09:52

Re: Excel e classifica avulsa

Postdi Anthony47 » 08/03/17 12:58

Penso che la Function FullPoints (descritta in questo messaggio: viewtopic.php?f=26&t=104795&p=635244#p612013) sia utilizzabile anche da paolotsi con questa modifica:
Sostituire sHm = 0: sAw = 1: tHm = 2: tAw = 4 'mappa di tabella Calendario e risultati
Con
Codice: Seleziona tutto
sHm = 1: sAw = 3: tHm = 0: tAw = 2      'mappa di tabella Calendario e risultati


Poi il calcolo del punteggio della prima squadra sara' fatto con
Codice: Seleziona tutto
=INDICE(FullPoints(SQUADRE!$B$3:$B$17;CALENDARIO!$C1:$F1000);RIF.RIGA(SQUADRE!A1))

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


Torna a Applicazioni Office Windows


Topic correlati a "Excel e classifica avulsa":


Chi c’è in linea

Visitano il forum: Ricky0185 e 57 ospiti