Ordinamento Automatico delle Celle in Excel 2007

Ordinare le celle in Excel 2007 è un’operazione piuttosto semplice, utilizzando gli strumenti fornitici dal foglio di calcolo di Microsoft. L’operazione più semplice di ordinamento si effettua semplicemente selezionando un range di celle e cliccando sul pulsante “Ordina e filtra” presente nella barra degli strumenti della scheda Home.

Si potrà poi procedere nel selezionare l’ordinamento preferito per il range di valori inserito.

Selezionando “Ordinamento personalizzato” sarà semplice avere accesso anche a funzioni avanzate di ordinamento, che ci permetteranno di mettere in relazione gli elementi di una colonna o di una riga in base a valori, ma anche a colore della cella o a icona presente nella cella.

Il procedimento fin qui esposto è quello standard, e soddisferà la maggior parte delle esigenze. Tuttavia nel caso in cui utilizziate Excel per inserire frequentemente dei dati che devono essere ordinati istantaneamente ad ogni inserimento, il procedimento manuale può diventare lento, macchinoso e soggetto ad errori. Sarebbe molto più logico utilizzare un ordinamento automatico, che ad ogni modifica o inserimento di un valore nuovo per la cella provvederà automaticamente ad aggiornare l’ordine precedentemente impostato.

Realizzare questo non sarà molto complicato. Basterà utilizzare una macro VBA, che ad ogni modifica di una cella eseguirà la routine di ordinamento.

Esempio

Supponiamo di avere una lista di numeri disordinata:

Col procedimento precedente potremo ordinarla in maniera semplice e intuitiva. Supponiamo di volere un ordinamento in ordine crescente: il risultato sarà ovviamente il seguente:

Ovviamente, se inseriamo un numero <88 nella riga 9 il risultato sarà nuovamente una lista disordinata:

Per abilitare l’ordinamento automatico utilizziamo una macro VBA. Per farlo andiamo sul pulsante office e selezioniamo “Opzioni di Excel”

Abilitiamo l’opzione “Mostra Scheda Sviluppo sulla Barra Multifunzione”


Comparirà ora dentro Excel la scheda “Sviluppo”. Selezioniamola e clicchiamo su “Visual Basic”:

Facciamo doppio clic su ThisWorkbook:

E inseriamo nel riquadro bianco a destra la macro VBA che servirà per raggiungere il nostro scopo:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets(“Foglio1”).Range(“A1:A30”).Sort Key1:=Range(“A1”), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

La precedente sub verrà svolta ad ogni modifica del valore di una cella, e interverrà ordinando in maniera decrescente (xlAscending) tutte le celle comprese nell’intervallo (A1:A30) in base alla chiave Range(“A1). Inserendo così un altro numero (ad esempio 30) nell’elenco precedente il risultato sarà immediatamente:

Ovviamente nel caso in cui avessimo più colonne si potrà applicare la stessa macro. basterà modificare l’intervallo e specificare la chiave di riferimento. Ad esempio nel caso in cui avessimo una classifica di questo tipo:

Supponendo di voler modificare il valore di punteggio dell’Inter, da 35 a 41, il risultato desiderato sarà un aggiornamento automatico della classifica in entrambe le colonne. Per raggiungere lo scopo basterà modificare la sub precedente in questo modo:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Worksheets(“Foglio1”).Range(“A1:B30”).Sort Key1:=Range(“B1”), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

Abbiamo modificato l’intervallo, andando a comprendere entrambe le prime colonne, e utilizzato come chiave la seconda colonna. Inoltre abbiamo impostato l’Order da xlAscending a xlDescending (ordine decrescente, essendo una classifica con ordinamento dalla squadra con più punti a quella con meno punti). Il risultato sarà ovviamente questo: