Excel – Totali in grassetto con il minimo sforzo

La scorsa settimana sono stato coinvolto in un progetto molto impegnativo legato al costo del prodotto di Fiat Group Automobiles (FGA), nell’ambito del quale era necessario simulare la chiusura di fine mese di alcuni stabilimenti.

Come sempre accade in questi casi, Excel viene impiegato sopratutto per lo scambio di informazioni e per la generazione di report.

Poiché gli stabilimenti del gruppo Fiat sono veramente tanti e per ognuno di essi è stato necessario produrre un numero consistente di documenti, mi sono reso conto subito che una cospicua parte del tempo era destinata alla formattazione dei fogli lasciando poco tempo alle attività di controllo.

In particolare un mio collega mi ha chiesto se fosse possibile mettere in grassetto le righe dei totali in modo facile e veloce.
Ho pensato subito alla formattazione condizionale ma c’era un limite da superare; le condizioni di formattazione per una cella vengono calcolate sul valore della cella stessa.

La formattazione condizionale
Per mezzo della formattazione condizionale è possibile personalizzare lo stile di una cella in base al valore che contiene. Ad esempio è possibile visualizzare un numero in rosso quando è negativo ovvero in verde se positivo.
Nella figura riportata in basso è possibile vedere un esempio:

Nell’esempio riportato in precedenza, il carattere della cella diventa verde se il valore contenuto è maggiore di 0 altrimenti resta del valore impostato nella formattazione originaria.
E’ possibile specificare più condizioni contemporaneamente è precisamente un massimo di tre.
Formattare le celle in questo modo è utile quando i dati sono calcolati, perchè non c’è bisogno di modificare a mano il formato. Purtroppo però, alla base della condizione è possibile specificare solo il valore ovvero la formula contenuta nella cella.

Il Conto Economico
Nel mio caso, il report del conto economico era simile a quello indicato nella figura in basso. Ovviamente i valori inseriti sono fittizi ma il layout si avvicina molto all’originale.

L’idea è quella di copiare in tutte le celle del foglio, una formattazione condizionale che imposti il formato grassetto in base alla seguente regola:

La cella è da riportare in grassetto se sulla stessa riga, in corrispondenza della colonna D, il valore inizia per ‘TOT’

Testare condizioni su celle diverse
Come dicevo prima però, la condizione può essere testata solo sul contenuto della cella stessa, di conseguenza è necessario implementare una formula che restituisca il valore della cella testata in caso di esito negativo. Se ad esempio la cella da testare è A1, allora la formula potrebbe essere:

=A1+SE(SINISTRA($D1;3)=”TOT”;0;1)



Se i primi tre caratteri della cella D1 contengono TOT, allora la formula restituirà A1 altrimenti restituirà A1+1. In questo modo posso utilizzare la formattazione condizionale impostando il parametro “uguale a“.
E’ possibile trascinare la formattazione della cella A1 in qualunque cella (notare il dollaro che precede la lettera D).
Esiste però un problema con le celle che non contengono un valore numerico poichè in questo caso non è possibile fare una somma.

In effetti per i valori testuali dovrei modificare la formula nel modo seguente:

=A1 & SE(SINISTRA($D1;3)=”TOT”;”";”1″)



Al posto di una somma verrebbe fatta una concatenazione ottenendo lo stesso risultato.
Non è però conveniente utilizzare due formattazioni condizionali differenti perchè bisognerebbe sempre controllare il valore contenuto nelle celle. Per questo motivo, la formula definitiva controlla il tipo di dati contenuti nella cella ed applica la somma o la concatenazione di conseguenza:

=SE(TIPO(A1)=2;A1 & SE(SINISTRA($D1;3)=”TOT”;”";”1″);A1 + SE(SINISTRA($D1;3)=”TOT”;0;1))




Ora è sufficiente selezionare l’intero foglio e copiare la fomattazione della cella A1.

Automatizzare il tutto
Per automatizzare il tutto creiamo una piccola macro in Visual Basic:

Sub TotaliGrassetto()
    Application.ScreenUpdating = False
    Cells.Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:=”= SE (TIPO(A1) = 2; A1 & SE(SINISTRA($D1;3) = “”TOT”"; “”"”; “”1″”);A1 + SE(SINISTRA($D1;3) = “”TOT”"; 0 ; 1 ))”
    With Selection.FormatConditions(1).Font
        .Bold = True
        .Italic = False
    End With
    Range(“A1″).Select
    Application.ScreenUpdating = True
End Sub




Creazione di una add-in MS-Excel
Per rendere le operazioni più veloci è possibile includere la procedure appena descritta in file di tipo xla pronta per essere importata mediante i componenti aggiuntivi di Excel.
Utilizzare una add-in è comodo altrimenti bisognerebbe incollare tutto nello stesso file.

Conclusioni
Al fondo di questo articolo ho inserito il link ai sorgenti.
Nel sorgente trovate anche una procedura che crea un menù per richiamare la macro (avevamo detto che bisogna essere veloci e così ho inserito anche una shortcut da tastiera [CTRL-ALT-T]).

Sorgenti
totali_grassetto.zip