Registriert seit: 18.02.2016
Version(en): 2007
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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hi! Das Beispiel ist mir zu allgemein! Denn dies wird Dir wohl kaum reichen: | A | B | 1 | Stringkette99 | Stringkette0099 | Formeln der Tabelle | Zelle | Formel | B1 | =LINKS(A1;LÄNGE(A1)-2)&TEXT(RECHTS(A1;2);"0000") |
| Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Nutella
Registriert seit: 06.12.2015
Version(en): 2016
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
Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Nutella
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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 Arbeitsblatt mit dem Namen 'Tabelle1' | | A | B | C | D | 1 | Spam08 | Spam | 08 | Spam0008 |
Zelle | Formel | 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 |
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Nutella
Registriert seit: 18.02.2016
Version(en): 2007
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?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Nutella
|