按字母顺序排列的工作表选项卡(Microsoft Excel)
帕特(Pat)想知道是否有一种快速的方法可以在她的工作簿中按字母顺序排列工作表。没有内置方法可以执行此操作,但是可以使用宏为您进行排序。在本文中,我将介绍两种方法。第一个提供了一种简单的排序方法。
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
此宏按名称升序对工作表选项卡排序。如果要按降序对它们进行排序,只需将中心线中的>更改为<。
如果您的工作簿中工作表的数量相对较少,则该宏非常有用。如果在运行宏时注意到运行时间很长,则可能需要在宏中使用更有效的排序算法。例如,下面的版本将所有工作表的名称读入数组,使用BubbleSort算法对数组进行排序,然后进行实际的排列:
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
已经编程了一段时间的任何人都知道BubbleSort是一个很好的通用排序例程,但是有更快的可用。
例如,如果您有很多工作表,而且它们开始时非常杂乱无章,那么您可能会发现QuickSort算法更有利。更改以上内容以使用QuickSort所需要做的就是添加QuickSort算法作为子例程(可以在任何一本好的Visual Basic编程手册中找到该算法),然后从主要SortSheets宏中调用该过程。 (这意味着更改现在调用BubbleSort的行。)
第二个宏和第一个宏之间还有另一个区别。第一个宏不注意用于命名工作表的文本的大小写。因此,MyWorksheet将被视为与MYWORKsheet相同。第二个宏确实注意文本大小写,并进行相应的排序。当然,这不是一个特别大的问题,因为Excel也不会注意工作表名称中的大小写。
简要说明一下:上面显示的BubbleSort例程本质上是通用的。这意味着它将对任何数组进行排序,而不仅仅是对工作表选项卡的名称进行排序。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(13440)适用于Microsoft Excel 2007、2010、2013和2016。您可以在此处为Excel的较旧菜单界面找到此技巧的版本:
链接:/ excel-Alphabetizing_Worksheet_Tabs [Alphabetizing Worksheet Tabs]。