Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1368to1372
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
Inhaltsverzeichnis

2 Fragen zu Zeichenketten

2 Fragen zu Zeichenketten
02.07.2014 21:15:56
Sibylle
Guten Abend,
in A2 und in A3 stehen Zeichenketten.
Wie ermittelt man in A2 die Position der ersten Ziffer und wie
in A3 die Position des ersten Buchstabens?
Sonderzeichen sind keine enthalten.
Gruß
Sibylle

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Fragen zu Zeichenketten
02.07.2014 22:05:01
Josef
Hallo Sibylle
Das kannst du mit folgenden Array-Formeln berechnen.
Tabelle1

 ABC
2wert344z51. Ziffer
32we2344z21. Buchstabe

Formeln der Tabelle
ZelleFormel
B2{=VERGLEICH(1;--ISTZAHL(--TEIL(A2;ZEILE(1:99); 1)); 0)}
B3{=VERGLEICH(0;--ISTZAHL(--TEIL(A3;ZEILE(1:99); 1)); 0)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruss Sepp

Anzeige
Das ist dann 3a! Wusst'ich's doch! ;-) Gruß owT
02.07.2014 22:23:58
Luc:-?
:-?

Dank und 2 Zusatzfragen
03.07.2014 11:36:42
Sibylle
Hallo Sepp,
ich danke für Deine Matrixformeln.
Nun ergeben sich dennoch für meine Mappe Fragen dazu:
Frage 1:
Kopiert man die Formeln nach unten so ändert sich der Formelteil zeile(1:99), was weiter unten in der Liste zu Fehlern führen kann.
Wie kann man zeile(1:99) konstant halten, damit ein Kopieren der Formel sinnvoll wird?
Frage 2:
Meine ursprüngliche Frage von gestern war von mir fehlerhaft gestellt worden.
Ich korrigiere und hoffe nun alle Aspekte zu berücksichtigen:
Die Daten können so aussehen:
DE8989
ESP78
88KD
324Z
Daraus soll wie folgt gesplitet werden:
Spalte A Spalte B Spalte C
DE8989 DE 8989
ESP78 ESP 78
88KD 88 KD
324Z 324 Z
Ich würde mich sehr freuen, wenn Du Dir die Zeit nehmen würdest und eine Lösung für die Fragen aufzeigen könntest.
Besten Dank im voraus für die Mühen.
Einen schönen Tag.
Viele Grüße
Sibylle

Anzeige
zwei Antworten ..
03.07.2014 14:17:17
der
Hallo Sibylle,
... Sepp ist momentan offensichtlich anderweitig gebunden, deshalb spring ich für ihn mal ein.
zur 1.) Frage einfach anstelle ZEILE(1:99) dann ZEILE($1:$99) schreiben
zur 2.) Frage Hier ergibt sich z.B. nachfolgender Formellösungsvorschlag:
 ABC
1   
2DE89898989DE
3ESP7878ESP
4456 456
5abcf abcf
688KD88KD
7324Z324Z
8   

Formeln der Tabelle
ZelleFormel
B2=WENN(ISTZAHL(A2); "";WENNFEHLER(WENNFEHLER(VERWEIS(9^9;--LINKS(A2;SPALTE(A:Z))); VERWEIS(9^9;--RECHTS(A2;SPALTE(A:Z)))); ""))
C2=WECHSELN(A2;B2;"")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Anzeige
AW: zwei Antworten ..
03.07.2014 15:22:42
Daniel
HI
nur mal so grundsätzlich:
damit der Rechner nicht zuoft umsonst arbeiten muss, würde ich aus:
Zeile(1:99) immer Zeile(A1:A99) machen und aus
Spalte(A:Z) immer Spalte(A1:Z1).
Gruß Daniel

ist mW nicht wirklich notwendig , denn ...
03.07.2014 15:44:13
der
Hallo Daniel,
... ich meine mal gelesen zu haben, dass die entsprechende interne Excelfunktionalität so abgestellt ist, dass intern nur das relevante ausgewertet wird, somit spricht nicht gegen die verkürzte Form. Ich lasse mich aber gern eines anderen belehren.
Gruß Werner
.. , - ...

AW: ist mW nicht wirklich notwendig , denn ...
03.07.2014 16:10:20
Daniel
nunja, Excel berechnet eine Formel immer dann neu, wenn im Zellbereich, der von der Formel verwendet wird, eine Änderung stattfindet.
dh eine Formel mit Zeile(1:99) wird auch dann neu berechnet, wenn du in B1 was änderst oder auch in XFD99, weil diese Zellen zum verwendeten Zellbereich gehören.
eine Formel mit Zeile(A1:A99) wird bei einer Eingabe in B1 nicht neu berechnet, weil B1 nicht zum verwendeten Zellbereich gehört.
dh mit Zeile(1:99) machst du die Formel halb-volatil, weil sie quasi bei jeder Änderung auf diesem Blatt (dh bei allen oberhalb der Zeile 100) neu berechnet wird.
Das dürfte aber in den meisten Fällen nicht erforderlich sein.
Gruß Daniel

Anzeige
Argumentation klingt zwar schlüssig, aber ...
03.07.2014 16:42:56
der
Hallo Daniel,
... mir ist bisher nicht bekannt das ZEILE() und SPALTE() volatile Funktionen wären. Woher stammt Dein diesbzgl. Wissen?
Außerdem, hatte ich hier z.B. zuerst anstelle
=WENN(ISTZAHL(A2);"";WENNFEHLER(WENNFEHLER(VERWEIS(9^9;--LINKS(A2;SPALTE(A:Z)));VERWEIS(9^9; --RECHTS(A2;SPALTE(A:Z))));""))
die Formel =WENN(ISTZAHL(A2);"";WENNFEHLER(WENNFEHLER(VERWEIS(9^9;--LINKS(A2;SPALTE(1:1)));VERWEIS(9^9;--RECHTS(A2;SPALTE(1:1))));""))
Beide bringen natürlich das gleiche Ergebnis (wenn A2 max. 26 Zeichen lang ist, wovon ich ausgegangen war). Nach Deinen Angaben müsste man nun meinen, meine hier die zuerst genannte Formel sei von Haus aus schon ungünstiger, als die zweite (weil diese nur 16384 Zellen auf Veränderung hin abklopfen muss)
Aber auf meinem altersschwachen PC habe ich die (mehr gefühlsmäßige) Erfahrung gesammelt, das es genau umgekehrt ist.
Bin nun gespannt was andere, z.B. Luc dazu schreiben.
Gruß Werner
.. , - ...

Anzeige
AW: Argumentation klingt zwar schlüssig, aber ...
03.07.2014 17:10:45
Daniel
Hi
es geht mir nicht um die Rechenzeit der Formel selbst, sondern darum, wann und wie oft sie neu berechnet wird und ob diese Neuberechung notwendig ist.
Zeile() in Spalte() sind per se nicht volatil, aber jeder Formel wird quasi (hier nicht als Füllwort gedacht) volatil, wenn sie einen genügend grossen Zellbereich referenziert, da die Formel immer dann neu berechnet wird, wenn im Referenzierten Zellbereich eine Änderung passiert.
Wenn du das ganze Blatt referenzierst, dann wird die Formel auch bei jeder Änderung neu berechnet.
mach mal folgendes:
1: schreibe in A1 die Formel: =Zeile(1:1)
2: schreibe in A2 die Formel: =Zeile(A2)
3: lass dir mit folgendem Code im Calculate-Event anzeigen, wann das Calculate-Event ausgelöst _ wird (bei jeder Neuberechnung einer Formel wird ein Zähler hochgezählt) Private Sub Worksheet_Calculate() Range("A3").Value = Range("A3").Value + 1 End Sub
4: ändere in den Zeilen 1 und 2 in den anderen Spalten beliebig Werte und beobachte dabei, ob das Calculate-Event ausgelöst wird oder nicht (Zähler in A3 wird hochgezählt)
vielleicht verstehst du dann, worauf ich hinaus will.
Gruß Daniel

Anzeige
nachvollziehbar, aber ...
04.07.2014 14:53:01
der
Hallo Daniel,
... für mich momentan noch kein wirklicher Beweis dessen, dass im Standardexcel das System genau so reagiert, wie unter und mit VBA aufzeigt wird.
Ich hege noch immer (Rest-)Zweifel bzgl. der Gültigkeit Deiner Aussagen für Standardexcel ohne VBA. Aber da ich keinen Gegenbeweis erbringen kann, ist es natürlich für evtl. Mitleser sinnvoll, Deine Aussagen, die ja zudem durch die Aussagen von Luc gestützt werden, zu beachten.
Gruß Werner
.. , - ...

AW: Ok, dann ein Formelbeispiel
04.07.2014 16:12:37
Daniel
Hi
ok, dann mal ein Formelbeispiel, bei dem man den Unterschied zwischen Spalte(A:Z) und Spalte(A1:Z1) spüren kann.
Um die Rechenzeit auf einen erlebbaren Wert zu bringen, wurde noch ein SVerweis als rechenintensive Funktion hinzugefügt, das ist nur dazu da, damit du direkt siehst, wann eine Neuberechnung der Formeln erfolgt und wann nicht.
Das Workbook-Open-Makro erstellt nur die entsprechnenden Formeln, diese werden erst beim Öffnen hinzugefügt, damit die Datei auf dem Server nicht soviel platz benötigt.
auf dem ersten Blatt habe ich deine Formel direkt verwendet (also mit Spalte(A:Z)), auf dem zweiten Blatt dann mit meinem Optimierungsvorschlag (Spalte(A1:Z1))
Ändere jetzt einfach mal auf beiden Blättern in den Zellen ab Spalte C und unterhalb der Zeile 1 ein paar Werte und ich hoffe, du merkst den Unterscheid.
https://www.herber.de/bbs/user/91385.xlsm
Gruß Daniel

Anzeige
schau ich mir noch an ...
04.07.2014 16:53:57
der
Hallo Daniel,
... heute komme ich nicht mehr dazu.
Gruß Werner
.. , - ...

angesehen und nun überzeugt ...
07.07.2014 09:21:37
der
Hallo Daniel,
... Dein neues Beispiel hat mich überzeugt.
Da ich bisher selten mit großen Datenmengen zu tun hatte, ist mir das so noch nie bewusst geworden, zumal ich bisher auch immer von den von mir bereits zuvor beschriebenen ausging.
Auf Grund dessen ordne ich nun für mich die Funktionen ZEILE() und SPAlTE() natürlich nur in der Schreibweise ZEILE(#:##) bzw SPALTE(X:XX) als "interne Matrixfunktionen" analog z.B. SUMMENPRODUKT() ein. Dann wird es für mich wieder einigermaßen erklärbar.
Vielen Dank für Deine Ausführungen.
Gruß Werner
.. , - ...

Anzeige
AW: aber wahrscheinlich immer noch nicht verstande
07.07.2014 16:27:11
Daniel
Hi
Schön, dass ich ich dich überzeugen konnte, aber deine Anmerkung lässt mich vermuten, dass du mich immer noch nicht ganz verstanden hast.
Spalte() und Zeile() sind selbst noch keine Matrix-auslösenden Funktionen.
Das Problem ist folgendes:
Der Inhalt des Zellbereichs, den du innerhalb von Zeile() oder Spalte() angibt, hat keinen Einfluss auf das Ergebnis der Formel, trotzdem löst eine Änderung innerhalb dieses Zellbereichs eine Neuberechnung der Formel aus, obwohl dies gar nicht notwendig ist.
Um jetzt die Anzahl dieser unnötigen Neuberechnungen zu minimieren, sollte man auch den Zellbereichs innerhalb so klein wie möglich wählen.
Mit Spalte(A:Z) referenziest du auf 27 Millionen Zellen, welche theoretisch eine unnötige Neuberechnung auslösen können, mit Spalte(A1:Z1) nur auf 26.
Gruß Daniel

Anzeige
ich hatte es und Dich schon verstanden, ...
07.07.2014 16:43:17
der
Hallo Daniel,
... aber Du diesmal nicht, was und wie ich es meinte.
Ohne dies jetzt weiter zu hinterlegen, wiederhole ich nur, was ich schrieb: "... zumal ich bisher auch immer von den von mir bereits zuvor beschriebenen ausging. Auf Grund dessen ordne ich nun für mich... dann wird es für mich wieder einigermaßen erklärbar".
Gruß Werner
.. , - ...

AW: ich hatte es und Dich schon verstanden, ...
07.07.2014 17:46:19
Daniel
wenn du es verstanden hast, dann ist ja gut.
die Zeile() oder Spalte()-Funktion sind halt nun mal keine "internen Matrix-Funktionen" wie Summenprodukt, aber wenn dir das beim Verständnis hilft...
Das Problem, über das wir hier reden, hat ja auch nichts mit Matrix-Funktionen zu tun, sondern gilt eigentlich für alle anderen Formeln auch.
Gruß Daniel

das war sehr überzeugend ,,,
07.07.2014 10:09:52
Matthias
Hallo Daniel
Auch ich lese ja viel mit und habe wie Werner auch Deine Bsp.Datei wie Du beschrieben hast getestet
Deine Argumentation ist sehr überzeugend dargestellt.
Daumen hoch :-)
Gruß an alle
Matthias

Ja, Werner, mehr als Daniel dir nun mitgeteilt ...
03.07.2014 18:41:07
Luc:-?
…hat, hätte ich auch nicht schreiben können bzw wollen. Jede Fml wird neu berechnet, wenn sich in ihrem Einzugsbereich etwas ändert, egal, ob sie nun auch einen Wert aus diesem Bereich benötigt oder nur einen Index bzw eine Anzahl zurückgibt wie ZEILE[N] bzw SPALTE[N]. Der Einzugsbereich wird ja auch im FmlAssi entsprd eingerahmt dargestellt.
Insofern ist es tatsächlich richtiger, vollständig zu referenzieren und, falls sich die Adresse nicht anpassen soll, wie hier, absolute Adressierung zu benutzen. Einen Makel haben derartige Konstrukte aber auf jeden Fall → auch absolute Adressen ändern sich, wenn Zeilen/Spalten hinzugefügt bzw gelöscht wdn. Kann das ggf die Fml derart verfälschen, dass sie falsche Ergebnisse liefert, sollte man dann doch wohl besser ZEILE(INDIREKT("1:99")) einsetzen, wenn man sich die Mühe einer elend langen MxKonstante ersparen will, denn dann ist der Einzugsbereich wurst, wahrscheinlich auch für die FmlNeuBerechnung, denn dann wird sie immer neu berechnet. ;-]
Ich sagte es bereits, Xl ist recht mickrig mit TextVerarbeitungsfktt ausgestattet. Hier würde aber schon eine Fkt hilfreich sein, die eine IntervallAngabe (meinethalben in TextForm) in die zugehörigen Einzelwerte übersetzt. Das wäre dann änderungsstabil ohne gleichzeitig volatil sein zu müssen. ;-)
Gruß, Luc :-?
Besser informiert mit …

festzuhalten ist jedoch, ...
04.07.2014 14:54:56
der
Hallo Luc,
... ich stellte und stelle natürlich keinesfalls in Abrede, dass "Jede Fml wird neu berechnet, wenn sich in ihrem Einzugsbereich etwas ändert", denn anderenfalls würde ja Excel nicht richtig funktionieren können.
Ich habe nur gewissen Zweifel, ob dies so restriktiv gerade auch für die Funktionen ZEILE() und SPALTE() gilt, wenn doch von diesen nur ein Bruchteil deren Elemente und quasi nur virtuell (nicht der betroffene eigentliche Zellinhalt) für die eigentliche Auswertung einer bzw. bestimmter Formel benötigt werden.
Daniel hat mit Hilfe von VBA aufgezeigt, dass Eure Aussagen fundamentiert seien. Trotzdem bin ich noch nicht restlos überzeugt. Aber das ist nun nicht Euer Problem.
Allerdings Luc,
... Deine Aussage "...wohl besser ZEILE(INDIREKT("1:99")) einsetzen" verbunden mit Deiner Begründung ist im diesem Zusammenhang betrachtet, mE zumindest unglücklich. Du würdest also eher echte volatile Funktion(en) einsetzen, nur um absolute Adressierung wegen möglichen Einschüben/Löschungen zu vermeiden? Wieso meinst Du noch immer, dass man diese nur durch "eine elend langen MxKonstante" ersetzen könne? Mit Hilfe der nicht volatile Funktion INDEX() wird diese Beispielformel zwar ein klein wenig länger, aber doch keinesfalls "elend lang". Bzgl. INDIREKT() kann ich nur wiederholen, diese vermeide ich, wo nur irgend möglich. Dies bringt mE mehr Nutzeffekt, als das, was wir hier diskutieren. Aber da wären wir schon wieder bei unserem kleinen anderen Disput von neulich.
Einigen wir uns bzgl. des hier diskutierten vielleicht so: Ihr habt nichts Falsches gesagt, aber damit leider auch mir noch nicht meine (Rest-)Zweifel genommen. ich kann damit allerdings "leben".
Dir nun ein schönen sonnigen Tag noch.
Gruß Werner
.. , - ...

AW: festzuhalten ist jedoch, ...
04.07.2014 16:19:42
Daniel
Hi
ja, der von Luc gemachte Vorschlag: ZEILE(INDIREKT("1:99")) ist natürlich in Bezug auf das von mir angesprochene Performanceproblem "unnötige Neuberechnung der Formeln" absolut kontraproduktiv.
Ihm gehts ja auch hier um ein ganz anderes Thema, nämlich die Empfindlichkeit einer Formel gegen das Einfügen oder löschen von Zellen.
um beide fälle abzudecken, wäre mein Vorschlag:
Zeile(Index(A:A;1):Index(A:A;99))
Gruß Daniel

im Prinzip ...
04.07.2014 16:59:06
der
Hallo Daniel,
... ich hatte vorhin offensichtlich vergessen, meine INDEX()-Formel dafür einzustellen.
Die ist aber im Prinzip fast gleich: =ZEILE(INDEX(Z:Z;1):INDEX(Z:Z;99)). Hat nur den kleinen Vorteil, dass man auch ganz links Spalten löschen kann.
Gruß Werner
.. , - ...

Ja, an euren Bspp kann man gut erkennen, dass ...
05.07.2014 00:44:12
Luc:-?
…es sich hier um einen Teufelskreis handelt, Werner und Daniel;
entweder lösch-/einschubstabil und dafür Neuberechnung öfter als erforderlich (ggf bei jeder Änderung) und längere Fml oder kurze Fml und Reaktion auf jede Änderung im Bereich inkl Löschungen/Einschüben. Letzteres habe ich schon erlebt bei großen Bereichen über 1000 Zeilen (weil die Fml derartige Konstanten benötigte). Macht man so etwas, muss so ziemlich alles, was nach dieser Fml kommt, für derartige Aktionen tabu sein, was man in der Praxis und bei ggf mehreren Bearbeitern kaum gewährleisten kann.
Abhilfe kann hier wohl nur eine UDF schaffen, die einfach notierte Intervalle auswerten kann, ansonsten blieben nur definierte Namen, zB alfa:=AUSWERTEN("zeile(1:10)"). Aber ob die ggf auch volatil reagieren (weiß evtl das OlXl-Tutorial)…
Gruß, Luc :-?

AW: Irrtum Luc!...
05.07.2014 03:34:04
Daniel
es braucht keine UDF, Namen oder sonstige aufwendige Konstrukte, um die in diesem Tread genannten Probleme in den Griff zu bekommen.
man muss eigentlich nur die Zellbezüge in der Zeile() oder Spalte()-Funktion (welche man ja nur benötigt, um eine Schleife von 1-x innerhalb der Formel zu erzeugen) auf ein ansonsten unbenutztes Tabellenblatt legen und dieses Blatt ausblenden, so dass kein Anwender darauf Werte eingeben oder Zellen löschen oder einfügen kann!
Dann ist alles easy und man kann auch problemlos mit ganze Spalten oder Zeilen referenzieren, ohne negative Auswirkungen auf die Performance zu bekommen.
Gruß Daniel

Na, ob das besser ist, wissen wohl allein die ...
05.07.2014 20:03:45
Luc:-?
…xlGötter, Daniel;
auf jeden Fall ist das ja beinahe noch umständlicher! Und wenn nun ein DAU dieses Blatt doch entdeckt und darin rumpfuscht, was dann?
Bin jetzt mal 'ne Woche weg!
Gruß, Luc :-?

AW: Na, ob das besser ist, wissen wohl allein die ...
05.07.2014 21:29:41
Daniel
Hi Luc!
naja, wer ein VeryHiddenSheet findet und einblendet ist nun wirklich kein DAU mehr.
wer hingegen erwartet, dass man mit Excel absolut wasserdichte und gegen alle Fehlbedienung unempfindliche Anwendungen schreiben könnte, der fällt meiner Ansicht nach unter die Kategogire DAP.
Die Anwender sind doch meistens klüger, als die Menschen, die immer unbedingt was zum nörgeln finden müssen und wenn man denen sagt: da die Finger weglassen, dann kapieren die meisten das auch.
Gruß Daniel

Hoffentlich! Habe aber schon Anderes gelesen!
06.07.2014 00:27:05
Luc:-?
Ciao, Luc :-?

AW: Hoffentlich! Habe aber schon Anderes gelesen!
08.07.2014 11:24:54
Daniel
Das stimmt, aber da hat man den Eindruck, die Schreiben ihre Makros für ne GeW und nicht für normale Büroangestellte.

Danke und noch eine Frage ...
03.07.2014 15:50:03
Sibylle
zum Verständnis.
Hallo Werner,
besten Dank für Deinen Beitrag.
Frage 1 ist jetzt verstanden.
Lösung 2 beschäftigt mich bestimmt noch einige Zeit .... bis verstanden.
Eine Frage zu dem ganzen Komplex:
Weshalb funktioniert nicht folgende Formel, die prüfen soll, ob das erste Zeichen einer Zeichenkette eine Ziffer oder ein Buchstabe ist?
=WENN(VERGLEICH(1;ISTZAHL(LINKS(A24;1)*1)*1;0);"Z";"B")
Die 2 Minuszeichen haben vermutlich den Sinn der Funktion Wert()?
Dank im voraus.
Gruß
Sibylle

noch zwei Antworten ...
03.07.2014 16:02:27
der
Hallo Sybille,
... zu 1) in Deiner Teilformel gibt es keine Bereichsmatrix, sondern nur das erste Zeichen aus der Zelle A24, damit kann VERGLEICH() nichts anfangen. Außerdem würde auch nur geprüft ob es mit einer 1 beginnt wenn ... und ... (das würde jetzt ausufern.
zur 2.) die zwei Minuszeichen (doppelte Negation) sind einer zusätzliche Addition einer 0 oder einer Multiplikation mit 1 gleichzusetzen und machen bei (Ziffernzeichenfolgen) durch die mathem. Operation einen echten Zahlenwert. Dies ziehen viele der Funktion WERT() vor.
Gruß Werner
.. , - ...

Danke
03.07.2014 16:11:45
Sibylle
für die Erklärungen, die zu einer Änderung geführt haben:
'=WENN(ISTZAHL(LINKS(A5;1)*1);"Z";"B")
Damit hat sich mein Excelwissen ein klein wenig verändert. Es gibt noch viel zu tun.
Ich danke für Dir für Deine Hilfen.
Viele Grüße
Sibylle

Das war nicht dein HauptFehler, ...
04.07.2014 01:11:01
Luc:-?
…Sibylle,
sondern der bestand darin, dass du von deinen Lösungsversuchen ausgegangen bist, also einem Zwischenschritt, und nicht dein eigent­liches Problem genannt und auch kein Real-Bsp gegeben hast. Ein typischer Fehler, der oft gemacht wird, weshalb professio­nellen Problem­lösern beigebracht wird, immer nach dem wahren Problem hinter dem angegebenen vermeintlichen zu bohren!
So einfach wie du das jetzt darstellst (immer nur ein numerischer und ein alphabetischer Teil in wechselnder Reihenfolge) könnten Lösungen auf der Grundlage von 3a (ursprgl Sepp B.) und meinem 3b so aussehen (wobei ich mal ein INDIREKT in a eingebaut habe und den numerischen Teil in echte Zahlen umwandle):
 EFGHIJ
22Original3a: Teil 1Teil 23b: Teil 1Teil 2FmlLängen
23DE8989DE8989DE8989 F23:  213
24ESP78ESP78ESP78 G23:  229
2588KD88KD88KD H23:    69
26324Z324Z324Z  I23:    69
27F23[:F26]: {=WENN(ISTZAHL(--LINKS($E23));--TEIL($E23;1;VERGLEICH(1;--ISTFEHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0)-1);TEIL($E23;1;VERGLEICH(1;--ISTZAHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0)-1))}
28G23[:G26]: {=WENN(ISTZAHL(--LINKS($E23));TEIL($E23;VERGLEICH(1;--ISTFEHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0);LÄNGE($E23));--TEIL($E23;VERGLEICH(1;--ISTZAHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0);LÄNGE($E23)))}
29H23[:H26]:=WENN(ISTZAHL(--LINKS($E23));--MaskOn($E23;"num");MaskOn($E23;"alf"))
30I23[:I26]:=WENN(ISTZAHL(--LINKS($E23));MaskOn($E23;"alf");--MaskOn($E23;"num"))

Man sieht hier auch sehr schön, wie schnell bei einer scheinbar simplen Aufgabe MonsterFmln entstehen können, weil Xl auf Textgebiet nun mal recht mickrig mit Fktt ausgestattet ist.
Hier noch mal die MonsterFmln 3a in ganzer Pracht und Größe:
F23[:F26]: {=WENN(ISTZAHL(--LINKS($E23));--TEIL($E23;1;VERGLEICH(1;--ISTFEHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0)-1);TEIL($E23;1;VERGLEICH(1;--ISTZAHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0)-1))}
G23[:G26]: {=WENN(ISTZAHL(--LINKS($E23));TEIL($E23;VERGLEICH(1;--ISTFEHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0);LÄNGE($E23));--TEIL($E23;VERGLEICH(1;--ISTZAHL(--TEIL($E23;ZEILE(INDIREKT("1:"&LÄNGE($E23)));1));0);LÄNGE($E23)))}
Die brauchbare AltVersion von MaskOn findest du übrigens hier!
Gruß, Luc :-?
Besser informiert mit …

Da gibt's viele Möglichkeiten, ...
02.07.2014 22:20:00
Luc:-?
…Sibylle,
weshalb ich dir hier mal ein paar davon zusammenstelle.
1a MxFml - klassisch lang:
{=SUCHEN(MIN(WENNFEHLER(--TEIL(A2;ZEILE(INDIREKT("1:"&LÄNGE(A2)));1);""));A2)}
{=MIN(SUCHEN(WENN(ISTZAHL(--TEIL(A3;ZEILE(INDIREKT("1:"&LÄNGE(A3)));1));"-";TEIL(A3; ZEILE(INDIREKT("1:"&LÄNGE(A3)));1));A3&"-")) }
1b MxFml - kürzer, Analogon mit UDF:
{=SUCHEN(MIN(WENNFEHLER(--T2CharVect(A2);""));A2)}
{=MIN(SUCHEN(WENN(ISTZAHL(--T2CharVect(A3));"-";T2CharVect(A3));A3&"-"))}
2a MxFml - ohne UDF, wieder etwas länger:
{=MIN(WENNFEHLER(SUCHEN("#";WECHSELN(A2;ZEILE(1:10)-1;"#"));""))}
{=MIN(WENNFEHLER(SUCHEN("#";WECHSELN(GROSS(A3);ZEICHEN(ZEILE(1:26)+54);"#"));""))}
3b NormalFml - am kürzesten mit UDF: (→ ist sogar im Archiv zu finden!)
=SUCHEN(LINKS(MaskOn(A2;"num"));A2)
=SUCHEN(LINKS(MaskOn(A3;"alf"));A3)
Zu 2b habe ich gerade nicht die entsprd Datei offen und zu 3a wirst du allenfalls noch bei Xl-Fmln fündig, falls soetwas hier nicht jemand direkt beisteuert.
Falls du 3b verwenden möchtest, verwende die Version, die ich nochmal eingestellt hatte, weil die alte von 2005 inzwischen von der reformierten Forumssoftware zerschossen wurde.
2a reagiert nicht auf Umlaute und ß, die müssten extra gewechselt wdn!
Meine Testdaten waren A2 abcd1,e2fgh und A3 1234a;5b678!
Gruß, Luc :-?
Besser informiert mit …

Luc, besten Dank
03.07.2014 16:13:38
Sibylle
Hallo Luc,
besten Dank für Deine Formelzusammenstellung, auf die ich bestimmt häufig zugreifen werde.
Einen schönen Abend.
Gruß
Sibylle

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige