Thema Datum  Von Nutzer Rating
Antwort
21.10.2020 10:15:27 Roman
*****
NotSolved
21.10.2020 20:26:56 xlKing
NotSolved
Rot Zwei Spalten aus Blatt sortieren (mehrfach)
22.10.2020 02:41:56 Gast48287
NotSolved

Ansicht des Beitrags:
Von:
Gast48287
Datum:
22.10.2020 02:41:56
Views:
453
Rating: Antwort:
  Ja
Thema:
Zwei Spalten aus Blatt sortieren (mehrfach)

Man kann auch einfach umsortieren ;)

Ausgangstabelle:

Überschrift 1 Überschrift 2 Überschrift 3 Überschrift 4
Ü1-3 Ü2-4 Ü3-2 Ü4-6
Ü1-4 Ü2-2 Ü3-7 Ü4-3
Ü1-1 Ü2-3 Ü3-3 Ü4-7
Ü1-2 Ü2-9 Ü3-4 Ü4-1

 

 

das Makro macht in einem Zwischenschritt daraus:

1 2 3 4
  1   0
Überschrift 1 Überschrift 2 Überschrift 3 Überschrift 4
Ü1-3 Ü2-4 Ü3-2 Ü4-6
Ü1-4 Ü2-2 Ü3-7 Ü4-3
Ü1-1 Ü2-3 Ü3-3 Ü4-7
Ü1-2 Ü2-9 Ü3-4 Ü4-1

und sortiert um (Spalte 4 nach links, dann Spalte 2 daneben, dann die zwei Spalten links wie gehabt sortieren, danach alles wieder zurück sortieren).

Am Ende kommt das heraus:

Überschrift 1 Überschrift 2 Überschrift 3 Überschrift 4
Ü1-3 Ü2-9 Ü3-2 Ü4-1
Ü1-4 Ü2-2 Ü3-7 Ü4-3
Ü1-1 Ü2-4 Ü3-3 Ü4-6
Ü1-2 Ü2-3 Ü3-4 Ü4-7

Wie man sieht wurde nach Spalten 4 sortiert, zusammen mit Spalte 2 (die Zeilenzugehörigkeiten zwischen diesen beiden sind gleich geblieben) - Spalte 1 und 3 sind unverändert.


Option Explicit

Sub Test()
  
  With Range("A1:D5")
    
    '2 Zeilen über dem Datenbereich einfügen
    With .Rows(1).Resize(2)
      Call .Insert(xlShiftDown)
      '1. Zeile: originale Spalten-Indizes
      .Rows(1).Offset(-2).Formula = "=COLUMN()"
      .Rows(1).Offset(-2).Value = .Rows(1).Offset(-2).Value
      '2. Zeile: neue Sortierung
      '  Beispiel: nach 'Überschrift 4' und 'Überschrift 2'
      .Rows(1).Offset(-1).Value = Array(, 1, , 0)
    End With
    
    'gesamten Bereich referenzieren (inkl. unser zwei Zeilen von oben)
    With .Offset(-2).Resize(.Rows.Count + 2)
      'durch Sort Spalte 'Überschrift 2' und 'Überschrift 4' nach links bringen
      Call .Sort(Key1:=.Rows(2), Order1:=xlAscending, Orientation:=xlSortRows, Header:=xlNo)
    End With
    
    'Daten sortieren:
    ' nur die zwei linken Spalten betrachtend
    With .Columns(1).Resize(, 2)
      Call .Sort(Key1:=.Columns(1), Order1:=xlAscending, Orientation:=xlSortColumns, Header:=xlYes)
    End With
    
    'originalen Zustand wiederherstellen
    With .Offset(-2).Resize(.Rows.Count + 2)
      'durch Sort Spalte 'Überschrift 2' und 'Überschrift 4' nach links bringen
      Call .Sort(Key1:=.Rows(1), Order1:=xlAscending, Orientation:=xlSortRows, Header:=xlNo)
    End With
    
    'die 2 Zeilen über den Datenbereich löschen
    With .Offset(-2).Resize(2)
      Call .Delete(xlShiftUp)
    End With
    
  End With
  
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
21.10.2020 10:15:27 Roman
*****
NotSolved
21.10.2020 20:26:56 xlKing
NotSolved
Rot Zwei Spalten aus Blatt sortieren (mehrfach)
22.10.2020 02:41:56 Gast48287
NotSolved