Supportnet / Forum / Tabellenkalkulation
Excel: wie kann ich in einer Zelle nach dem Vorkommen von zwei unterschiedlichen Zeichen durchsuchen?
Frage
Hallo, Zus@mmen!
Also, ich stehe vor folgendem Problem:
ich habe eine Tabelle mit Auto-Kennzeichen. Diese haben leider unterschiedliche Formate, z. B. abc-de-1234, ab-cd 12, ab cd 1234, a b1.
Ich habe vor, ein Standardformat zu erstellen mit dem Format "XXX-YY-ZZZZ".
Ich versuche also, mit FINDEN() oder SUCHEN() zuerst das erste Trennzeichen (Bindestrich oder Leerzeichen) zu suche, und das Ergebnis (bei Auto-Kennzeichen der Zulassungsbezirk) in eine neue Zelle zu schreiben.
Gleiches natürlich dann auch mit den weiteren Buchstaben und den Zahlen.
Zum Schluß möchte ich alles mit VERKETTEN() im Format XX-YY-ZZZZ ausgeben.
Kann mir jemand helfen? Ich weiß absolut nicht weiter!
Bei Suchen()/Finden() kann ich immer nur ein Argument angeben, zumindest weiss ich nicht, wie ich ein zweites einpflegen muss?
Freue mich über eure Hilfe!!!
Gruß,
KoSte
Antwort 1 von rainberg
Antwort 2 von Beverly
Hi,
wenn es nur darum geht Leerzeichen duch Bindestrich zu ersetzen, kannst du WECHSELN() verwenden
=WECHSELN(A1;" ";"-")
Bis später,
Karin
wenn es nur darum geht Leerzeichen duch Bindestrich zu ersetzen, kannst du WECHSELN() verwenden
=WECHSELN(A1;" ";"-")
Bis später,
Karin
Antwort 3 von nighty
hi all :-)
vielleicht hilfreich :-))
gruss nighty
Rem StrBe() ist eine string verarbeitenden function die anhand der eingestellten parameter die angegebenen bereiche addiert wie auch zusammenfuegt
Rem einsatzgebiete zur zahlen und texttrennung und oder addierung wie auch trennung von steuerzeichen
Rem StrBe(Bereich, Par1, Par2 bis flexibles ende)
Rem Bereich erlaubt eine zellenangabe wie einen bereich
Rem par1 erlaubt 0 oder 1 oder 2
Rem 0 fuer diese erlaubten zeichen ("0-9")
Rem 1 fuer diese erlaubten zeichen ("A-Za-zßÄäÖöÜü")
Rem 2 fuer diese erlaubten zeichen ("0-9,.A-Za-zßÄäÖöÜü")
Rem zur verdeutlichung einige beispiele
Rem Range("A1")="AA11BBB222CCCC3333"
Rem = StrBe(Range("A1"), 0, 0) ergebnis = 3566
Rem es wird geschaltet durch die auswahl von par1=0 der zahlenmodus
Rem wenn par2=0 gesetzt ist erfolgt eine addierung aller zahlenbloecke einer zelle bzw bereiches
Rem oder
Rem = StrBe(Range("A1"), 0, 1,3) ergebnis = 3344
Rem es wird nun block 1(das waere 11) wie 3(das waere 3333) addiert,weitere blockangaben mit ",zahl" zu ergaenzen
Rem hier ein makro was die function aufruft
Rem hier die function
vielleicht hilfreich :-))
gruss nighty
Rem StrBe() ist eine string verarbeitenden function die anhand der eingestellten parameter die angegebenen bereiche addiert wie auch zusammenfuegt
Rem einsatzgebiete zur zahlen und texttrennung und oder addierung wie auch trennung von steuerzeichen
Rem StrBe(Bereich, Par1, Par2 bis flexibles ende)
Rem Bereich erlaubt eine zellenangabe wie einen bereich
Rem par1 erlaubt 0 oder 1 oder 2
Rem 0 fuer diese erlaubten zeichen ("0-9")
Rem 1 fuer diese erlaubten zeichen ("A-Za-zßÄäÖöÜü")
Rem 2 fuer diese erlaubten zeichen ("0-9,.A-Za-zßÄäÖöÜü")
Rem zur verdeutlichung einige beispiele
Rem Range("A1")="AA11BBB222CCCC3333"
Rem = StrBe(Range("A1"), 0, 0) ergebnis = 3566
Rem es wird geschaltet durch die auswahl von par1=0 der zahlenmodus
Rem wenn par2=0 gesetzt ist erfolgt eine addierung aller zahlenbloecke einer zelle bzw bereiches
Rem oder
Rem = StrBe(Range("A1"), 0, 1,3) ergebnis = 3344
Rem es wird nun block 1(das waere 11) wie 3(das waere 3333) addiert,weitere blockangaben mit ",zahl" zu ergaenzen
Rem hier ein makro was die function aufruft
Sub FunctionAufrufen()
Range("A1") = StrBe(Range("A1:A10"), 0, 1)
End SubRem hier die function
Function StrBe(Zellen As Variant, ZahlText As Integer, ParamArray AnzBl() As Variant) As Variant
Application.Volatile
Dim schalter As Boolean
Dim zeich1 As Integer, zaehler3 As Integer, zaehler As Integer
Dim Modus As String
Dim Zelle As Range
If ZahlText = 0 Then Modus = "0-9"
If ZahlText = 1 Then Modus = "A-Za-zßÄäÖöÜü"
If ZahlText = 2 Then Modus = "0-9,.A-Za-zßÄäÖöÜü"
For Each bereich In Zellen
ReDim zaehler2(Len(Cells(bereich.Row, bereich.Column))) As String
For IndexArr = 0 To UBound(AnzBl())
zaehler3 = 1
If AnzBl(IndexArr) > Len(Cells(bereich.Row, bereich.Column)) Then AnzBl(IndexArr) = Len(Cells(bereich.Row, bereich.Column))
For zeich1 = 1 To Len(Cells(bereich.Row, bereich.Column))
If Mid(Cells(bereich.Row, bereich.Column), zeich1, 1) Like "[" & Modus & "]" = True Then
zaehler2(zaehler3) = zaehler2(zaehler3) & Mid(Cells(bereich.Row, bereich.Column), zeich1, 1)
schalter = True
End If
If schalter = True And Mid(Cells(bereich.Row, bereich.Column), zeich1, 1) Like "[" & Modus & "]" = False Then
zaehler3 = zaehler3 + 1
schalter = False
End If
Next zeich1
If ZahlText = 0 And AnzBl(0) = 0 Then
For zaehler = 1 To UBound(zaehler2())
If zaehler2(zaehler) = "" Then Exit For
StrBe = Val(StrBe) + Val(zaehler2(zaehler))
Next zaehler
Exit For
End If
If ZahlText = 0 And AnzBl(0) > 0 Then StrBe = Val(StrBe) + Val(zaehler2(AnzBl(IndexArr)))
If ZahlText = 1 And AnzBl(0) = 0 Or ZahlText = 2 And AnzBl(0) = 0 Then
For zaehler = 1 To UBound(zaehler2())
If zaehler2(zaehler) = "" Then Exit For
StrBe = StrBe + zaehler2(zaehler)
Next zaehler
Exit For
End If
If ZahlText = 1 And AnzBl(0) > 0 Or ZahlText = 2 And AnzBl(0) > 0 Then StrBe = StrBe + zaehler2(AnzBl(IndexArr))
For zaehler = 1 To UBound(zaehler2())
zaehler2(zaehler) = ""
Next zaehler
schalter = False
Next IndexArr
Next bereich
End FunctionAntwort 4 von nighty
hi all :-)
moeglich waere auch eine neugestaltung des strings
gruss nighty
ergebnis waere "BBBAA"
par1=1 gibt den textmodus an
par2=2,1 block 2 und block 1 wird gelesen und in der angegebenen reihenfolge auch dargestellt
moeglichkeiten bietet die function einige
links rechts angabe folgt noch als neuer parameter,ist in arbeit
moeglich waere auch eine neugestaltung des strings
gruss nighty
Range("A1")="AA11BBB222CCCC3333"= StrBe(Range("A1:A10"), 1, 2,1)ergebnis waere "BBBAA"
par1=1 gibt den textmodus an
par2=2,1 block 2 und block 1 wird gelesen und in der angegebenen reihenfolge auch dargestellt
moeglichkeiten bietet die function einige
links rechts angabe folgt noch als neuer parameter,ist in arbeit
Antwort 5 von nighty
hi all :-)
vorschlaege wie kritik sind erwuenscht,da ich sonst ja mit excel nicht arbeite :-))
gruss nighty
vorschlaege wie kritik sind erwuenscht,da ich sonst ja mit excel nicht arbeite :-))
gruss nighty
Antwort 6 von KoSte
Hallo, @lle miteinander!
Zunächst nmal: HERZLICHEN DANK für eure Rückmeldungen und Vorschläge:
@ Beverly:
ein einfaches WECHSELN() reicht nicht, da sowohl Leerzeichen, als auch Bindestriche möglich sind.
Hinzu kommt, dass die Zahlen unter Umständen auch direkt an den letzten Buchstaben dran sein können.
@ rainberg:
super vielen Dank, dass Du gleich noch ne Muster-Datei hochgeladen hast.
Aber auch hier leider das Problem, dass die letzten Zahlen an den Buchstaben dran sein können.
@ nighty:
Ich werde Deine Vorschläge mal ausprobieren und Dir noch eine Rückmeldung geben... aber bereits jetzt: herzlichen Dank!
CU,
KoSte
Zunächst nmal: HERZLICHEN DANK für eure Rückmeldungen und Vorschläge:
@ Beverly:
ein einfaches WECHSELN() reicht nicht, da sowohl Leerzeichen, als auch Bindestriche möglich sind.
Hinzu kommt, dass die Zahlen unter Umständen auch direkt an den letzten Buchstaben dran sein können.
@ rainberg:
super vielen Dank, dass Du gleich noch ne Muster-Datei hochgeladen hast.
Aber auch hier leider das Problem, dass die letzten Zahlen an den Buchstaben dran sein können.
@ nighty:
Ich werde Deine Vorschläge mal ausprobieren und Dir noch eine Rückmeldung geben... aber bereits jetzt: herzlichen Dank!
CU,
KoSte
Antwort 7 von KoSte
Und nochmals:
H@llo @ll!!!
@ nighty:
Ich habs versucht, bin aber leider nicht zu einem sinnvollen Ergebnis gekommen. Kann natürlich auch daran liegen, dass ich nicht hundertpro wusste, wie ich vorgehen soll.
Ich glaube aber, ich habe eine für mich akzeptable Lösung gefunden, ohne in VB oder mit Makros zu arbeiten.
Wer Lust hat mal drüber zu schauen:
http://rs315.rapidshare.com/files/164157593/test3.xls
Meiner Meinung nach sind damit alle möglichen Fälle abgedeckt.
Einen ganz, ganz herzlichen Dank an @lle, die mir hier mit Rat und Tip geholfen haben!!
Viele Grüße und noch ein schönes WE,
KoSte
H@llo @ll!!!
@ nighty:
Ich habs versucht, bin aber leider nicht zu einem sinnvollen Ergebnis gekommen. Kann natürlich auch daran liegen, dass ich nicht hundertpro wusste, wie ich vorgehen soll.
Ich glaube aber, ich habe eine für mich akzeptable Lösung gefunden, ohne in VB oder mit Makros zu arbeiten.
Wer Lust hat mal drüber zu schauen:
http://rs315.rapidshare.com/files/164157593/test3.xls
Meiner Meinung nach sind damit alle möglichen Fälle abgedeckt.
Einen ganz, ganz herzlichen Dank an @lle, die mir hier mit Rat und Tip geholfen haben!!
Viele Grüße und noch ein schönes WE,
KoSte
Antwort 8 von rainberg
Hallo KoSte,
hab mir Deine Datei mal angeschaut und muss sagen, dass Du mit dem Ergebnis der Aussage Deiner Ausgangsfrage
untreu geworden bist.
Um Dein erzieltes Ergebnis zu erhalten reicht folgende Matrixformel ohne Zwischenschritte
=WECHSELN(WECHSELN(WECHSELN(A4;ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
Anbei noch mal die Datei.
http://rapidshare.com/files/164248235/test4.xls.html
Gruß
Rainer
hab mir Deine Datei mal angeschaut und muss sagen, dass Du mit dem Ergebnis der Aussage Deiner Ausgangsfrage
Zitat:
Ich habe vor, ein Standardformat zu erstellen mit dem Format "XXX-YY-ZZZZ".
Ich habe vor, ein Standardformat zu erstellen mit dem Format "XXX-YY-ZZZZ".
untreu geworden bist.
Um Dein erzieltes Ergebnis zu erhalten reicht folgende Matrixformel ohne Zwischenschritte
=WECHSELN(WECHSELN(WECHSELN(A4;ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
Anbei noch mal die Datei.
http://rapidshare.com/files/164248235/test4.xls.html
Gruß
Rainer
Antwort 9 von rainberg
Hallo noch mal,
die Formel kann noch verkürzt werden, indem man die Funktion ABS() weg lässt.
=WECHSELN(WECHSELN(WECHSELN(A4;RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
Gruß
Rainer
die Formel kann noch verkürzt werden, indem man die Funktion ABS() weg lässt.
=WECHSELN(WECHSELN(WECHSELN(A4;RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
Gruß
Rainer
Antwort 10 von KoSte
Guten Morgen!
@Rainberg:
Inwiefern bin ich meiner ursprünglichen Aussage untreu geworden?
Ich vermute, dass Du davon ausgegangen bist, dass "XXX-YY-ZZZZ" immer die gleiche Anzahl haben sollte, also die Zahlen (hier Z) immer vier sein sollen.
Sorry, das war dann mein Fehler, das sollte nicht so sein. Es sollen natürlich nur die Buchstaben und Zahlen ausgegeben werden, welche auch im unformattierten Zustand da waren.
Werde mir also beim nächsten Mal mehr Mühe geben und genauere Angaben machen, bzw. Beispiele bringen.
Deine Lösung ist super: kurz, knapp, und vor allem: nur ein Schritt!!!
Ich bin begeistert! (wenn auch bei
Zitat
die Formel kann noch verkürzt werden, indem man die Funktion ABS() weg lässt.
=WECHSELN(WECHSELN(WECHSELN(A4;RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
die ABS-Funktion noch da ist.
Aber auch mit: Deine Funktion liefert genau das Ergebnis, das ich brauche!
SUPER, vielen Dank!!!
KoSte
@Rainberg:
Inwiefern bin ich meiner ursprünglichen Aussage untreu geworden?
Ich vermute, dass Du davon ausgegangen bist, dass "XXX-YY-ZZZZ" immer die gleiche Anzahl haben sollte, also die Zahlen (hier Z) immer vier sein sollen.
Sorry, das war dann mein Fehler, das sollte nicht so sein. Es sollen natürlich nur die Buchstaben und Zahlen ausgegeben werden, welche auch im unformattierten Zustand da waren.
Werde mir also beim nächsten Mal mehr Mühe geben und genauere Angaben machen, bzw. Beispiele bringen.
Deine Lösung ist super: kurz, knapp, und vor allem: nur ein Schritt!!!
Ich bin begeistert! (wenn auch bei
Zitat
die Formel kann noch verkürzt werden, indem man die Funktion ABS() weg lässt.
=WECHSELN(WECHSELN(WECHSELN(A4;RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1));"");" ";"-");"-";"";2)&"-"&ABS(RECHTS(A4;ANZAHL(RECHTS(A4;SPALTE(1:1))*1)))
die ABS-Funktion noch da ist.
Aber auch mit: Deine Funktion liefert genau das Ergebnis, das ich brauche!
SUPER, vielen Dank!!!
KoSte
Antwort 11 von KoSte
@Rainberg:
ich korrigiere mich: im erste Teil Deiner Funktion ist die ABS-Func. ja weg...sowas auch ;-)
ich korrigiere mich: im erste Teil Deiner Funktion ist die ABS-Func. ja weg...sowas auch ;-)
Antwort 12 von rainberg
Hallo KoSte,
sorry, für das Missverständnis.
Ich meinte die Funktion ABS() im vorderen Formelteil.
Im hinteren Formelteil muss sie bleiben.
Gruß
Rainer
sorry, für das Missverständnis.
Ich meinte die Funktion ABS() im vorderen Formelteil.
Im hinteren Formelteil muss sie bleiben.
Gruß
Rainer
Antwort 13 von KoSte
Vielen Dank, rainberg, es läuft einwandfrei!
Ich bin schier begeistert!!!!!!!!!
Danke natürlich auch an alle anderen...
Ich bin schier begeistert!!!!!!!!!
Danke natürlich auch an alle anderen...
Ich möchte kostenlos eine Frage an die Mitglieder stellen:
Ähnliche Themen:
- Wie programmiere ich ein Makro in Excel damit ich von Zelle a1 zu Zelle a2 automatisch weiterhüpfe nach drücken der Entertaste
- Excel : In einer Zelle hinterlegter Hyperlink in Zelle daneben in Textform anzeigen lassen
- Excel: SVERWEIS; zwei Spalten Auswahl in einer Zelle anzeigen
- excel - werte zählen auch wenn sie doppelt in einer Zelle vorkommen
- Zeichen in Zelle zaehlen

