Subtotali per mese con un semplice ma utile trucco
Prima di procedere, segnalo un utile articolo Microsoft che descrive come velocizzare WINDOWS 7, semplicemente sfruttando una chiavetta USB di adeguata capacità:
http://www.microsoft.com/italy/pmi/comefare/tecnologia/readyboost/default.mspx
Ma torniamo a bomba, con il tema del titolo.
Si abbia un intervallo database del tipo seguente:
|
|
A |
B |
C |
D |
E |
F |
G |
|
1 |
DATA |
TIPO |
QUANT |
PREZZO |
RICAVO |
|
|
|
2 |
04/01/2010 |
AA01 |
21,00 |
10 |
€ 210,00 |
|
|
|
3 |
13/01/2010 |
AA02 |
15,00 |
15 |
€ 225,00 |
|
|
|
4 |
14/01/2010 |
AA01 |
42,00 |
10 |
€ 420,00 |
|
|
|
5 |
21/01/2010 |
AA02 |
22,00 |
10 |
€ 220,00 |
|
|
|
6 |
02/02/2010 |
AA02 |
34,00 |
10 |
€ 340,00 |
|
|
|
7 |
04/02/2010 |
AA01 |
12,00 |
15 |
€ 180,00 |
|
|
|
8 |
15/02/2010 |
AA03 |
50,00 |
15 |
€ 750,00 |
|
|
|
9 |
18/02/2010 |
AA03 |
33,00 |
5 |
€ 165,00 |
|
|
|
10 |
22/02/2010 |
AA01 |
42,00 |
5 |
€ 210,00 |
|
|
|
11 |
01/03/2010 |
AA01 |
32,00 |
5 |
€ 160,00 |
|
|
|
12 |
03/03/2010 |
AA03 |
42,00 |
10 |
€ 420,00 |
|
|
Si desiderano totali parziali relativi a ciascun mese. Premesso che in ogni caso è necessario che sia applicato l’ordinamento (sort) secondo la data, si possono percorrere almeno due vie: estrazione dei record specifici mediante un filtro opportuno o, più comodamente, sfruttando i subtotali. Ma come fare, visto che non esiste in origine un campo del mese?
La soluzione, cui probabilmente molti (ma non tutti) avranno pensato, consiste nell’inserimento, sulla sinistra di un altro campo intestato MESE (giustappunto, e a causa di sfrenata fantasia letteraria):
|
|
A |
B |
C |
D |
E |
F |
G |
H |
|
1 |
MESE |
DATA |
TIPO |
QUANT |
PREZZO |
RICAVO |
|
|
|
2 |
Gennaio |
04/01/2010 |
AA01 |
21,00 |
10 |
€ 210,00 |
|
|
|
3 |
Gennaio |
13/01/2010 |
AA02 |
15,00 |
15 |
€ 225,00 |
|
|
|
4 |
Gennaio |
14/01/2010 |
AA01 |
42,00 |
10 |
€ 420,00 |
|
|
|
5 |
Gennaio |
21/01/2010 |
AA02 |
22,00 |
10 |
€ 220,00 |
|
|
|
6 |
Febbraio |
02/02/2010 |
AA02 |
34,00 |
10 |
€ 340,00 |
|
|
|
7 |
Febbraio |
04/02/2010 |
AA01 |
12,00 |
15 |
€ 180,00 |
|
|
|
8 |
Febbraio |
15/02/2010 |
AA03 |
50,00 |
15 |
€ 750,00 |
|
|
|
9 |
Febbraio |
18/02/2010 |
AA03 |
33,00 |
5 |
€ 165,00 |
|
|
|
10 |
Febbraio |
22/02/2010 |
AA01 |
42,00 |
5 |
€ 210,00 |
|
|
|
11 |
Marzo |
01/03/2010 |
AA01 |
32,00 |
5 |
€ 160,00 |
|
|
|
12 |
Marzo |
03/03/2010 |
AA03 |
42,00 |
10 |
€ 420,00 |
|
|
Inoltre nelle celle da A2 in giù va messa una formula del tipo seguente:
=SCEGLI(MESE(B2);"Gennaio";"Febbraio";"Marzo";"Aprile";"Maggio";. . . ;"Novembre";"Dicembre")
Nota per i primo-armigeri. La formula precedente si può inserire in A2 e poi copiare in basso o più astutamente in tre mosse: 1. Selezionare l’intero campo da A2 in basso; 2. Inserire la predetta formula in A2; 3. Premere Ctrl+Invio anziché l’usuale Invio.
L’applicazione e rimozione dei subtotali agognati si può infine meccanizzate con il codice macro qui sotto riportato:
Dim swMettiTogli As Boolean ' Definizione a livello modulo: conserva il suo valore
Sub MettiTogliSubtotali()
swMettiTogli = Not swMettiTogli ' True/False in alternanza
With Range("A1") ' Così la macro opera "a distanza"
' cioè pure se A1 NON è selezionato
If swMettiTogli Then
.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(6), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Else
.RemoveSubtotal
End If
End With
End Sub
La macro può essere consumata da tutti come ricetta, mentre ai più esperti suggerisco l’esegesi autogestita.
NOTA BENE. I subtotali NON si applicano a una tabella - oggetto
ListObject in VBA - ma solo a un normale intervallo dotato di intestazioni. Altrimenti la nostra bella macro fallisce...
?>
?>