Pat si chiede se esiste un modo rapido per alfabetizzare i fogli di lavoro nella sua cartella di lavoro. Non esiste un metodo integrato per eseguire questa operazione, ma è possibile utilizzare una macro per eseguire l’ordinamento. Presenterò due approcci in questo suggerimento. Il primo fornisce un modo semplice per eseguire l’ordinamento.

Sub SortSheets1()

Dim I As Integer     Dim J As Integer

For I = 1 To Sheets.Count - 1         For J = I + 1 To Sheets.Count             If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then                 Sheets(J).Move Before:=Sheets(I)

End If         Next J     Next I End Sub

Questa macro ordina le schede del foglio di lavoro in base al nome in ordine crescente. Se vuoi ordinarli in ordine decrescente, tutto ciò che devi fare è cambiare il> nella linea centrale in <.

La macro funziona alla grande se hai un numero relativamente basso di fogli di lavoro nella cartella di lavoro. Se, quando esegui la macro, noti che l’esecuzione della macro richiede molto tempo, potresti voler utilizzare un algoritmo di ordinamento più efficiente nella macro. Ad esempio, la seguente è una versione che legge i nomi di tutti i fogli di lavoro in un array, ordina l’array usando l’algoritmo BubbleSort e quindi fa l’effettivo arrangiamento:

Sub SortSheets2()

Dim I As Integer     Dim sMySheets() As String     Dim iNumSheets As Integer

iNumSheets = Sheets.Count     Redim sMySheets(1 To iNumSheets)



For I = 1 To iNumSheets         sMySheets(I) = Sheets(I).Name     Next I

BubbleSort sMySheets

For I = 1 To iNumSheets         Sheets(sMySheets(I)).Move Before:=Sheets(I)

Next I End Sub
Sub BubbleSort(sToSort() As String)

Dim Lower As Integer     Dim Upper As Integer     Dim I As Integer     Dim J As Integer     Dim K As Integer     Dim Temp As String

Lower = LBound(sToSort)

Upper = UBound(sToSort)

For I = Lower To Upper - 1         K = I         For J = I + 1 To Upper             If sToSort(K) > sToSort(J) Then                 K = J             End If         Next J         If I <> K Then             Temp = sToSort(I)

sToSort(I) = sToSort(K)

sToSort(K) = Temp         End If     Next I End Sub

Chiunque abbia programmato per un po ‘di tempo sa che BubbleSort è una buona routine di ordinamento generale, ma ce ne sono di più veloci disponibili.

Ad esempio, se hai diversi fogli di lavoro e iniziano molto disorganizzati, potresti scoprire che l’algoritmo QuickSort è più vantaggioso. Tutto quello che dovresti fare per modificare quanto sopra per utilizzare QuickSort è aggiungere l’algoritmo QuickSort come subroutine (puoi trovare l’algoritmo in qualsiasi buon libro di programmazione Visual Basic) e quindi chiamare la procedura dall’interno della macro SortSheets principale. (Questo significa cambiare la riga in cui BubbleSort è ora chiamato.)

C’è un’altra differenza tra questa seconda macro e la prima. La prima macro non presta attenzione al caso del testo utilizzato per denominare i fogli di lavoro. Pertanto, MyWorksheet verrebbe visualizzato come MYWORKsheet. La seconda macro presta attenzione al maiuscolo / minuscolo e ordina di conseguenza. Ovviamente, questo non è un problema particolarmente grande, poiché nemmeno Excel presta attenzione al caso nei nomi dei fogli di lavoro.

Solo una breve nota: la routine BubbleSort mostrata sopra è di natura generica. Ciò significa che funzionerà per ordinare qualsiasi array, non solo per ordinare i nomi delle schede del foglio di lavoro.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13440) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.

Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: