Supportnet Computer
Planet of Tech

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

Hallo KoSte,

anbei ein Vorschlag.

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

Gruß
Rainer

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

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

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

hi all :-)

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

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

Antwort 8 von rainberg

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

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

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

@Rainberg:
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

Antwort 13 von KoSte

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