#VBA Excel: ordinare i fogli alfabeticamente

Ordinare all'apertura del file Excel o meno

Autore: Andrea Pacchiarotti
Ultimo aggiornamento: 22 Aprile 2021
Categoria: Microsoft Office Excel VBA

Iscriviti gratuitamente al mio canale YouTube su Excel!
VBA Excel: ordinare i fogli alfabeticamente
#VBA Excel: ordinare i fogli alfabeticamente

Ci sono molte soluzioni di programmazione per ordinare i fogli di Excel in maniera automatica, qui ne vedremo tre. La prima routine ordina i fogli Excel in senso crescente in maniera un po' ridondante, utilizza infatti più codice del necessario, ma è utile per capire i meccanismi di programmazione che stanno alla base del processo.
Nella seconda soluzione, che ordina i fogli in senso crescente, il codice è minimale, così come nel terzo esempio per l'ordinamento decrescente dei fogli Excel.
In tutte le soluzioni è comunque necessario utilizzare le istruzioni condizionali.

Per ordinare i fogli di Excel in senso crescente in base al loro nome utilizzo la routine seguente che, a seconda delle necessità, può essere eseguita:

  1. da un pulsante posto:
    • sulla barra di accesso rapido (cliccando la scheda File, Opzioni e, nella finestra che si apre, Barra di accesso rapido. A sinistra nell’elenco a discesa Scegli comandi da, cliccare Macro. Selezionare la macro desiderata e premere su Aggiungi)
    • sulla barra multifunzione (cliccando la scheda File, Opzioni e, nella finestra che si apre, Personalizzazione barra multifunzione. A destra cliccare il pulsante Nuova scheda. Un po’ più in alto compaiono due nuove voci, Nuova scheda (personalizzato) e Nuovo gruppo (personalizzato), cliccandoli si possono rinominare attraverso il pulsante Rinomina… (ad esempio si potrebbe chiamare la prima voce MieMacro e la seconda IntCentro). A sinistra nell’elenco a discesa Scegli comandi da, cliccare Macro. Selezionare la macro desiderata e premere Aggiungi per aggiungerla all’interno del gruppo IntCentro (se desiderato cliccare Rinomina… per cambiare l’aspetto dell’icona). Al termine comparirà sul ribbon una scheda dal nome MieMacro con un gruppo IntCentro che conterrà l’icona della macro
    • sul foglio stesso attraverso un bottone inserito tramite la scheda Inserisci, icona Forma: scelta e disegnata sul foglio la forma desiderata, cliccandola con il tasto destro del mouse e scegliendo Assegna Macro
    • sul foglio stesso (devo agire dalla scheda Inserisci, icona Forme o dalla scheda Sviluppo attraverso il pulsante dei Controlli modulo)
  2. al caricamento del file sfruttando l’evento Private Sub Workbook_Open() (devo agire dal VBE - Visual Basic Editor - aprendolo dalla scheda Sviluppo attraverso l'icona Visual Basic o tramite ALT+F11, facendo doppio clic sulla voce Questa_cartella_di_lavoro posta a sinistra e, aprendo il primo elenco a discesa in alto, scegliendo la voce Workbook)

La routine prende i fogli, ne legge il nome e li sposta indietro se il nome ha un valore alfabeticamente minore di quello corrente.


Prima soluzione: ordinare i fogli Excel in senso crescente

Dim foglio As Worksheet
Dim precedente As String
Dim corrente As String
Dim sposta As Boolean
Dim primo As Boolean
Dim i As Integer
sposta = True
While sposta = True
primo = True
sposta = False
precedente = ""
corrente = ""
For Each foglio In Worksheets
If primo Then
corrente = LCase(foglio.Name)
primo = False
Else
precedente = corrente
corrente = LCase(foglio.Name)
End If
If precedente <> "" Then
If corrente < precedente Then
sposta = True
foglio.Move Before:=Sheets(precedente)
End If
End If
Next
Wend

Seconda soluzione: ordinare i fogli Excel in senso crescente
Sostituendo con Private Sub Workbook_Open() la prima riga del listato l'ordinamento avverrà in apertura del file

Public Sub OrdinaFogliCrescente()
Dim x As Integer
Dim y As Integer
For x = 1 To Sheets.Count
For y = 1 To Sheets.Count - 1
If UCase(Sheets(y).Name) › UCase(Sheets(y + 1).Name) Then
Sheets(y).Move after:=Sheets(y + 1)
End If
Next y
Next x
End Sub

Terza soluzione: ordinare i fogli Excel in senso decrescente
Sostituendo con Private Sub Workbook_Open() la prima riga del listato l'ordinamento avverrà in apertura del file

Public Sub OrdinaFogliDecrescente()
Dim x As Integer
Dim y As Integer
For x = 1 To Sheets.Count
For y = 1 To Sheets.Count - 1
If UCase(Sheets(y).Name) ‹ UCase(Sheets(y + 1).Name) Then
Sheets(y).Move after:=Sheets(y + 1)
End If
Next y
Next x
End Sub

Queste due ultime soluzioni saranno certamente più veloci della prima e rispetteranno quanto scritto nell'articolo Excel (VBA): velocizzare esecuzione macro
Per saperne di più su Microsoft Excel potrebbero interessarti i video corsi Excel o questi libri:

Se vuoi approfondire alcuni dei temi trattati, visita la pagina con le mie pubblicazioni cartacee e online

Se l'articolo ti è piaciuto, condividilo!

Segui l'hashtag #AndreaPacchiarotti