08.10.2019, 13:33
Hallo zusammen,
ich würde gerne um Eure Hilfe bitten. Ich habe eine Spalte mit mehreren hundert Zellen. Innerhalb der Zellen finden sich verschiedene Begrifflichkeiten, sie sind mit einem Komma und einem Leerzeichen voneinander getrennt. Die Anzahl der Begriffe pro Zelle unterscheidet sich.
Ich würde gerne die Begriffe in den Zellen alphabetisch sortieren. Da ich mich mit VBA überhaupt nicht auskenne habe ich lange in Foren recherchiert, konnte allerdings keine Lösung finden, die bei mir funktioniert hat.
Einzig und alleine dieser Code, s.u., ebenfalls aus einem Forum, ging in die richtige Richtung. (Link zum Original)
Allerdings lässt er sich nur auf eine vorab definierte Zelle anwenden, nicht aber auf alle Zellen innerhalb einer Spalte. Bei dem Umfang meiner Tabelle wäre es eine sehr langfristige Aufgabe jede einzelne Zelle manuell anzusteuern.
Hat denn jemand vielleicht eine Lösung für das Problem? Gibt es irgendwo eine funktionales Skript, welches ich bei meiner Recherche übersehen habe? Für Hilfe wäre ich sehr dankbar!
ich würde gerne um Eure Hilfe bitten. Ich habe eine Spalte mit mehreren hundert Zellen. Innerhalb der Zellen finden sich verschiedene Begrifflichkeiten, sie sind mit einem Komma und einem Leerzeichen voneinander getrennt. Die Anzahl der Begriffe pro Zelle unterscheidet sich.
Ich würde gerne die Begriffe in den Zellen alphabetisch sortieren. Da ich mich mit VBA überhaupt nicht auskenne habe ich lange in Foren recherchiert, konnte allerdings keine Lösung finden, die bei mir funktioniert hat.
Einzig und alleine dieser Code, s.u., ebenfalls aus einem Forum, ging in die richtige Richtung. (Link zum Original)
Allerdings lässt er sich nur auf eine vorab definierte Zelle anwenden, nicht aber auf alle Zellen innerhalb einer Spalte. Bei dem Umfang meiner Tabelle wäre es eine sehr langfristige Aufgabe jede einzelne Zelle manuell anzusteuern.
Hat denn jemand vielleicht eine Lösung für das Problem? Gibt es irgendwo eine funktionales Skript, welches ich bei meiner Recherche übersehen habe? Für Hilfe wäre ich sehr dankbar!
Code:
Option Explicit
Option Compare Text
Sub sortieren_zelle()
Dim arrTmp, x As Long
With Range("A23")
arrTmp = Split(.Value, ",")
For x = 0 To UBound(arrTmp)
arrTmp(x) = Trim(arrTmp(x))
Next
QuickSort arrTmp
.Value = Join(arrTmp, ", ")
End With
End Sub
Sub QuickSort(ByRef DasArray, Optional ErsteZeile = -1, Optional LetzteZeile = -1)
Dim UnterGrenze As Long, OberGrenze As Long
Dim AktuellerWert, GemerkterWert As Variant, tmpWert As Variant
If ErsteZeile < 0 Then ErsteZeile = LBound(DasArray)
If LetzteZeile < 0 Then LetzteZeile = UBound(DasArray)
UnterGrenze = ErsteZeile
OberGrenze = LetzteZeile
AktuellerWert = DasArray((ErsteZeile + LetzteZeile) \ 2)
Do While (UnterGrenze <= OberGrenze)
Do While (DasArray(UnterGrenze) < AktuellerWert And UnterGrenze < LetzteZeile)
UnterGrenze = UnterGrenze + 1
Loop
Do While (DasArray(OberGrenze) > AktuellerWert And OberGrenze > ErsteZeile)
OberGrenze = OberGrenze - 1
Loop
If (UnterGrenze <= OberGrenze) Then
GemerkterWert = DasArray(UnterGrenze)
DasArray(UnterGrenze) = DasArray(OberGrenze)
DasArray(OberGrenze) = GemerkterWert
UnterGrenze = UnterGrenze + 1
OberGrenze = OberGrenze - 1
End If
Loop
If (OberGrenze > ErsteZeile) Then Call QuickSort(DasArray, ErsteZeile, OberGrenze)
If (UnterGrenze < LetzteZeile) Then Call QuickSort(DasArray, UnterGrenze, LetzteZeile)
End Sub