Quando suggerisco qualcosa cerco di suggerire la cosa piu' in linea con le capacita' di manutenzione dell' utente; in questo caso evidentemente siamo oltre.
Spendero' quindi un ulteriore slot di tempo per descrivere come puoi fare tutti gli ampliamenti che ti servono.
La prima parte della macro e' orientata a scansionare tutti i nominativi del foglio Riepilogo [For I = 2 To Cells(etc etc)]; per ogni nominativo si scansionano i fogli alla ricerca di quelli che si chiamano "CAM...."[ For J = 1 To Worksheets.Count]; all' interno di ogni foglio si scansionano i nominativi in colonna D [For K = 1 To .Cells(Rows.Count,etc etc)] alla ricerca di quello che corrisponde al nominativo in esame su foglio Riepilogo [If UCase(.Cells(K, 4).Value) = UCase(Cells(I, 2).Value) Then].
Dopo l' istruzione
If UCase(.Cells(K, 4).Value) = UCase(Cells(I, 2).Value) Then siamo nella situazione che il moninativo identificato dalla variabile K corrisponde a quello su riga I di Riepilogo; quindi e' sui dati di questa riga che si devono fare i calcoli voluti.
Io avevo inserito il calcolo della media dei voti, calcolando la somma dei voti validi e il loro numero.
Ora tu vuoi ripetere il calcolo della media delle medie (colonna S di CAMxxx), come avevamo fatto per la media dei punteggi, che era stato gestito con questo codice:
- Codice: Seleziona tutto
If .Cells(K, "G").Value > 0 Then
'numero voti e somma voti
NumVoti = NumVoti + 1
SumVoti = SumVoti + .Cells(K, "G").Value
End If
Il nuovo calcolo lo gestiremo allo stesso modo:
- Codice: Seleziona tutto
'
If .Cells(K, "S").Value > 0 Then
'numero medie e somma medie
NumMEdia = NumMEdia + 1
SumMEdia = SumMEdia + .Cells(K, "S").Value
End If
'spazio per gli altri calcoli
Queste istruzioni vanno sotto le istruzioni precedenti. Cambiano solo il nome delle variabili in cui facciamo i conteggi e il numero di colonna in cui leggere i dati.
OVVIAMENTE finiti i calcoli (cioe' finito il giro in tutti i fogli CAMxx) il valore calcolato va inserito su foglio Riepilogo. Avevamo usato:
- Codice: Seleziona tutto
'Voti e media voti:
Cells(I, 3) = NumVoti
If NumVoti > 0 Then Cells(I, 4) = SumVoti / NumVoti
Aggiungeremo per scrivere la media delle medie
- Codice: Seleziona tutto
'media delle medie in colonna 16=P
If NumMEdia > 0 Then Cells(I, 16) = SumMEdia / NumMEdia
'Spazio per altri risultati:
OVVIAMENTE2 le nuove variabili vanno azzerate a inizio ciclo; avevamo usato
- Codice: Seleziona tutto
SumVoti = 0: NumVoti = 0
aggiungeremo
- Codice: Seleziona tutto
SumMEdia = 0: NumMEdia = 0
INFINE e' opportuno che le nuove variabili vengano dichiarate in testa al modulo; avevamo usato
- Codice: Seleziona tutto
Dim . . . . . , NumVoti As Long, SumVoti As Single
aggiungeremo
- Codice: Seleziona tutto
Dim NumMEdia As Long, SumMEdia As Single
Questo e' tutto...
Inserisco l' intera macro, inserendo tutte le istruzioni descritte sopra, con un paio di commenti aggiuntivi e con la rimozione di un paio di righe che erano servite solo durante il debug.
- Codice: Seleziona tutto
Sub contisub2()
Dim I As Long, J As Long, K As Long, NumVoti As Long, SumVoti As Single
Dim NumMEdia As Long, SumMEdia As Single
Dim myName As String
'I = Cells(1, 5)
'If Cells(1, 5).Value = 0 Then Beep
'Scan nomi su Riepilogo:
For I = 2 To Cells(Rows.Count, "B").End(xlUp).Row
If Cells(I, 2).Value <> "" Then
myName = Cells(I, 2)
SumVoti = 0: NumVoti = 0
SumMEdia = 0: NumMEdia = 0
'Scan Fogli:
For J = 1 To Worksheets.Count
If Left(Sheets(J).Name, 3) = "CAM" Then
'su ogni foglio "CAMxx"
With Sheets(J)
For K = 1 To .Cells(Rows.Count, 4).End(xlUp).Row
If UCase(.Cells(K, 4).Value) = UCase(Cells(I, 2).Value) Then
'Calcoli relativi ai singoli atleti
If .Cells(K, "G").Value > 0 Then
'numero voti e somma voti
NumVoti = NumVoti + 1
SumVoti = SumVoti + .Cells(K, "G").Value
End If
'
If .Cells(K, "S").Value > 0 Then
'numero medie e somma medie
NumMEdia = NumMEdia + 1
SumMEdia = SumMEdia + .Cells(K, "S").Value
End If
'spazio per gli altri calcoli
'..
'..
'..
End If
Next K
End With
End If
Next J
'Scrittura dei dati calcolati su foglio Riepilogo
'Voti e media voti:
Cells(I, 3) = NumVoti
If NumVoti > 0 Then Cells(I, 4) = SumVoti / NumVoti
'media delle medie in colonna 16=P
If NumMEdia > 0 Then Cells(I, 16) = SumMEdia / NumMEdia
'Spazio per altri risultati:
'..
'..
End If
Next I
End Sub
Ciao