Doppelte Zeichenketten aus einem String löschen und den String mit Trennzeichen sortieren

  • Excel

    Doppelte Zeichenketten aus einem String löschen und den String mit Trennzeichen sortieren

    Hallo Zusammen,

    ich erlaube meinen Benutzern die Mehrfachauswahl von Werten aus einer Dropdown-Liste. Die jeweiligen Werte werden in die Zelle mit der Auswahl geschrieben. Die Vorlage dafür stamm von Excel Inside und sieht etwa so aus:

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. '** Mehrfachauswahl über DropDown-Liste (Gültigkeitsprüfung)
    3. '** Einfügen im Code-Container des betreffenden Arbeitsblattes
    4. '** Dimensionierung der Variablen
    5. Dim rngDV As Range
    6. Dim wertold As String
    7. Dim wertnew As String
    8. '** Errorhandling
    9. On Error GoTo Errorhandling
    10. '** Mehrfachauswahl im definierten Bereich (Bsp. C1) durchführen
    11. If Not Application.Intersect(Target, Range("C1")) Is Nothing Then
    12. '**Range definieren
    13. Set rngDV = Target.SpecialCells(xlCellTypeAllValidation)
    14. If rngDV Is Nothing Then GoTo Errorhandling
    15. '** Prüfen, ob eine gültige Zelle ausgewählt wurde und Werte eintragen
    16. If Not Application.Intersect(Target, rngDV) Is Nothing Then
    17. Application.EnableEvents = False
    18. wertnew = Target.Value
    19. Application.Undo
    20. wertold = Target.Value
    21. Target.Value = wertnew
    22. If wertold <> "" Then
    23. If wertnew <> "" Then
    24. Target.Value = wertold & ", " & wertnew
    25. End If
    26. End If
    27. End If
    28. Application.EnableEvents = True
    29. End If
    30. Errorhandling:
    31. Application.EnableEvents = True
    32. End Sub


    Das Ganze hat leider zwei Schwächen:
    - es ist möglich, die Werte aus dem Dropdown in C1 doppelt auszuwählen, wobei sie dann auch doppelt in die Zelle geschrieben werden
    - es ist nicht möglich, Werte durch eine erneute Auswahl aus dem Dropdown in C1 abzuwählen und entsprechend aus der Zelle zu löschen

    Ich habe hier schon eine ganze Menge probiert und es wäre sicher möglich, das ganze in einen String zu laden und dann zu löschen und neu zu sortieren. Das Problem dann ist nur, dass ich den Wert wieder in die Zelle schreiben müsste, was das Change Event erneut auslöst.

    Die Ideallösung wäre also, dem o.a. Programm mitzugeben, dass es prüfen soll, ob der Wert schon in Zelle vorhanden ist, und ihn dann löschen, anstatt zu ergänzen.
    Hat da jemand eine Idee?

    Buddy