Clever-Excel-Forum

Normale Version: Sortieralgorithmus für einen String gesucht
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich habe eine für mich bei meinen geringen VBA Kenntnissen komplizierte Aufgabe zu lösen.
Mein Ausgangsstring besitzt  beliebige Zahlenziffern von 1 bis 9 mit einer beliebigen Anordnung.
Diese Ziffern sollen nun ein bißchen sortiert werden. Der Ergebnisstring soll eine durchlaufende
und aufsteigende Nummerierung erhalten. Die Struktur und Position der einzelnen Ziffern soll
dabei im Ergebnis so sein, dass diese den Ausgangsstring wiederspiegeln.

Um das ganze besser zu verstehen hier einige Beispiele:

Ausgangsstring/Ergebnisstring
997788
112233

4446229999
1112334444

228886
112223

5555333335333333322211444411
1111222221222222233344555544

Wie bekomme ich so etwas mit VBA hin?
Hallo,

mit Sortieren hat das ja nicht sooo viel zu tun.
Hallöchen,

habe das so verstanden:
Formel in B1 und C2 eintragen und nach rechts ziehen. Die 5 kann man durch eine Erweiterung der Formel vermeiden. In A2 könntest Du die Ergebnis-Teile zusammenfassen.

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDEFGHIJK
155447785544778
21122334555

ZelleFormel
B1=TEIL($A$1;SPALTE(A1);1)
C1=TEIL($A$1;SPALTE(B1);1)
C2=(B1<>C1)+B2
Verwendete Systemkomponenten: [Windows (32-bit) NT 10.00] MS Excel 2016
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Hallo Nutella,

hier mein Vorschlag mit einer UDF (selbstgeschriebene Funktion in VBA).



' **************************************************************
'  Modul:  Modul1  Typ = Allgemeines Modul
' **************************************************************


Option Explicit

Function ZahlenZuordnen(strQ As String) As String
 Dim i As Long, j As Long
 Dim strZ As String
 Dim varP As Variant
 Dim varT(1 To 9) As Variant
 Dim varZ As Variant
 
 For i = 1 To Len(strQ)
   varP = Mid(strQ, i, 1)
   varZ = Application.Match(varP, varT, 0)
   If IsError(varZ) Then
     j = j + 1
     varT(j) = varP
     strZ = strZ & j
   Else
     strZ = strZ & varZ
   End If
 Next i
 ZahlenZuordnen = strZ
End Function

Code eingefügt mit: Excel Code Jeanie

A
1
2997788
3112233
4112233
54446229999
61112334444
71112334444
8228886
9112223
10112223
115555333335333333322211444411
121111222221222222233344555544
131111222221222222233344555544
Formeln der Tabelle
ZelleFormel
A4=ZahlenZuordnen(A2)
A7=ZahlenZuordnen(A5)
A10=ZahlenZuordnen(A8)
A13=ZahlenZuordnen(A11)

Gruß Uwe
Code:
Sub M_snb()
   [A1:A8].Offset(, 1) = [index("'" & right(rept("0",max(len(A1:A8))) &A1:A8,max(len(A1:A8))),)]
   Columns(2).Sort Cells(1, 2)
   [A1:A8] = [index("'" & right(B1:B8,len(A1:A8)),)]

   [B1:B8].ClearContents
End Sub