online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon KoSte vom 14.11.2020, 22:24 Options

Lösung

Excel: wie kann ich in einer Zelle nach dem Vorkommen von zwei unterschiedlichen Zeichen durchsuchen?

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 schreiben

Antwort 1 von rainberg vom 14.11.2020, 23:43 Options

Hallo KoSte,

anbei ein Vorschlag.

http://rapidshare.com/files/163841671/Muster.xls.html

Gruß
Rainer

Antwort 2 von Beverly vom 15.11.2020, 09:08 Options

Hi,

wenn es nur darum geht Leerzeichen duch Bindestrich zu ersetzen, kannst du WECHSELN() verwenden

=WECHSELN(A1;" ";"-")

Bis später,
Karin

Antwort 3 von nighty vom 15.11.2020, 09:27 Options

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
Sub FunctionAufrufen()
Range("A1") = StrBe(Range("A1:A10"), 0, 1)
End Sub

Rem 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 Function

Antwort 4 von nighty vom 15.11.2020, 09:36 Options

hi all :-)

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 vom 15.11.2020, 09:41 Options

hi all :-)

vorschlaege wie kritik sind erwuenscht,da ich sonst ja mit excel nicht arbeite :-))

gruss nighty

Antwort 6 von KoSte vom 15.11.2020, 21:20 Options

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

Antwort 7 von KoSte vom 15.11.2020, 23:58 Options

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

Antwort 8 von rainberg vom 16.11.2020, 09:02 Options

Hallo KoSte,

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".

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 vom 16.11.2020, 09:24 Options

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

Antwort 10 von KoSte vom 16.11.2020, 10:42 Options

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

Antwort 11 von KoSte vom 16.11.2020, 10:42 Options

@Rainberg:
ich korrigiere mich: im erste Teil Deiner Funktion ist die ABS-Func. ja weg...sowas auch ;-)

Antwort 12 von rainberg vom 16.11.2020, 10:58 OptionsLösung

Lösung
Hallo KoSte,

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 vom 16.11.2020, 12:30 Options

Vielen Dank, rainberg, es läuft einwandfrei!
Ich bin schier begeistert!!!!!!!!!
Danke natürlich auch an alle anderen...

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026