Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

String umwandeln

String umwandeln
28.11.2006 18:33:56
Dieterlem
Hallo,
ich habe einen String den ich per VBA umwandeln möchte. Der string könnte in verschiedenen Formen vorliegen. Dabei sollte wenn vorhanden vor und hinter dem Buchstabe ein "-" eingefügt werden. Zudem sollte der Buchstabe in ein Großbuchstabe umgewandelt werden.
Beispiel:
229988d998 =&gt 229988-D-998
98766T777 =&gt 98766-T-777
997788 =&gt 997788
Wie kann ich dies am besten mit einer Funktion lösen?
Gruß
Dieterlem

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String umwandeln
28.11.2006 18:44:19
Reinhard
Hi Dieter
Option Explicit Function Wandel(Wort) As String Dim n, Kurz As String For n = 1 To Len(Wort) If Mid(Wort, n, 1) <= "9" Then Kurz = Kurz & Mid(Wort, n, 1) Else Kurz = Kurz & "-" & UCase(Mid(Wort, n, 1)) & "-" End If Next n Wandel = Kurz End Function Sub test() MsgBox Wandel("1234a567") End Sub
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: String umwandeln
28.11.2006 18:54:59
ramses
Hallo
meinst du so ?
Tabelle1

 ABC
1229988d998 229988-D-98  
298766T777 98766-T-77  
3997788997788 
4   

Formeln der Tabelle
ZelleFormel
B1=convertstr(A1)
B2=convertstr(A2)
B3=convertstr(A3)

Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML    Download  
und die Funktion
Function convertStr(tarCell As Range) As Variant Dim i As Long For i = 1 To Len(tarCell.Text) Debug.Print Mid(tarCell.Text, i, 1) Select Case Asc(Mid(tarCell.Text, i, 1)) Case 48 To 57 Case Else convertStr = Left(tarCell.Text, i - 1) & "-" & UCase(Mid(tarCell.Text, i, 1)) & "-" & Right(tarCell.Text, Len(tarCell.Text) - (i + 1)) Exit Function End Select Next i convertStr = tarCell.Value End Function
Gruss Rainer
Anzeige
Danke Reinhard & Ramses das wars. o.T.
28.11.2006 19:15:15
Dieterlem
Kleinigkeit....
28.11.2006 19:48:07
ramses
Hallo
Schau dir mal das Ergebnis an
Tabelle1

 ABC
1229988d998 229988-D-998 229988-D-998
298766T777 98766-T-777 98766-T-777
3997788997788997788
4   
5   
69977889977880
7   

Formeln der Tabelle
ZelleFormel
B1=convertstr(A1)
C1=wandel(A1)
B2=convertstr(A2)
C2=wandel(A2)
B3=convertstr(A3)
C3=wandel(A3)
A6=SUMME(A1:A5)
B6=SUMME(B1:B5)
C6=SUMME(C1:C5)

Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML    Download  
Zudem sollte in meinem Code die Zeile
convertStr = Left(tarCell.Text, i - 1) & "-" & UCase(Mid(tarCell.Text, i, 1)) & "-" & Right(tarCell.Text, Len(tarCell.Text) - (i + 1))
so abgeändert werden
convertStr = Left(tarCell.Text, i - 1) & "-" & UCase(Mid(tarCell.Text, i, 1)) & "-" & Right(tarCell.Text, Len(tarCell.Text) - i )
sonst wird das letzte Zeichen abgeschnitten :-)
Gruss Rainer
Anzeige
AW: String umwandeln
28.11.2006 20:54:36
Peter
Hallo Dieterlem,
gibt es maximal einen Buchstaben oder können auch mehrere vorkommen, dann so:

Function ConvertMehrfach(tarCell As Range) As Variant
Dim iZeichen  As Integer
For iZeichen = 1 To Len(tarCell.Text)
If IsNumeric(Mid(tarCell.Text, iZeichen, 1)) Then
ConvertMehrfach = ConvertMehrfach & Mid(tarCell.Text, iZeichen, 1)
Else
ConvertMehrfach = ConvertMehrfach & "-" & _
UCase(Mid(tarCell.Text, iZeichen, 1)) & "-"
End If
Next iZeichen
End Function

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: String umwandeln
28.11.2006 21:10:45
ramses
Hallo Peter
Da ist noch Optimierungspotential:
"... oder können auch mehrere vorkommen..."
22998dd998
229988d998d
Gruss Rainer
AW: String umwandeln
28.11.2006 21:34:06
Peter
Hallo Rainer,
mein Makro macht daraus 22998-D--D-998 bzw. 229988-D-998-D-
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: String umwandeln
28.11.2006 21:43:55
ramses
Hallo Peter
Vielleicht hätte der Fragesteller für diesen Fall ja auch noch andere Anforderungen die zu gleich berücksichtigen kannst :-)
1. Buchstaben zusammenhängend
2. Kein Bindestrich am Schluss
Lassen wir es vorerst mal dabei bewenden :-)
Vielleicht hat er ja gar keine weitere Forderungen mehr
Gruss Rainer
Anzeige
OT @Rainer & Peter
28.11.2006 22:01:51
Reinhard
Hallo,
der Fragesteller hat mir grad mitgeteilt er habe keinerlei Forderungen mehr, also entspannt euch, schaltet mal ab, lest was Entspannendes , macht sonstwas,
*hmmh* als Bildschirmschoner in der Zeit könnt ihr ja z.B. dieses Bild nehmen:
https://www.herber.de/forum/messages/823857.html
*kicher*
Gruß
Reinhard
AW: String umwandeln nur so zum Spass...
28.11.2006 22:03:20
HermannZ
hallo Rainer;
nur so zum Spass hat mich gereizt ob es mit Formel geht.
Beispiel;
 
 FHI
5322998dd998 22998-DD-998
5422998dd 22998-DD
55229988d998 229988-D-998
5698766text777 98766-TEXT-777
57997788 997788
58  Formel nach unten
59  kopieren
Formeln der Tabelle
I53 : {=WENN(ISTTEXT(F53);LINKS(F53;VERGLEICH(0;ISTZAHL(TEIL(F53;SPALTE($1:$1);1)-1)*1;0)-1)&"-"&GROSS(TEIL(F53;VERGLEICH(0;ISTZAHL(TEIL(F53;SPALTE($1:$1);1)-1)*1;0);LÄNGE(F53)-SUMME(ISTZAHL(TEIL(F53;SPALTE($1:$1);1)-1)*1;0)))&WENN(ISTZAHL(RECHTS(F53;1)*1);"-"&RECHTS(F53;SUMME(--(ISTZAHL(RECHTS(F53;SPALTE($1:$1))*1))));"");F53)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Gruß HermannZ
Anzeige
COOOOL....
28.11.2006 22:20:42
ramses
Hallo Hermann
...das müsst man glatt bei EXCEL-Formeln empfehlen :-)
Gruss Rainer
AW: String umwandeln - der Spaß geht weiter...
29.11.2006 01:07:33
Erich
Hallo Hermann, tolle Formel!
Ich hab noch ein klein wenig daran rumgeschraubt:
 ABC
1Trenner:~~ 
212adf12312~~adf~~12312-ADF-123
3abcabc-ABC
4123123123
5abc123abc~~123-ABC-123
6123abc123~~abc123-ABC

Formeln der Tabelle
ZelleFormel
B2{=WENN(ISTTEXT(A2);LINKS(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0)-1)
&WENN(ISTZAHL(-LINKS(A2;1));B$1;"")
&TEIL(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0);LÄNGE(A2)-SUMME(ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0))
&WENN(ISTZAHL(RECHTS(A2;1)*1);B$1&RECHTS(A2;SUMME(--(ISTZAHL(RECHTS(A2;SPALTE(2:2))*1))));"");A2)}
C2{=WENN(ISTTEXT(A2);LINKS(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0)-1) &"-"&GROSS(TEIL(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0);LÄNGE(A2)-SUMME(ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0))) &WENN(ISTZAHL(RECHTS(A2;1)*1);"-"&RECHTS(A2;SUMME(--(ISTZAHL(RECHTS(A2;SPALTE(2:2))*1))));"");A2)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: String umwandeln
29.11.2006 10:15:11
bst
Auch Hallo,
oder mit Suchen & Ersetzen mit regulären Ausdrücken auch einfach so:
=GROSS(strRegExpReplace(A11;"([a-z])";"-$1-";1;1))
cu, Bernd
--
Option Explicit

'
' Ersetzen in einem String mit Regular Expressions
' Parameter:
' SourceString Der String in dem gesucht werden soll
' Pattern Das zu suchenende Pattern
' ReplaceString Der zu ersetzende String
' IgnoreCase Flag, Groß- / Kleinschreibung ignorieren
' GlobalReplace Flag, Alle bzw. NUR den 1. ten Match ersetzen
' MultiLine Flag ob ^ und $ in jeder Zeile matchen
'
' Rückgabewert:
' der SourceString, ggf. mit Erstezung(en)
'
Function strRegExpReplace(ByVal SourceString As String, ByVal Pattern As String, ByVal ReplaceString As String, _
        Optional ByVal IgnoreCase As Boolean = False, _
        Optional ByVal GlobalReplace As Boolean = False, _
        Optional ByVal MultiLine As Boolean = False) As String

    
    Dim objRE As Object
    
    Set objRE = CreateObject("vbscript.regexp")
    objRE.Pattern = Pattern
    objRE.IgnoreCase = IgnoreCase
    objRE.Global = GlobalReplace
    objRE.MultiLine = MultiLine
    
    strRegExpReplace = objRE.Replace(SourceString, ReplaceString)
    Set objRE = Nothing
End Function


Anzeige
Sehr Ordentlich
29.11.2006 20:56:46
Dieterlem
Hallo Excelfreunde,
ich habe gerade gesehen, dass noch eine riesen Menge an Vorschlägen eingegangen sind und das obwohl meine Frage schon beantwortet war. da zeigt sich mal wieder die Qualität dises Forums. Dass jeder bedacht ist zu helfen und das schon vorgeschlagene noch zu verbessern. Mein Problem war aus einem String eine Personenkennziffer zu formen:
130472d54231 = 130471-D-54231
Dabei muß auch geprüft werden, ob die Eingabe korrekt erfolgt ist. Das ist mein Lösungsansatz:
130472 ergibt das Datum 13.04.72 ( Mid(String,1,2)&lt32 usw.),
Das 7. Zeichen muss ein Buchstabe sein ( IsNumeric(Mid(String,7,1)=False ) und
nach dem Buchstaben müssen noch 5 Zahlen folgen ( Mid(String,8,5)&lt10000 ).
Ich werde mal mit Eueren Vorschlägen etwas experimentieren.
Gruß
Dieterlem
Anzeige
AW: Sehr Ordentlich
29.11.2006 21:18:47
Erich
Hallo,
nach Bernds Vorschlag mit den Reg. Ausdrücken hab ich auch schon mal ein wenig experimentiert.
Die grün unterlegten Resultate sind OK, bei "blau" stört noch ein "-" o.ä., "gelb" ist falsch, bei "weiß" wird zu viel getrennt:
 ABCDE
1Trenner:-HermannBernd 
212adf34512-ADF-34512-ADF-34512-A--D--F-34512-ADF-345
3abcABC-ABC-A--B--C--ABC-
4123123123123123
5abc123ABC-123-ABC-123-A--B--C-123-ABC-123
6123abc123-ABC123-ABC123-A--B--C-123-ABC-
71a2b3c41-A2B-41-A2B-41-A-2-B-3-C-41-A-2-B-3-C-4
8a1b2c3dA1B2-A1B2-A-1-B-2-C-3-D--A-1-B-2-C-3-D-
9aa12bb34cc5dd6AA12BB34-6-AA12BB34-6-A--A-12-B--B-34-C--C-5-D--D-6-AA-12-BB-34-CC-5-DD-6
1012aa34bb5cc612-AA34BB-612-AA34BB-612-A--A-34-B--B-5-C--C-612-AA-34-BB-5-CC-6

Formeln der Tabelle
ZelleFormel
B2{=GROSS(WENN(ISTTEXT(A2);LINKS(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0)-1)
&WENN(ISTZAHL(-LINKS(A2;1));B$1;"")
&TEIL(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0);LÄNGE(A2)-SUMME(ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0))
&WENN(ISTZAHL(RECHTS(A2;1)*1);B$1&RECHTS(A2;SUMME(--(ISTZAHL(RECHTS(A2;SPALTE(2:2))*1))));"");A2)
)}
C2{=WENN(ISTTEXT(A2);LINKS(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0)-1)
&"-"&GROSS(TEIL(A2;VERGLEICH(0;ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0);LÄNGE(A2)-SUMME(ISTZAHL(TEIL(A2;SPALTE(2:2);1)-1)*1;0)))
&WENN(ISTZAHL(RECHTS(A2;1)*1);"-"&RECHTS(A2;SUMME(--(ISTZAHL(RECHTS(A2;SPALTE(2:2))*1))));"");A2)}
D2=GROSS(strRegExpReplace(A2;"([a-z])";"-$1-";1;1))
E2=GROSS(WECHSELN(strRegExpReplace(A2;"([a-z])";"-$1-";1;1);"--";""))
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige