Immaginiamo di voler ordinare un elenco in Excel in base al colore dello sfondo o al colore del testo delle celle; in Excel 2007 questa funzionalità è disponibile di default tramite il pulsante Ordina e Filtra nel gruppo Modifica della scheda Home, selezionando il filtro automatico o l’ordinamento personalizzato.

In Excel 2003 e precedenti l’ordinamento secondo le celle colorate non è presente, si dovrà quindi aggiungere una funzione personalizzata che permetta questa operazione.
Il concetto che seguiremo per ottenere il risultato voluto è quello di inserire in una colonna a fianco delle celle colorate una formula che restituisca il numero corrispondente ad ogni colore, ossia l’indice del colore; si ordinerà quindi la tabella in base alla colonna contenente i numeri corrispondenti ai colori, ottenendo quindi un ordinamento basato sul colore delle celle.

Passiamo quindi alla creazione della funzione che restituisce il numero del colore presente nella cella:

Menù Strumenti – Macro – Visual Basic Editor

Nella finestra Visual Basic inserire un nuovo modulo (menù Inserisci – Modulo)
Copiare il codice riportato sotto relativo alla funzione desiderata:

Function ColorIndexOfCell(Rng As Range, _
Optional OfText As Boolean, _
Optional DefaultAsIndex As Boolean = True) As Integer
Dim C As Long
If OfText = True Then
C = Rng.Font.ColorIndex
Else
C = Rng.Interior.ColorIndex
End If
If (C < 0) And (DefaultAsIndex = True) Then
If OfText = True Then
C = GetBlack(Rng.Worksheet.Parent)
Else
C = GetWhite(Rng.Worksheet.Parent)
End If
End If
ColorIndexOfCell = C
End Function
Function GetWhite(WB As Workbook) As Long
Dim Ndx As Long
For Ndx = 1 To 56
If WB.Colors(Ndx) = &HFFFFFF Then
GetWhite = Ndx
Exit Function
End If
Next Ndx
GetWhite = 0
End Function
Function GetBlack(WB As Workbook) As Long
Dim Ndx As Long
For Ndx = 1 To 56
If WB.Colors(Ndx) = 0& Then
GetBlack = Ndx
Exit Function
End If
Next Ndx
GetBlack = 0
End Function

Quindi in una nuova colonna inserire la seguente formula:

Nel caso si cosideri il colore dello sfondo della cella
=ColorIndexOfCell(A1;FALSO;VERO)

Nel caso si cosideri il colore del carattere della cella
=ColorIndexOfCell(A1;VERO;VERO)

La cella A1 rappresenta la cella colorata che si desidera ordinare .

A questo punto in questa nuova colonna saranno visualizzati i numeri corrispondenti ai colori presenti nelle celle di riferimento; basterà ordinare la tabella in base a questa colonna per aver ottenuto un ordinamento basato sui colori delle celle!

Se è necessario creare un ordinamento specifico, ossia che non segua la lista numerica crescente o decrescente, si dovrà impostare un elenco numerico personalizzato che segua l’ordine dei colori desiderati.

Per creare un elenco personalizzato:
Menù strumenti -> Opzioni -> Scheda Elenchi

Per definire un ordinamento in base all’elenco personalizzato:
Menù Dati -> Ordina -> Opzioni -> Prima chiave di ordinamento

Per rendere disponibile questa funzione in tutte le cartelle di Excel e non solo in quella in cui l’abbiamo inserita è possibile creare e attivare un componente aggiuntivo secondo queste istruzioni.

Technorati technorati tags: , , , ,

Informatics, ski racer, loves Finland, Norway, mountains, squash, photography, Drones and RC Helicopter – Snapchat: andrea.perotti

Translate »