AW: Alphabet. Sortieren Zeichen einer Zelle
25.01.2022 16:05:42
Oberschlumpf
Hi Lars,
versuch es hiermit (und erst mal in einer Testdatei, in der du in Spalte A, beginnend in Zeile 1 deine gezeigten Bsp-Texte einträgst)
Sub sbSort()
Dim lloRow As Long, larstrSort() As String, liIdx As Integer, lloSort As Long
For lloRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
larstrSort = Split(Range("A" & lloRow).Value, "/")
For liIdx = 0 To UBound(larstrSort)
Range("Z" & liIdx + 1).Value = larstrSort(liIdx)
Next
With ActiveSheet.Sort.SortFields
.Clear
.Add2 Key:=Range("Z1:Z" & Cells(Rows.Count, 26).End(xlUp).Row), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
With ActiveSheet.Sort
.SetRange Range("Z1:Z" & Cells(Rows.Count, 26).End(xlUp).Row)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A" & lloRow).Value = ""
For lloSort = 1 To Cells(Rows.Count, 26).End(xlUp).Row
Range("A" & lloRow).Value = Range("A" & lloRow).Value & Range("Z" & lloSort).Value & "/"
Next
Range("A" & lloRow).Value = Left(Range("A" & lloRow).Value, Len(Range("A" & lloRow).Value) - 1)
Range("Z1:Z" & Cells(Rows.Count, 26).End(xlUp).Row).Value = ""
Next
End Sub
1. Mein Code überträgt den Inhalt aus Zelle A1 in die Arrayvariable larstrSort mit Hilfe des Befehls SPLIT; Trennzeichen ist immer "/"
2. Nun werden die Inhalte aus larstrSort in die von mir gewählte Hilfsspalte Z übertragen
3. Spalte Z wird alphabetisch von A-Z sortiert
4. Die sortierten Inhalte aus Spalte Z werden, wieder mit Trennzeichen "/" in Zelle A1 eingetragen
5. Inhalte aus Spalte Z werden gelöscht
6. Ab hier wiederholt sich 1. bis 5. für Zelle A2
7. Ab hier wiederholt sich 1. bis 5. für Zelle A3
8. Ab hier wiederholt sich 1. bis 5. für Zelle A4
...usw...
Sehr wahrscheinlich wirst du im Code einiges anpassen müssen, z Bsp Startzeile für Spalte A (oder beginnen deine Daten auch in A1?)
Ist bei dir Spalte Z frei? Wenn nein, musst du natürlich eine andere Hilfsspalte verwenden und entsprechend auch überall den Code, wo steht...
Range("Z1:Z" & Cells(Rows.Count, 26).End(xlUp).Row)
...die 26 gegen die von dir verwendete Spaltennummer anpassen
Hilfts?
Ciao
Thorsten