
Tips.Net > ExcelTips Home > Sorting > Sorting Worksheets
Summary: This VBA macro will sort all of the worksheets in a workbook by worksheet name. (This tip works with Microsoft Excel 97, Excel 2000, Excel 2002, and Excel 2003.)
If you are working on a project that uses a lot of worksheets in a workbook, you may want to sort them by worksheet name. The following short macro will do the trick very nicely:
Sub SortSheets()
Dim I As Integer, 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
This macro works if you have a relatively low number of worksheets in your workbook. If, when you run the macro, you note that it takes a great deal of time to run, you may want to use a more efficient sorting algorithm in the macro. For instance, the following is a version that reads the names of all the worksheets into an array, sorts the array using the BubbleSort algorithm, and then does the actual arranging:
Sub SortSheets()
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, Upper As Integer
Dim I As Integer, J As Integer, 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
Anyone who has programmed for some time knows that BubbleSort is a good general-purpose sorting routine, but there are faster ones available. For instance, if you have quite a few worksheets, and they start out very disorganized, you may find that the QuickSort algorithm is more beneficial. All you would need to do to change the above to use QuickSort is add the QuickSort algorithm as a subroutine (you can find the algorithm in any good Visual Basic programming book) and then call the procedure from within the main SortSheets macro. (This means changing the line where BubbleSort is now called.)
There is another difference between this second macro and the first. The first macro does not pay attention to the case of the text used to name your worksheets. Thus, My Worksheet would be viewed the same as MY WORKsheet. The second macro does pay attention to text case, and sorts accordingly. Of course, this is not a particularly big issue, since Excel doesn't pay attention to case in worksheet names, either.
Tip #1959 applies to Microsoft Excel versions: 97 2000 2002 2003
Don't Go in Debt for Christmas! Tired of trying to keep up with the Joneses for Christmas? Want to enjoy the season rather than dread the aftermath? Learn how you can avoid the financial traps that spring up every Christmas.
Check out Top Fifteen Tips for Financing Christmas today!
PivotTables don't need to be scary or mysterious. Use this powerful tool to analyze your data in ways you didn't know were possible. (more information...)
Ask an Excel Question
Make a Comment
ExcelTips FAQ
ExcelTips Premium
Beauty Tips
Car Tips
Cleaning Tips
College Tips
Cooking Tips
Excel2007 Tips
ExcelTips
Family Tips
Gardening Tips
Health Tips
Home Tips
Money Tips
Organizing Tips
Pest Tips
Pet Tips
Word2007 Tips
WordTips
Advertise on the
ExcelTips Site