ExcelTips (Menu Interface)
Got a version of Excel that uses the menu interface (Excel 97, Excel 2000, Excel 2002, or Excel 2003)? This site is for you! If you use a later version of Excel, visit our ExcelTips site focusing on the ribbon interface.
With more than 35 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He is president of Sharon Parq Associates, a computer and publishing services company.
Learn more about Allen...
ExcelTips FAQ
Ask an Excel Question
Make a Comment
Free Business Forms
Free Calendars
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.
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (1959) applies to Microsoft Excel versions: 97 2000 2002 2003
Related Tips:
PivotTables Got You Perplexed? PivotTables for the Faint of Heart shows how you can start using Excel's PivotTable tool right away to spin your data into gold! You discover how easy it really is to crunch the numbers you need to crunch. Uncover the power of creating PivotTables, editing them, formatting them, customizing them, and much more. Check out PivotTables for the Faint of Heart today!