Liste sortieren mit Trennlinien / Excel
piston 19. Feb. 2013, 08:30

Hallo!

Ich hoffe es kann mit jemand bei folgendem Problem weiterhelfen:

Ich habe eine Liste:

Ab1
Ab3
Ab5
Ab3
Bb2
Bb1
Ab3

Diese soll eventuell mit Hilfe eines Makros in folgende Form gebracht werden:

Ab1
---
Ab3
Ab3
Ab3
---
Ab5
---
Bb1
---
Bb2

Das heißt: Sortieren, aber auch nach jeder neuen Bezeichnung (neuem Zelleninhalt) soll eine Trennzeile mit z.B. "---" eingefügt werden.

Ich brauche das, da ich eine sehr lange Liste habe, über die ich auf einem anderen Arbeitsblatt mittels Datenüberprüfung ein Drop Down zur Werteauswahl erstellt habe. Um sich im Drop Down leichter orientieren zu können, wären solche Trennlinien sehr hilfreich.

DANKE!

skyzem 19. Feb. 2013, 10:23

Hallo piston

Hier, quick & dirty:

Als erstes musst du die Spalte sortieren, egal ob von A-Z oder von Z-A, hauptsache gleiche Werte liegen untereinander. Dann folgendes Makro starten, wobei du den Startpunkt (Erste Zelle der Liste) bei den zwei Konstanten angibst. 1,1 für A1

Code:
Sub test()
    Const spalte As Integer = 1 '(Enspricht A)
    Const starzeile As Integer = 1 '(Enspricht 1)
   
    LCiR = Cells(Rows.Count, spalte).End(xlUp).Row
   
    For i = starzeile + 1 To LCiR
        If Cells(i, spalte) <> Cells(i - 1, spalte) Then
            Cells(i, spalte).Insert Shift:=xlDown
            Cells(i, spalte).Value = "---"
            i = i + 1
        End If
    Next
End Sub

  

PS. Das Sortieren kannst du ja mit dem Makrorecorder aufzeichnen.

piston 19. Feb. 2013, 13:12

Hallo!


Danke erstmal!

Das Makro hat nur den Hacken, das solange Ab1, Ab3, usw. in den Zellen steht funktioniert es, aber leider nicht mehr ab Bb1,...

Schönen Gruß

StefanBerlitz 19. Feb. 2013, 14:24

Hallo piston,

das passiert bei schnellen, dreckigen Makros schon mal - in dem Fall liegt es daran, dass durch das Einfügen der Zeilen mit dem Strich die Anzahl der Zeilen nicht mehr bis zum Ende hin stimmt. In diesem Fall ist es besser von hinten nach vorne die Zeilen zu durchlaufen. Hier das angepasste Makro von skyzem:

Code:

Sub test()
    Const spalte As Integer = 1 '(Enspricht A)
    Const starzeile As Integer = 1 '(Enspricht 1)
   
    LCiR = Cells(Rows.Count, spalte).End(xlUp).Row
   
    For i = LCiR To starzeile + 1 Step -1
        If Cells(i, spalte) <> Cells(i - 1, spalte) Then
            Cells(i, spalte).Insert Shift:=xlDown
            Cells(i, spalte).Value = "---"
        End If
    Next
End Sub

Ciao,
Stefan

skyzem 19. Feb. 2013, 15:33

Danke Stefan  

Der Code war ja wirklich richtig dreckig  
Sogar die ts habe ich in Entspricht versudelt...

piston 19. Feb. 2013, 15:39

DANKE - PERFEKT!