Alphabetisieren von Arbeitsblatt-Registerkarten (Microsoft Excel)
Pat fragt sich, ob es eine schnelle Möglichkeit gibt, die Arbeitsblätter in ihrer Arbeitsmappe zu alphabetisieren. Es gibt keine integrierte Methode, um dies zu tun, aber es ist möglich, ein Makro zu verwenden, um die Sortierung für Sie durchzuführen. In diesem Tipp werde ich zwei Ansätze vorstellen. Die erste bietet eine einfache Möglichkeit zum Sortieren.
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
Dieses Makro sortiert die Arbeitsblattregisterkarten nach Namen in aufsteigender Reihenfolge. Wenn Sie sie in absteigender Reihenfolge sortieren möchten, müssen Sie nur das> in der Mittellinie in <ändern.
Das Makro funktioniert hervorragend, wenn Ihre Arbeitsmappe eine relativ geringe Anzahl von Arbeitsblättern enthält. Wenn Sie beim Ausführen des Makros feststellen, dass die Ausführung viel Zeit in Anspruch nimmt, möchten Sie möglicherweise einen effizienteren Sortieralgorithmus im Makro verwenden. Die folgende Version liest beispielsweise die Namen aller Arbeitsblätter in ein Array, sortiert das Array mithilfe des BubbleSort-Algorithmus und führt dann die eigentliche Anordnung durch:
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
Jeder, der seit einiger Zeit programmiert hat, weiß, dass BubbleSort eine gute allgemeine Sortierroutine ist, aber es gibt schnellere.
Wenn Sie beispielsweise einige Arbeitsblätter haben und diese sehr unorganisiert beginnen, ist der QuickSort-Algorithmus möglicherweise vorteilhafter. Alles, was Sie tun müssen, um das oben Gesagte zu ändern, um QuickSort zu verwenden, ist, den QuickSort-Algorithmus als Unterprogramm hinzuzufügen (Sie finden den Algorithmus in jedem guten Visual Basic-Programmierbuch) und die Prozedur dann im Hauptmakro von SortSheets aufzurufen. (Dies bedeutet, dass Sie die Zeile ändern, in der BubbleSort jetzt aufgerufen wird.)
Es gibt einen weiteren Unterschied zwischen diesem zweiten und dem ersten Makro. Das erste Makro berücksichtigt nicht den Fall des Textes, der zum Benennen Ihrer Arbeitsblätter verwendet wird. Daher wird MyWorksheet genauso angezeigt wie MYWORKsheet. Das zweite Makro achtet auf die Groß- und Kleinschreibung und sortiert entsprechend. Dies ist natürlich kein besonders großes Problem, da Excel auch bei Arbeitsblattnamen nicht auf Groß- und Kleinschreibung achtet.
Nur eine kurze Anmerkung: Die oben gezeigte BubbleSort-Routine ist universeller Natur. Das heißt, es funktioniert zum Sortieren eines Arrays, nicht nur zum Sortieren der Namen von Arbeitsblattregistern.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (13440) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.
Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: