Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
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

Zeichen finden und text ausgeben

Zeichen finden und text ausgeben
14.02.2019 03:45:09
Elliss
Hallo Excelfreunde, ich benötige mal wieder eure hilfe.
Und zwar habe ich in Zelle A1 folgenden text stehen.
A1=Sprungwurf: sensationell|12 Reichweite: erstklassig|11 ↑ Außenvert.: sagenhaft|15 Handling: erstaunlich|10 Drive: beachtlich|7 Passen: erstaunlich|10 Zonenwurf: erstaunlich|10 ↑ Innenvert.: akzeptabel|6 Rebounden: beachtlich|7 Blocken: armselig|3 Ausdauer: armselig|3 Freiwurf: überzeugend|8 Erfahrung: armselig|3 Summe: 91 (65 + 26)
In B1 möchte ich nach dem ersten "↑" suchen und dann den text davor ausgeben.
In C2 möchte ich nach dem zweiten "↑" suchen und dann den text davor ausgeben.
usw. (max. 5)
Nach diesem Beispiel müsste die lösung also so lauten :
B1=Reichweite: erstklassig|11
C1=Zonenwurf: erstaunlich|10
kann mir da jemand weiterhelfen?
Eine testdatei kann ich auf Wunsch gerne erstellen.
Danke fürs lesen
mfg
Elliss

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

Betreff
Datum
Anwender
Anzeige
AW: nachgefragt ...
14.02.2019 15:07:25
neopa
Hallo Elliss,
... steht der gesuchte Text immer nach einer Zahl ab dem 2. "|" links vom jeweiligen "↑"? Oder?
Steht zwischen der Zahl, die vor dem gesuchten Textbeginn steht und dem "|" nie ein Leerzeichen?
Sind im Datenwert evtl. Zeilenumbrüche vorhanden?
Wie viele Datensätze sind denn auszuwerten?
Hier mal nur für B1 eine Formel, die für die folgenden Spaltenzellen schon komplexer werden.
In B1: =TEIL(LINKS(A1;FINDEN("↑";A1)-1);FINDEN("|";LINKS(A1;FINDEN("↑";A1)-1))+4;99)
Gruß Werner
.. , - ...
AW: nachgefragt ...
14.02.2019 16:30:54
Elliss
Hallo Werner
steht der gesuchte Text immer nach einer Zahl ab dem 2. "|" links vom jeweiligen "↑"? Oder?
Leider nein. die "↑" treten immer an einer anderen stelle auf aber immer nach dem "|xx"
A1 könnte zb auch so aussehen:
A1=Sprungwurf: sensationell|12 Reichweite: erstklassig|11 Außenvert.: sagenhaft|15 ↑ Handling: erstaunlich|10 Drive: beachtlich|7 Passen: erstaunlich|10 Zonenwurf: erstaunlich|10 Innenvert.: akzeptabel|6 Rebounden: beachtlich|7 Blocken: armselig|3 Ausdauer: armselig|3 Freiwurf: überzeugend|8 Erfahrung: armselig|3 Summe: 91 (65 + 26)
B1=Außenvert.: sagenhaft|15
C1=""
Steht zwischen der Zahl, die vor dem gesuchten Textbeginn steht und dem "|" nie ein Leerzeichen?
richtig
Sind im Datenwert evtl. Zeilenumbrüche vorhanden?
nein
Wie viele Datensätze sind denn auszuwerten?
im prinzip immer nur einer, aber der inhalt kann sich ändern. der aufbau bleibt aber gleich.
Sprungwurf-Reichweite-Außenvert usw bleib immer . nur der wert kann sich ändern (zwischen 1-20)
Deine Formel funktioniert leider nicht wenn der Pfeil an einer anderen stelle vorkommt.
gruß und danke für eure mühe
elliss
Anzeige
Testdatei nur nötig, wenn verschiedene Muster ...
14.02.2019 15:46:52
Luc:-?
…aus den Texten resultieren, Elliss;
ist es immer dasselbe wie hier gezeigt (gleiche Pfeile, Zeichen160 statt Leerzeichen vor nächster Rubrik), erübrigt sich das.
Problem scheint zu sein, dass SUCHEN keine Unicode-Zeichen (↑) findet (Arg2="*↑*"). Die UDF VLike (basiert auf VBA-Konstruktionen mit Operator Like) findet sie, ist aber anders ausgelegt, so dass sich (bei meinem vorerst gezeigten 1.Versuch) auch relativ lange Fmln ergeben könnten. In Kombination mit WECHSELN, ERSETZEN oder der UDF MaskOn könnte es auch günstigere Varianten geben.
B1:=TEIL(LINKS(A1;VLike(A1;"*↑*";1)-2);VLike(LINKS(A1;VLike(A1;"*↑*";1)-2);"*"&ZEICHEN(160)&"*";-1)+1;99)
Kommen nur maximal 2 ↑s vor, wird die 2.Fml auch nicht länger:
C1:=TEIL(LINKS(A1;VLike(A1;"*↑*";-1)-2);VLike(LINKS(A1;VLike(A1;"*↑*";-1)-2);"*"&ZEICHEN(160)&"*";-1)+1;99)
Anderenfalls wird sie deutlich länger:
C1:=TEIL(LINKS(TEIL(A1;VLike(A1;"*↑*";1)+2;999);VLike(TEIL(A1;VLike(A1;"*↑*";1)+2;999);"*↑*";1)-2);VLike(LINKS(TEIL(A1;VLike(A1;"*↑*";1)+2;999);
VLike(TEIL(A1;VLike(A1;"*↑*";1)+2;999);"*↑*";1)-2);"*"&ZEICHEN(160)&"*";-1)+1;99)

ArchivLinks:
VLike (Vs1.2 o.VPairs) https://www.herber.de/cgi-bin/callthread.pl?index=1247144#1247699
evtl auch MaskOn (Vs2.1) https://www.herber.de/forum/archiv/1344to1348/1344962_Initialen_bei_Doppelnamen.html#1345181
Hier wäre evtl mit Arg2="mrk…" (…=Start-&Endezeichen) etwas zu machen, wenn das letzte Zeichen160 vor ↑ als Startzeichen zuvor gg ein eindeutiges Einzelzeichen ausgetauscht würde.
Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
AW: Testdatei nur nötig, wenn verschiedene Muster ...
14.02.2019 16:37:49
Elliss
Hi Luc
Hoffe du bist mir nicht böse aber ich blicke mit meinem wissen da nicht ganz durch :D
Gruß
Elliss
Für Interessenten: Günstigere UDF-Alternative
14.02.2019 20:30:04
Luc:-?
Da die Texte offensichtlich doch nicht immer an den entscheidenden Stellen Zeichen160 enthalten, sollten zuvor alle Zeichen160 (geschützte Leerzeichen) in Zeichen32 (normale Leerzeichen) gewandelt wdn. Außerdem könnte auch noch WENNFEHLER erforderlich wdn.
Da offensichtlich nur SUCHEN mit Platzhaltern das Unicode-Problem hat, Fmln mit FINDEN aber noch länger wdn, hier eine mittellange Alternative (plurale MxFml), die auch mit fehlenden ↑ zurechtkommt:
B1:C1: {=WENNFEHLER(TEIL(Splint(WECHSELN(A1;ZEICHEN(160);" ");" ↑";1;MIN(2;CountOn(A1;"↑")));VLike(Splint(WECHSELN(A1;ZEICHEN(160);" ");" ↑";1;2);"*# *";-1)+2;99);"")}
Zusätzliche UDF-Links:
CountOn (Vs1.1) https://www.herber.de/forum/archiv/732to736/732035_Zaehlennwenn_mit_Zahlenkombinationen.html#734566
Splint (Vs1.2) https://www.herber.de/forum/archiv/1584to1588/t1584372.htm#1584465
Luc :-?
Anzeige
für Interessenten: Einfache UDF-Variante
14.02.2019 22:56:05
Daniel
mit folgender spezieller UDF
Function EllissSpezial(Txt, Trennzeichen, Pos As Long) As String
Dim TeilText As String
TeilText = Split(Txt, Trennzeichen)(Pos - 1)
Pos = InStrRev(TeilText, "|")
Pos = InStrRev(TeilText, "|", Pos - 1)
Pos = InStr(Pos, TeilText, " ")
EllissSpezial = Mid(TeilText, Pos + 1)
End Function
reicht dann diese Formel:
B1: =EllissSpezial($A$1;"↑";1)
C1: =EllissSpezial($A$1;"↑";2)
Gruß Daniel
OT: Wer universell schreibt, muss das Fahrrad ...
15.02.2019 00:08:36
Luc:-?
…nicht bei jeder Besonderheit neu erfinden. Ein aktuelles technisches Bsp* ist dafür die erreichte Lebensdauer von Opportunity → 12 Jahre statt geplanter 90 Tage! :-]
Wenn schon, müssten wohl besser alle Trenn- und Suchzeichen vorgebbar sein, am besten noch mit Alternativen, denn hier wird mal Zn32, mal Zn160 verwendet. Das hatte ich bereits angemerkt, weshalb das wenigstens in der resultierenden Fml zu berücksichtigen wäre. So ergibt sich für das 1.Bsp nämlich nur B1[:C1]: {"erstklassig|11 "."erstaunlich|10 "}. Ist nur ein ↑ oder keiner vorhanden, ent­steht Sinnloses oder ein Fehler, während meine darüber gezeigte Fml auch bei diesen Varianten das korrekte (von Ellis fett ausge­zeich­nete) Ergebnis liefert.
* Die NASA hätte sonst wohl Dtzde anstelle von damals nur 2 Rover senden müssen, und das an jede Einsatzstelle (ohne Erfolgsgarantie!)…
Luc :-?
Anzeige
wieviele Fahrräder entsprechen einem Marsrover
15.02.2019 01:00:33
Daniel
pder einem RollsRoyce?
meine UDF enthält weniger Funktionen als deine
15.02.2019 01:05:02
Daniel
Formel mit zusätzlich aufwendiger UDF unterstützung.
dh im prinzip brauche ich schon für das erstellen deiner Formel länger, als für das Schreiben meiner UDF.
dann ist es auch egal, ob die UDF nur für diese Datei tauglich ist oder nicht, deine Formeln musst du ja auch jedesmal neu erfinden.
Gruß Daniel
Aber nur die Fml und das muss auch jeder ...
15.02.2019 04:33:11
Luc:-?
…normale Fml-Nutzer tun! Das ist das GrundPrinzip jeder (klassischen) TabKalkulation!
Jedes besondere Xl-Tool ist dagg ein noch umfangreicheres Pgm, denn es muss ebenfalls mit verschiedenen Situationen umgehen kön­nen (wie der Marsrover).
Ich bin nicht der Meinung, dass eine Fml alle möglichen Eventualitäten abdecken muss, sie darf situationsbezogen sein. Dahingg sollte ein Pgm, das nicht nur zur Automatisierung eines ganz bestimmten Aufgabenkomplexes gedacht ist, verschiedene mögliche Situationen, an die ggf der Nutzer gar nicht gedacht hat, berücksichtigen. Eine gute UDF ist genauso wie StandardFktt ein solches Pgm. Du hingg bietest meist nur Lösungen für Teilaspekte an, die ggf an ähnliche Aufgaben angepasst wdn können bzw müssen oder in absehbarer Zeit vergessen wdn. So ein halbgewalktes Progrämmchen ist beileibe keine Herausforderung und erst recht kein Geniestreich. Jeder Fml-Crack leistet mehr!
Aber schnelle Ergebnisse sind ja so cool, nur meist nicht von Dauer. Das neue Mittelmaß feiert fröhliche Urständ… :->
Luc :-?
Anzeige
es muss ja nicht jede Lösung ein Genie-
15.02.2019 11:56:27
Daniel
streich sein.
Wenns einfache Lösungen tun, warum dann nicht die verwenden.
Ein Makro, dass in 10 min geschrieben ist, braucht auch keine lange Halbwertszeit.
und wenn ein Formelcrack mehr leistet, dann sei ihm das unbenommen, aber ich muss ja nicht mehr leisten als notwendig ist um die Aufgabe zu lösen.
Wenn es Antworter gibt, die hier unbedingt bei jeder sich bietenden Möglichkeit ihr Genie präsentieren zu müssen, dann sei ihnen das unbenommen, aber ich brauche das nicht.
Eben, dir geht's nur um schnelle Angebote, ...
15.02.2019 18:58:00
Luc:-?
…die man ggf auch per Handy in der S-Bahn schreiben kann, Daniel;
das ist keine sinnvolle Arbeitsweise, sondern eher recht anspruchslose Selbstbefriedigung.
Was soll das Nachschieben einer Trivial-UDF, die nicht mal das Wunschergebnis liefert geschweige denn geringe Variationen des Quell­Textes wie Verminderung der ↑-Anzahl zulässt, nachdem sich der Frage­steller bereits (mit ErgebnisAbstrichen) für eine weniger günstige Fml-Lösung ent­schie­den hatte, weil er wohl nichts mit VBA und damit UDFs anfangen kann und meine neue Lösung aus­drück­lich für evtl (andere) Inter­essenten (die damit etwas anfangen können) bestimmt war. Damit ist mit deinem BT keine Qualitäts­Steigerung auf­ein­an­der­fol­gen­der AWen fest­stell­bar — der einzig plausible Grund für solche BTe.
Deine UDF bedient, im Ggsatz zu meiner, zusätzlich die Meinung, dass VBA und damit auch eine UDF etwas grundsätzlich anderes als eine Xl-Fkt und auch grundsätzlich schlechter ist (was beides bei deiner ja sogar fast richtig ist). Außerdem scheint mir, dass du die Benutzung einer Fkt als Pgmmier-Hilfsmittel (für häufig wiederkehrende TeilAufgaben) mit der einer UDF im ZellFml-Einsatz ver­wech­selst. Über erstere hat der jeweilige Pgmmierer die volle Einsatz­Kontrolle, über letztere eben nicht. Deshalb muss eine solche UDF mehr können als nur das Nahe­liegendste aus einer Auf­gaben­Stel­lung, quasi all­gemeiner (ggf uni­ver­seller) sein. So etwas schreibt sich idR nicht mal eben so, neben­bei und immer wieder neu, je nach Bedarf!
Insofern ist das Instellungbringen einer solchen „UDF“ gg eine Fml, die die Zusammen­arbeit von Xl-Fktt und UDFs zeigt, kontra­pro­duk­tiv, Vorurteile befeuernd und verdächtig, reinem Selbstzweck o.ä. zu dienen.
Eine UDF (f.ZellFml-Einsatz) kann auch so konstruiert sein, dass sie längere Fmln erübrigt bzw verkürzt, wenn sie gleiche Kriterien ein­hält wie die meisten Xl-Fktt (dabei Orien­tierung zur höheren Qua­li­tät der­selben). Ansonsten soll­ten UDFs vor­rangig Lücken im Xl-Fkts­umfang schließen. Aber dazu muss man sie auch bewahren (ggf auch aktua­li­sie­ren) und nicht quasi auf Zuruf stets neu schreiben. Letz­teres kommt Xl-Ver­mül­lung gleich, quasi die Plastik­Abfälle im „Xl-Ozean“.
Luc :-?
Anzeige
AW: Eben, dir geht's nur um schnelle Angebote, ...
20.02.2019 17:08:30
Daniel
naja luc ,ich gehe mal davon aus, dass der Fragesteller eine schnelle Antwort bevorzugt.
ansonsten vertrete ich die Ansicht, dass jeder, der sich einen Quellcoede aus einer anonymen Quelle wie dem Internet kopiert, dies nur tun sollte, wenn er diesen Quellcode vollumfänglich versteht und diesen im Bedarfsfall auch anpassen und abändern kann.
Schließlich ist er für diesen Code so verantwortlich, als hätte er ihn selbst geschrieben.
(nicht zuletzt sollte für jeden Code auch eine vernünftige Dokumentation bestehen, die ja auch noch erstellen muss, wenn sie nicht mitgeliefert wird).
Müll ist immer nur dann ein Problem, wenn er nicht rückstandsfrei entsorgt werden kann.
eine spezifische UDF, welche nur für ein spezielles Problem benötigt wird, braucht auch nicht außerhalb der Datei gespeichert zu werden kann problemlos mit dieser Datei entsorgt werden.
Datenmüll entsteht beispielsweise dann, wenn Funktionen in AddIns ausgelagert werden, weil dann die Exceldateien nur auf Rechnern laufen, die dieses AddIn enthalten.
AddIns, für die keine Dokumentation vorliegt, sind Müll, weil niemand deren Funktionen verwenden kann.
Noch problematsicher wird's, wenn niemand weiß, ob man dieses AddIn noch braucht, weil irdenwo eine Datei vorhanden ist, die dessen Funktionen nutzen könnte.
Dein Ansatz ist daher viel eher dazu geeignet, wirklich problematischen Excelmüll zu erzeugen.
Anzeige
AW: Zeichen finden und text ausgeben
14.02.2019 16:47:30
Elliss
mein Ansatz ist bisher so:
B1=FINDEN("↑";A1)
C1=FINDEN("↑";TEIL(A1;B1+1;1000))+B1
jetzt habe ich schonmal die Positionen wo "↑" in A1 vorkommen.
von diesen Positionen müsste ich 3 Leerzeichen zurück +1 und dann bis zum nächsten "|" +2
keine ahnung ob sowas geht. ich versuche auch mal weiter :D
trotzdem vielen lieben dank für eure hilfe
ellss
AW: Zeichen finden und text ausgeben
14.02.2019 17:44:20
Elliss
ich glaub ich habs hinbekommen...auch wenns sicher nicht der sauberste weg ist :D
A1=Sprungwurf: sensationell|12 Reichweite: erstklassig|11 ↑ Außenvert.: sagenhaft|15 Handling: erstaunlich|10 Drive: beachtlich|7 ↑ Passen: erstaunlich|10 Zonenwurf: erstaunlich|10 Innenvert.: akzeptabel|6 Rebounden: beachtlich|7 Blocken: armselig|3 Ausdauer: armselig|3 Freiwurf: überzeugend|8 Erfahrung: armselig|3 Summe: 91 (65 + 26)
B1=TEIL(RECHTS(LINKS($A$1;FINDEN("↑";$A$1));35);FINDEN("|";RECHTS(LINKS($A$1;FINDEN("↑";$A$1));35))+4;LÄNGE(RECHTS(LINKS($A$1;FINDEN("↑";$A$1));35)))
C1=TEIL(RECHTS(LINKS($A$1;FINDEN("↑";TEIL($A$1;FINDEN("↑";$A$1)+1;1000))+FINDEN("↑";$A$1));35);FINDEN("|";RECHTS(LINKS($A$1;FINDEN("↑";TEIL($A$1;FINDEN("↑";$A$1)+1;1000))+FINDEN("↑";$A$1));35))+4;LÄNGE(RECHTS(LINKS($A$1;FINDEN("↑";TEIL($A$1;FINDEN("↑";$A$1)+1;1000))+FINDEN("↑";$A$1));35)))
Ergebnis:
B1=Reichweite: erstklassig|11 ↑
C1=Drive: beachtlich|7 ↑
jetzt hab ich zwar im ergebnis immer noch die Pfeile aber ich glaub damit kann ich leben.
danke für eure hilfe
Gruß
Elliss
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige