Clever-Excel-Forum

Normale Version: Zahlenstrings auf Format bringen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe VBA Gemeinde,

ich habe folgendes Problem. Am Anfang oder am Ende eines Strings stehen bei mir Zahlen. Diese Zahlen möchte ich auf ein entsprechendes Format bringen.
Aus  "Stringkette99" soll z.B. "Stringkette0099" werden. Da ich nun eine ganze Reihe und Liste von solchen Strings habe, möchte ich dies möglichst effektiv tun.
Ich denke da z.B. an den Einsatz der Replace-Methode. Leider bin ich mit der Syntax dieses Befehls (das gilt ganz allgemein bei allen VBA Befehlen) nicht so ganz fit.
Ein "Zersägen der Kette" in Zahl und Restring, dann Einsatz von Format(Zahl, "0000") und wieder Zusammensetzen zum gewünschten String bekomme ich selbst hin.
Ich suche also nach einer effektiveren Art dies zu tun.
 

Danke schon mal für eure Hilfe.
Hi!
Das Beispiel ist mir zu allgemein!
Denn dies wird Dir wohl kaum reichen:

AB
1Stringkette99Stringkette0099
Formeln der Tabelle
ZelleFormel
B1=LINKS(A1;LÄNGE(A1)-2)&TEXT(RECHTS(A1;2);"0000")

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8


Gruß Ralf
Hallo,

Wenn es keine Systematik, z.b. immer die letzten beiden Stellen, gibt, bleibt nur den gesamten string zu durchsuchen:

For i =1 to len()

Die Abfrage auf eine Zahl wäre dann:

If mid(str,i,1) like "#" then

Falls ja, kann der String an dieser Stelle gespalten werden und das gewünschte Zahlenformat gesetzt werden.

Mfg
Hallöchen,

hier mal mit Unterstützung einer Formel von excelformeln.de ein Ansatz, mit Zwischenergebnissen schrittweise aufgelistet. Damit ist eine variable Länge der Zahl möglich, ebenso führende Nullen.
Kommen führende Nullen nicht vor, gibt es auch eine einfachere Lösung Smile

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCD
1Spam08Spam08Spam0008

ZelleFormel
B1=TEIL(A1;1;LÄNGE(A1)-LÄNGE(C1))
C1{=TEXT(SUMME((TEIL(0&A1;KGRÖSSTE(WENN(ISTZAHL(TEIL(0&A1;ZEILE($1:$256);1)*1);ZEILE($1:$256);1);ZEILE($1:$256));1)*1)*10^(ZEILE($1:$256)-1));WIEDERHOLEN(0;SUMME(ISTZAHL(TEIL(A1;ZEILE($1:$256);1)*1)*1)))}
D1=B1&TEXT(C1;"0000")
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg
Hallo liebes Forum,

zunächst einmal vielen Dank für eure Hilfe und Ratschläge. Ich habe mal selber etwas gebastelt und eine Formatierung für 4 stellige Zahlen nach dem String gebaut. Da bei 4 stelligen Zahlen selbst dann nichts weiter berechnet werden muss, bleiben noch 1 bis 3 stellige Zahlen übrig, die sich am String anschließen. Unter der Vorraussetzung, dass ich  meine Zahlenstrings auf dem Tabellenblatt entsprechend markiere / selektiere funktioniert folgender Code:


Code:
Sub Zahlenstrings_auf_Format_bringen()

For Each Cell In Selection
'Kleinbuchstaben, dann Zahl
If Cell.Value Like "*[a-z][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 1), "000" & Right(Cell.Value, 1))
If Cell.Value Like "*[a-z][0-9][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 2), "00" & Right(Cell.Value, 2))
If Cell.Value Like "*[a-z][0-9][0-9][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 3), "0" & Right(Cell.Value, 3))
'Großbuchstaben, dann Zahl
If Cell.Value Like "*[A-Z][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 1), "000" & Right(Cell.Value, 1))
If Cell.Value Like "*[A-Z][0-9][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 2), "00" & Right(Cell.Value, 2))
If Cell.Value Like "*[A-Z][0-9][0-9][0-9]" Then Cell.Value = Replace(Cell.Value, Right(Cell.Value, 3), "0" & Right(Cell.Value, 3))
End If
Next Cell

End Sub

Wie ihr seht unterscheiden sich die einzelnen Programmierzeilen nicht so sehr. Daher meine Frage jetzt an euch, wie schaffe ich es, in meinem Code noch mehr Systematik
hineinzubekommen? Wie kann ich diesen Code kürzer gestalten?
Moin!
Wenn Du ohnehin mit VBA arbeiten willst:

Sub TextZahl()
Dim rng As Range, cnt As Long
For Each rng In Selection
   For cnt = 0 To Len(rng) - 1
      If Not IsNumeric(Mid(rng, Len(rng) - cnt)) Then Exit For
   Next
   rng = Left(rng, Len(rng) - cnt) & Format(Right(rng, cnt), "0000")
Next
End Sub

Gruß Ralf