Classifica dei primi 10
Uso delle funzioni MAX e GRANDE abbinate a codice vba
per la ricerca dei 10 valori più alti e relativi indici.
In quest'esempio, esaminiamo come poter analizzare una tabella dati dove
figurano i nomi degli agenti di un'ipotetica ditta e i relativi punteggi in
un periodo determinato di tempo, per ricavare la Classifica dei primi 10,
nell'arco di tutto il periodo.
Questo è un esempio che si presta per ottenere numerose varianti nella
ricerca di una classifica con evidenzazione degli agenti e relativi
punteggi. Le funzioni usate non sono difficili da capire: la funzione MAX
cerca il maggior valore presente in un elenco di dati numerici, e lo riporta
nella cella dove risiede la formula. La funzione GRANDE è simile alla
precedente, ma offre la possibilità di reperire la graduatoria di un valore
in un insieme di dati, variando il parametro di ricerca: vediamo la sintassi
delle due funzioni:
-
MAX(num1;num2;...) es.: =MAX(A2:A6)
Riporta il numero più grande tra quelli indicati nel range
-
Se un argomento è costituito da una matrice o da un riferimento, verranno
utilizzati soltanto i numeri presenti nella matrice o nel riferimento,
mentre le celle vuote, i valori logici o il testo verranno ignorati. Se non
si desidera che i valori logici e il testo vengano ignorati, utilizzare la
funzione MAX.VALORI al posto di questa funzione
-
GRANDE(matrice;k)
Matrice è la
matrice o l'intervallo di
dati di cui si desidera determinare il k-esimo valore più grande.
K è la posizione nella matrice o nell'intervallo di celle dei dati da
restituire (partendo dal più grande).
es.: =GRANDE(A2:B6;3) darà il 3° numero
più grande tra i numeri presenti nel range.
Se una matrice non contiene alcun dato, GRANDE
restituirà il valore di errore #NUM!.Se una
matrice contiene
più valori uguali, verrà considerato comunque il valore che si trova nella k
esima posizione tra i valori uguali. Es.. =GRANDE(A1:A10;7) ed i valori nel
range sono 5,3,6,3,2,1,4,8,9,3 verrà considerato il secondo 3 (7° posizione
a parità di valore).
Per le altre caratteristiche delle funzioni vi rimando alla guida in linea
(da consultare).
Questa è l'immagine della tabella:
La cella A22 porta la funzione =MAX(B3:H19) e
quindi il valore 1° classificato, le altre celle fino alla J22, sulla stessa
riga, portano la funzione =GRANDE(B3:H19;2)
fino a =GRANDE(B3:H19;10) che porterà il 10°
classificato. La riga 23 porta solo i colori di identificazione classifica,
con all'interno il codice del colore, che serve (ColorIndex) nelle
istruzioni Vba per colorare la cella che ospita il valore relativo alla
graduatoria. La riga 24 invece ospita il nome dell'agente che ha realizzato
il relativo punteggio presente due righe sopra. Questo nome viene "pescato"
dal codice, che dopo aver colorato la cella relativa alla classifica
punteggio, si sposta a inizio stessa riga, copia il nome, e lo "scarica"
nella rispettiva cella della riga 24. Il pulsante per attivare la routine ha
una doppia funzione, serve per attivare la routine e per azzerare i valori;
funziona come interruttore. Vediamo la routine:
Private
Sub CommandButton1_Click()
If CommandButton1.Caption = "Mostra" Then
CommandButton1.Caption = "Azzera"
Application.ScreenUpdating = False 'evita
il saltellamento sul foglio
'dichiarazioni delle variabili
Dim CL As Object
x = Range("A22").Value 'assegnazioni dei
valori alle variabili (celle con funzioni)
y = Range("B22").Value
w = Range("C22").Value
z = Range("D22").Value
t = Range("E22").Value
u = Range("F22").Value
m = Range("G22").Value
p = Range("H22").Value
a = Range("I22").Value
j = Range("J22").Value
'per
ogni cella (CL) nel range B3:H19, se il valore della cella è uguale alla
variabile (x) indicata, selezioni la 'cella, la colori, ti sposti 'alla
cella di inizio riga (colonna A), copi il valore (nome agente),
selezioni la cella di 'destinazione (A24) e incolli il nom. Quindi la
'routine continua per le rimanenti variabili (ElseIf).
For Each CL In Range("B3:H19")
If CL.Value = x Then
CL.Select
CL.Interior.ColorIndex = 6
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("A24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = y Then
CL.Select
CL.Interior.ColorIndex = 40
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("B24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = w Then
CL.Select
CL.Interior.ColorIndex = 38
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("C24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = z Then
CL.Select
CL.Interior.ColorIndex = 43
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("D24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = t Then
CL.Select
CL.Interior.ColorIndex = 4
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("E24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = u Then
CL.Select
CL.Interior.ColorIndex = 35
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("F24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = m Then
CL.Select
CL.Interior.ColorIndex = 15
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("G24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = p Then
CL.Select
CL.Interior.ColorIndex = 34
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("H24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = a Then
CL.Select
CL.Interior.ColorIndex = 8
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("I24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
ElseIf CL.Value = j Then
CL.Select
CL.Interior.ColorIndex = 3
With ActiveCell
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Range("J24").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
End With
End If
Next
Application.CutCopyMode = False
'fine ciclo ricerche
Else
'questa è l'istruzione per togliere i
colori e pulire le celle riga 24, e rinomina la Caption del
commandbutton per 'reinizzializzare una 'nuova ricerca
CommandButton1.Caption = "Mostra"
Range("B3:H19").Interior.ColorIndex = xlNone
Range("B24:J24").ClearContents
End If
End Sub
|
|