Alfabetizzazione delle schede del foglio di lavoro (Microsoft Excel)
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: