Questo articolo segue al precedente “Classifica tramite VBA” di cui è un evoluzione.
L’esigenza del nostro lettore era quella di avere la classifica per categoria
in un’unica colonna, dal momento che dovrà gestire fino a 10 categorie contemporaneamente.
Ho modificato quindi il codice permettendo di gestire N categorie contemporaneamente
senza colonne dedicate.
Ecco la versione aggiornata del file:
Riporto il codice commentato :
Private Sub Worksheet_BeforedoubleClick(ByVal Target As Range, Cancel As Boolean) 'individuo ultima riga non vuota Sheet1.Select Last_Row = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row If Not Intersect(Range(Cells(3, 3), Cells(Last_Row, 3)), Target) Is Nothing Then If Cells(Target.Row, 2) = "" Then 'inserisco l'ordine nella Classifica Generale Cells(Target.Row, 1) = Application.Max(Range("A:A")) + 1 'Per il concorrente selezionato individuo il numero di partecipanti 'appartenenti alla stessa categoria MaxCat = Application.CountIf(Sheet1.Range("D:D"), Sheet1.Cells(Target.Row, 4)) 'Riposto la categoria del concorrente selezionato in una colonna d'appoggio Cells(Target.Row, 5) = Cells(Target.Row, 4) 'Determino quanti partecipanti della categoria del concorrente selezionato sono arrivati NowInCat = Application.CountIf(Sheet1.Range("E:E"), Sheet1.Cells(Target.Row, 5)) If NowInCat = 0 Then 'Se il numero di cui sopra è zero Cells(Target.Row, 2) = Cells(Target.Row, 5) & "_1" 'il concorrente selezionato è il primo arrivato 'e quindi riporto categoria e Nr1 Else 'Se il numero di cui sopra maggiore di zero Cells(Target.Row, 2) = Cells(Target.Row, 5) & "_" & MaxCat - (MaxCat - NowInCat) 'l'ordine di arrivo è dato dal numero di partecipanti appartenenti alla stessa categoria ' meno il numero di partecipanti appartenenti alla stessa categoria da cui sottraggo 'il numero dei gia' arrivati End If End If End If 'Identifico quanti concorrenti sono arrivati (-1 serve per non conteggiare l'intestazione) nrGenerale = Application.CountA(Sheet1.Range("A:A")) - 1 'se i concorrenti arrivati sono pari al numero dell'ultima riga non vuota '(-2 serve per non conteggiare l'intestazione e la prima riga che è vuota) If nrGenerale = Last_Row - 2 Then MsgBox "Gara terminata!", vbInformation 'allora la gara è terminata Range(Cells(3, 5), Cells(Last_Row, 5)).ClearContents Range("A2").Select End If Cancel = True End Sub
Riccardo Vincenti
The following two tabs change content below.
Riccardo Vincenti
Ultimi post di Riccardo Vincenti (vedi tutti)
- 073. Duplicare righe excel modificando il contenuto - 6 Ottobre 2017
- 072. Estrazione numeri casuali - 6 Ottobre 2017
- 071. Estrazione casuale valori da un elenco - 5 Ottobre 2017
- 070. Contare dati univoci senza Pivot - 21 Settembre 2017
- 069. Aggiungere intervalli ad una data: Date Add in Excel - 21 Settembre 2017