Begriffe innerhalb einer Zelle sortieren

Mit Hilfe der benuterdefinierten Funktion (UDF) =SORTLIST(Zelle; Separator) können Einträge, welche sich innerhalb einer Zelle befinden alphabetisch sortiert werden.

Die Funktion zerlegt den Textinhalt der Zelle in Elemente, die durch ein bestimmtes Trennzeichen separiert sind. Das Trennzeichen wird innerhalb der Funktion verwendet und die sortierten Textelemente werden wieder unter Verwendung desselben Trennzeichens zusammengefügt und als Zeichenfolge zurückgegeben. Die Funktion ist geeignet, um Aufzählungen in einer Textzelle, die z. B. durch Komma oder Semikolon getrennt sind, alphabetisch zu sortieren. Auch Auflistungen mit Zeilenumbruch lassen sich so sortieren.

Die Lösung stammt von wilfert.de und wird mit ausdrücklicher Genehmigung auf Excel-Inside.de veröffentlicht.

Der VBA-Code für die benutzerdefiniert Funktion iist wie folgt aufgebaut und muss in ein Code-Modul eingefügt werden.

Function SortList(ByVal MyText As String, ByVal MySeparator As String) As String
'Gibt eine alphabetisch sortierte Liste von durch ein Trennzeichen separierten Elementen einer Zeichenfolge zurück
    Dim strBuffer As String
    Dim intCounter As Integer
    Dim arrList() As String
    Dim intPos As Integer
    Dim i As Integer
    Dim j As Integer
    Dim strBuf As String
        
    'Einzelne Elemente der Zeichenfolge in Array schreiben
    strBuffer = Trim(MyText)
    Do
        intPos = InStr(strBuffer, MySeparator)
        intCounter = intCounter + 1
        ReDim Preserve arrList(intCounter)
        If intPos = 0 Then
            arrList(intCounter) = Trim(strBuffer)
            strBuffer = ""
        Else
            arrList(intCounter) = Left(strBuffer, intPos - 1)
            strBuffer = Trim(Right(strBuffer, Len(strBuffer) - intPos))
        End If
    Loop While Len(strBuffer) > 0

    'Array sortieren
    For i = 1 To intCounter - 1
        For j = i + 1 To intCounter
            If arrList(j) < arrList(i) Then
                strBuf = arrList(j)
                arrList(j) = arrList(i)
                arrList(i) = strBuf
            End If
        Next j
    Next i

    'Zeichenfolgen zurückschreiben
    For intPos = 1 To intCounter
        strBuffer = strBuffer & arrList(intPos)
        If intPos < intCounter Then strBuffer = strBuffer & MySeparator
    Next intPos

    SortList = strBuffer
    
End Function

In der beigefügten Beispieldatei können Sie die neue Funktion SORTLIST() in Aktion betrachten.

Relevante Artikel

  • VBA Geschwindigkeitstest

    In diesem Beitrag möchte ich Ihnen einen Überblick über verschiedene Arten von  VBA-Schleifen und den daraus resultierenden...

  • Online-Status prüfen

    Dieses Beispiel zeigt, wie sich der Online-Status per VBA überprüfen lässt. Mit Hilfe des Codes wird geprüft, ob der...

  • Prüfen, ob eine Formel in einer bestimmten Zelle steht

    1. Möglichkeit ohne VBA  Um zu ermitteln, ob eine Formel in einer bestimmten Zelle steht, gibt es 2 Möglichkeiten.Bei der ersten...

  • UserName ermitteln

    Dieses Makro liest den UserName (Benutzernamen) des eingeloggten Benutzers aus. Dies ist für Dateien/Programme interessant,...

  • Kurze URL erzeugen (Tiny URL)

    Unter einem Kurz-URL-Dienst oder Tiny-URL-Dienst versteht man einen Dienst, der die Erstellung von Weiterleitungs-URLs auf...

    Wir benutzen Cookies
    Ihre Zufriedenheit ist unser Ziel, deshalb verwenden wir Cookies. Mit diesen ermöglichen wir, dass unsere Webseite zuverlässig und sicher läuft, wir die Performance im Blick behalten und Sie besser ansprechen können. Cookies werden benötigt, damit technisch alles funktioniert und Sie auch externe Inhalte lesen können. Des Weiteren sammeln wir unter anderem Daten über aufgerufene Seiten, getätigte Käufe oder geklickte Buttons, um so unser Angebot an Sie zu Verbessern. Mehr über unsere verwendeten Dienste erfahren Sie unter „Weitere Informationen“. Mit Klick auf „Akzeptieren“ erklären Sie sich mit der Verwendung dieser Dienste einverstanden. Ihre Einwilligung können Sie jederzeit mit Wirkung auf die Zukunft widerrufen oder ändern.