Il Blog di Andrea Perotti



Ordinare le celle di Excel in base al colore

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: , , , ,

Etichette: ,

posted by Andrea Perotti @ 22.10 Permalink ,

3 Comments:

At 16 dicembre 2008 07.52, Anonymous Boh/ orientalia4all said...

come farete ora che chiuderà Como Social?

 
At 11 gennaio 2009 02.20, Anonymous Anonimo said...

CIAO, STAVO LEGGENDO QUESTO POST MA NON HO CAPITO BENE COME FARE...DEVE ESSERE LA MIA IGNORANZA....
HO MESSO NELLA COLONNA A UNA NOME IN OGNI CELLA..... VORREI DARGLI UN COLORE A SECONDA DI QUELLO CHE MI PIACE DI PIU E FARE IN MODO CHE SI ORDINO PER COLORE...
HO PROVATO A SEGUIRE IL TUO STEP MA MI DA UN ERRORE....O NON SON CAPACE IO...
CMQ SE HA 2 MIN PER SPIEGARLO A PANI E PESCI.. MI FARESTI UN FAVORE... SENNO GRAZIE LO STESSO..

LORIS

 
At 11 gennaio 2009 12.44, Blogger Andrea Perotti said...

Loris come prima cosa devi inserire la funzione in Excel, seguendo la procedura descritta nel post.
Quindi devi inserire la funzione in una cella a fianco di quella colorata; la sintassi della funzione è descritta del post in cui A1 è il riferimento alla cella colorata. Quindi trascini la funzione in tutte le altre celle a fianco di quelle colorate. Otterrai così dei numeri, che rappresentano il colore presente nelle celle che ti interessano. A questo punto devi ordinare l'intera tabella in base alla colonna che contiene i numeri e otterrai che tutte le celle colorate sono ordinate. Infine puoi cancellare la colonna che contiene i numeri. Se invece usi Excel 2007 l'ordinamento in base ai colori è una funzione di default.

 

Posta un commento

<< Home