Sortieren von Tabellen per Makro

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Sortieren von Tabellen per Makro
von: Peter
Geschrieben am: 02.10.2003 08:07:14

Guten Morgen...

Habe eine Arbeitsmappe mit 12 Tabellenblättern. Jede Tab. ist von Spalte A-R beschrieben, haben aber unterschiedlich viele und sich ständig ändernde Anzahl von Zeilen. Die Tab. sollen nach Spalte R absteigend sortiert werden. Durch löschen/hinzufügen von Zeilen muss ich mein moment. Makro immer per Hand ändern,damit das sortieren funktioniert. Wie läßt es sich verwirklichen, das die Tab sortiert werden und immer die richtigen Zeilen einbezogen werden? Weiteres Prob. unter d Teb. steht noch Text geschrieben. Sortieren A:A o. ä. klappt also nicht.

Danke für eure Hilfe
Peter

Bild


Betrifft: AW: Sortieren von Tabellen per Makro
von: Lutz
Geschrieben am: 02.10.2003 08:21:36

Hallo Peter,

ich würde am Anfang des Makros die letzte nichtleere Zeile ermitteln mit zB:

cRow = [C65536].End(xlUp).Row (für Spalte C)

Wenn dann noch Text unter der Tab. steht, der nicht mitsortiert werden soll, mußt Du die Zeilenanzahl subtrahieren zB: Text über 3 Zeilen:

cRow = [C65536].End(xlUp).Row -3

Danach sortieren:

Range("A1:R" & cRow).Sort Key1:=Range("R1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom


Gruß
Lutz


Bild


Betrifft: Danke Lutz
von: Peter
Geschrieben am: 02.10.2003 08:33:51

Danke für die schnelle Antwort. Werde es gleich ausprobieren.

Der zu sortierende Bereich fängt in Zeile 6 erst an. Funktioniert das Makro trotzdem? Du hast es für spalte c gemacht? Hatte kein Grund? Geht es mit ein Button für alle Tabellenblätter gleichzeitig?
Weiteres Prob wäre noch, das es nicht immer 3 Zeilen Text unter der Tab ist. Dieser Text variiert auch ständig. Ich weiß, alles nicht so einfach.

Was ist eigentlich mit mehr Tabs auf einen Blatt? Eine z. B. von Zeile 6-12, eine weitere von Zeile 14-16 usw.

Schön das es jemand gibt, der Ahnung hat!
Peter


Bild


Betrifft: AW: Danke Lutz
von: Lutz
Geschrieben am: 02.10.2003 09:09:48

Hi Peter,

Um erst ab Zeile 6 zu sortieren, brauchst Du nur ändern:

Range("A6:R" & cRow).Sort Key1:=Range("R6"),.....

Um alle Blätter auf einmal zu sortieren, sind natürlich einige Voraussetzungen notwendig wie zB, dass alle Blätter die gleiche Struktur aufweisen etc.

Spalte C hatte ich zur Ermittlung der letzten Zelle nur als Beispiel angenommen.
Steht unter der Tabelle denn in jeder Spalte Text ?

Gruß
Lutz


Bild


Betrifft: AW: Danke Lutz
von: Peter
Geschrieben am: 02.10.2003 09:28:30

Mit dem Text unter der Tabelle ist das verschieden. Es gibt auch Tabellen, in denen in jeder Spalte Text steht. Was meintest du, mit einigen Vorraussetzungen??

Gruß
Peter


Bild


Betrifft: AW: Danke Lutz
von: Lutz
Geschrieben am: 02.10.2003 09:50:28

Ich denke es wäre besser, wenn Du Deine Datei mal hochlädst (falls sie keine geheimen Daten enthält).
Dann könnte ich Dir bestimmt effektiver helfen...

Gruß
Lutz


Bild


Betrifft: Geht leider nicht
von: Peter
Geschrieben am: 02.10.2003 09:59:01

Kann die Datei leider nicht hochlaen. Bin auf Arbeit und in der Datei stehen Daten, die nicht nach außen dürfen.


Bild


Betrifft: AW: Geht leider nicht
von: Lutz
Geschrieben am: 02.10.2003 10:02:14

Tja, dann bliebe nur noch die Möglichkeit, die Datei zu kopieren, alle relevanten Daten durch andere zu ersetzen etc...


Bild


Betrifft: Wird die Woche aber nicht mehr.
von: Peter
Geschrieben am: 02.10.2003 10:06:56

Hab momentan viel um die Ohren, durch den Feiertag morgen. Also wenn dann frühestens nächste Woche.

Trotzdem danke für die Hilfe und schönen Feiertag
Peter


Bild


Betrifft: AW: Wird die Woche aber nicht mehr.
von: Lutz
Geschrieben am: 02.10.2003 10:30:47

Dir auch ein schönes WE
Lutz


Bild


Betrifft: AW: Sortieren von Tabellen per Makro
von: WernerB.
Geschrieben am: 02.10.2003 08:36:25

Hallo Peter,

wenn sich unter allen zu sortierenden Spalten Text befindet, kannst Du dieses Makro verwenden (ggf. wg der 12 Blätter in eine Schleife packen). Mangels Angaben bin ich in dem Makro davon ausgegangen, dass Du keine Überschriften hast.

Gibt es jedoch mindestens eine Spalte, unter der sich kein Text befindet, ist die von Lutz vorgeschlagene Methode sicher die richtige.


Option Explicit

Sub Peter()
Dim ZNr As String
    ZNr = InputBox("Aufforderung:", "Titel")
    If Not IsNumeric(ZNr) Then
      MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", _
        vbOKOnly + vbCritical, _
        "Dezenter Hinweis für " & Application.UserName & ":"
      Exit Sub
    End If
    Range("A1:R" & ZNr).Sort Key1:=Range("R1"), Order1:=xlDescending, _
      Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter (siehe Forums-FAQ).


Bild


Betrifft: Danke Werner
von: Peter
Geschrieben am: 02.10.2003 09:34:05

Hi Werner,

danke für deine Antwort. Es sieht so aus, das der zu sortierende Teil ab Zeile 6 beginnt. Was den Text angeht ist es unterschiedlich, mal in nur zwei Spalten, mal in allen. Scheint doch nicht zu einfach sein. Nur gut dass es hier im Forum Leute gibt, die sich ganz gut auskennen und eigentlich immer irgendwie weiterhelfen können!

Wie ist es eig. bei mehreren Tab auf einen Blatt. Z.B. Zeile 6-12, 14-18...

Danke für deine Hilfe
Peter


Bild


Betrifft: AW: Danke Werner
von: WernerB.
Geschrieben am: 02.10.2003 09:50:48

Hallo Peter,

vielen Dank für die Rückmeldung.

Zu Deiner Frage: "Wie ist es eig. bei mehreren Tab auf einen Blatt. Z.B. Zeile 6-12, 14-18..."

Für eine qualifizierte Antwort braucht man hier schon ein wenig mehr Information:
- in welchen Blättern gibt es wieviel (eine, zwei oder noch mehr?) zu sortierende Tabellen?
- haben die zu sortierenden Tabellen Überschriften, die nicht mitsortiert werden sollen?
- beginnen alle zu sortierenden Tabellen immer in der gleichen Zeile (6 bzw. 14)?
- wie sieht Dein bisheriges Makro aus?
- sind weitere Randbedingungen für ein Makro relevant?


Gruß WernerB.


Bild


Betrifft: AW: Danke Werner
von: Peter
Geschrieben am: 02.10.2003 10:04:32

Das ist nicht so einfach zu beantworten. Also es gibt in verschiedenen Arbeitsmappen (Tabellenblättern) eine immer andere Anzahl von Tabellen, die sich auch nicht immer in den genannten Zeilen befinden. Sie sind auch unterschiedlich groß. Es gibt auch Überschriften. Momentan sieht es ganz primitiv aus. Habe ein Makro aufgezeichnet, in der die Tab geöffnet wird, die Tab markiert wird, sortiert wird und anschließend geschlossen wird. Funktioniert ja auch. Man darf halt nur keine Zeilen löschen oder hinzufügen, dann muß ich das Makro immer per Hand ändern, was die Makierung angeht.

Gruß


Bild


Betrifft: Neuer Vorschlag
von: WernerB.
Geschrieben am: 02.10.2003 11:07:02

Hallo Peter,

ohne detaillierte Informationen kann man Dir schlecht helfen.
Mein Vorsclag für ein gerade aktives Tabellenblatt:


Option Explicit

Sub Peter()
Dim SoBe As Range
Dim anzT As String, Bereich As String, lO As String, rO As String
Dim Zo As Long
Dim i As Byte
    anzT = InputBox(vbCr & vbCr & _
      "Wieviel Tabellen sollen in diesem Blatt sortiert werden ?", _
      "Anzahl zu sortierender Tabellen")
    If Not IsNumeric(anzT) Then
      MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & "Makro-Abbruch !", 0, _
        "Dezenter Hinweis für " & Application.UserName & ":"
      Exit Sub
    End If
    For i = 1 To anzT
      On Error Resume Next
      Set SoBe = Application.InputBox(vbCr & vbCr & "Bitte Sortier-Bereich " _
        & i & " (ohne Überschriftenzeile)" & vbCr & "mit der Maus markieren !", _
        "Sortier-Bereich festlegen", , , , , , 8)
      If SoBe Is Nothing Then
        MsgBox "Nichts selektiert !" & vbCr & vbCr & "Makro-Abbruch !" _
          , 0, "Dezenter Hinweis für " & Application.UserName & ":"
        Exit Sub
      End If
      On Error GoTo 0
      Bereich = SoBe.Address(False, False)
      lO = Left(Bereich, InStr(Bereich, ":") - 1)     'links oben
      Zo = Range(lO).Row                              'Zeile oben
      SoBe.Sort Key1:=Range("R" & Zo), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
      Set SoBe = Nothing
    Next i
End Sub

Gruß WernerB.


Bild


Betrifft: AW: Neuer Vorschlag
von: Peter
Geschrieben am: 02.10.2003 11:13:14

Danke erstmal für die Mühe, die du dir gegeben hast. Kann es aber heute leider nicht mehr ausprobieren, da ich jetzt aus EDV technischen Gründen den PC abschalten muß.

Ein schönes We
Gruß


 Bild

Beiträge aus den Excel-Beispielen zum Thema " Sortieren von Tabellen per Makro"