按字母顺序排列的工作表选项卡(Microsoft Excel)
如果您正在使用在工作簿中使用大量工作表的项目,则可能需要按工作表名称对它们进行排序。下面的短宏可以很好地解决问题:
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
如果工作簿中工作表的数量相对较少,则此宏有效。如果在运行宏时注意到运行时间很长,则可能需要在宏中使用更有效的排序算法。例如,下面的版本将所有工作表的名称读入数组,使用BubbleSort算法对数组进行排序,然后进行实际的排列:
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
已经编程了一段时间的任何人都知道BubbleSort是一个很好的通用排序例程,但是有更快的可用。
例如,如果您有很多工作表,而且它们开始时非常杂乱无章,那么您可能会发现QuickSort算法更有利。更改以上内容以使用QuickSort所需要做的就是添加QuickSort算法作为子例程(可以在任何一本好的Visual Basic编程手册中找到该算法),然后从主要SortSheets宏中调用该过程。 (这意味着更改现在调用BubbleSort的行。)
第二个宏和第一个宏之间还有另一个区别。第一个宏不注意用于命名工作表的文本的大小写。因此,我的工作表将被视为与我的工作表相同。第二个宏确实注意文本大小写,并进行相应的排序。当然,这不是一个特别大的问题,因为Excel也不会注意工作表名称中的大小写。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(1959)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: