Sortieralgorithmus für einen String gesucht
#1
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?
Top
#2
Hallo,

mit Sortieren hat das ja nicht sooo viel zu tun.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
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
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Nutella
Top
#5
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste