Bestimmen der Sortierkriterien (Microsoft Excel)
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.