Angenommen, ein Mitarbeiter gibt Ihnen ein Arbeitsblatt mit mehreren hundert Datenzeilen in 27 Spalten. Bevor Sie mit den Daten arbeiten, möchten Sie möglicherweise wissen, ob sie zuvor sortiert wurden. Wenn Sie die Informationen kennen, müssen Sie möglicherweise nicht nur die Daten neu sortieren, sondern erhalten auch eine Vorstellung davon, was Ihrer Meinung nach die wichtigste Art war, die Daten zu betrachten.

Leider verfügt Excel nicht über eine integrierte Methode zum Bestimmen der Sortierkriterien für einen Datenbereich. Sie könnten theoretisch ein Makro schreiben, das jede Spalte überprüft und prüft, ob sie in aufsteigender oder absteigender Reihenfolge vorliegt. Hier erfahren Sie, ob diese einzelne Spalte sortiert wurde. Dies bedeutet jedoch nicht unbedingt, dass die gesamte Datentabelle nach dieser Spalte sortiert wurde. Es kann nur ein Zufall sein, dass die Spalte in sortierter Reihenfolge und die Sortierung nach einer anderen Spalte erfolgt Säule. Die Aufgabe der Überprüfung wird noch schwieriger, wenn Sie sekundäre und tertiäre Sorten in Betracht ziehen.

Sie können jedoch versuchen, festzustellen, ob eine bestimmte Spalte sortiert ist und ob sie in aufsteigender oder absteigender Reihenfolge sortiert ist. (Denken Sie daran: Dies sagt Ihnen nicht, ob die bestimmte Spalte die primäre Spalte war, die zum Sortieren verwendet wurde, sondern nur, ob die Spalte sortiert ist.)

Die Idee hinter dem Makro besteht darin, den Inhalt der Spalte zweimal in ein temporäres Arbeitsblatt zu kopieren. Wenn Sie beispielsweise Spalte F auschecken möchten, kopiert das Makro Spalte F in die Spalten A und B des temporären Arbeitsblatts. Das Makro sortiert dann Spalte B in aufsteigender Reihenfolge und vergleicht sie mit Spalte A. Wenn die sortierten und unsortierten Spalten identisch sind, war die ursprüngliche Spalte in aufsteigender Reihenfolge. Dann wird Spalte B in absteigender Reihenfolge sortiert und der Vergleich erneut durchgeführt. Wenn die Spalten gleich sind, ist die Spalte in absteigender Reihenfolge.

Sub TestIfSorted(i)

Dim CColumn as Number     Dim CSheet as String     Dim FlagSort as String

'Identify Current Column and Current Sheet     CColumn = i     CSheet = ActiveSheet.Name     FlagSort = ""



'Add a temporary sheet to test for sorting     Sheets.Add     ActiveSheet.Name = "TempSort"



'Copy CURRENT column to Columns A,B in Current Sheet     Sheets(CSheet).Select     Columns(CColumn).Select     Selection.Copy

Sheets("TempSort").Select     Range("A1").Select     ActiveSheet.Paste     Range("B1").Select     ActiveSheet.Paste     Application.CutCopyMode = False

'In Column C test for equality of Columns A/B     'If Sum in C1=0 then OK otherwise Col A<>Col B     Range("B2").Select     Selection.End(xlDown).Select     Bottom = ActiveCell.Row     Range(Cells(2, 3), Cells(Bottom, 3)).Select     Selection.FormulaArray = "=IF(RC[-2]=RC[-1],0,1)"

Range("C1").Select     ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[6535]C)"



'Sort Column B--Ascending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Ascending"



'Sort Column B--Descending - See if c1=0     Columns("B:B").Select     Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _       Header:=xlYes, OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom, DataOption1:=xlSortNormal     If Cells(1, 3).Value = 0 Then FlagSort = "Descending"



If FlagSort = "Ascending" Then         'Color Header on original sheet yellow         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 36     End If

If FlagSort = "Descending" Then         'Color Header on original sheet orange         Sheets(CSheet).Cells(1, CColumn).Interior.ColorIndex = 44     End If

'Delete temporary sheet     Sheets("TempSort").Select     ActiveWindow.SelectedSheets.Delete End Sub

Sobald festgestellt wurde, ob die ursprüngliche Spalte in aufsteigender oder absteigender Reihenfolge war, wird die erste Zelle der Spalte im ursprünglichen Arbeitsblatt auf Gelb bzw. Orange gesetzt. Schließlich wird das temporäre Arbeitsblatt gelöscht.

Dieses Makro kann so geändert werden, dass es für jede Spalte in einer Datentabelle einmal aufgerufen wird. Das Ausführen des Makros für eine gesamte Tabelle würde nicht so lange dauern, würde jedoch eine farbenfrohe Darstellung darüber liefern, ob einzelne Spalten in aufsteigender oder absteigender Reihenfolge sortiert sind.

Natürlich ist ein solches Makro nicht trivial, daher ist es für Sie möglicherweise einfacher, herauszufinden, wie Sie die Daten sortieren möchten, und sie dann von Anfang an so zu sortieren.

_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 (2395) gilt für Microsoft Excel 97, 2000, 2002 und 2003.