Frage von OlsenEgon74, 141

Wie kann ich den Text zwischen zwei Positionen einer Excel oder Calc Zelle ausgeben?

Ich habe in Excelspalten (A) folgenden Inhalt stehen... Beispiel:

A2 = Milchflasche, laminiert, Inhalt 1 l

A3 = Milchflasche, laminiert, Inhalt 15 l

A4 = Milchflasche, laminiert, Inhalt 100 l

Ich möchte nun in Spalte B den jeweiligen Inhalt ausgeben...

Ich habe folgenden Ansatz verfolgt:

=TEIL($A1;SUCHEN(" l";$A2)-1;999) Problem: Die Zeichen Zahl des Inhalts muss gleich sein, ansonsten muss ich immer wieder die Zeichenanzahl verändern... Außerdem, solbal ein Wort (hier laminiert) ebenfalss mit " l" beginnt gibt er mir das Wort vor dem Inhalt aus...

Ich möchte Quasi von der Inhaltsangabe " l" (Leerzeichen und ein l) alles links davon bis zum nächsten Leerzeichen in einer Zelle ausgeben...

Kann mir jemand Helfen?

Danke im Voraus,

Egon

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Garfield0001, 101

Hallo

Ich habe mal folgenden Ansatz probiert:

Ich brauche dazu die Länge der Zeichenkette, das Wort und die Länge von "Inhalt".

Nun ermittle ich das erste Zeichen von "Inhalt" in der Zeichenkette und zähle die Länge (hier 6) dazu. Somit habe ich das erste Zeichen, mit welchem das Ergebnis anfangen soll.
Jetzt nehme ich die "rechten" Zeichen zwischen Gesamtlänge und dem ersten ermittelten Zeichen.

=RECHTS (A1;LÄNGE (A1)-FINDEN ("Inhalt";A1)+6))

Wenn du die Zeichenkette (Hier: Inhalt) flexibel gestalten möchtest, dann setz "Inhalt" oder jeden anderen Text in eine eigene Zelle und ändere die Formel ab:
* statt "Inhalt" den Zellbezug
* statt "6" "LÄNGE(Zellbezug)"

Zellbezug könnte dann zb "B1" sein und dir Formel steht in C1

Kommentar von belem3 ,

Zwei Doofe ein Gedanke ;)

Nur muss hier das +6 am Ende in +1 abgeändert werden, da du ja das Ergebnis von "Finden" die Position vom I aus Inhalt wiedergibt. Die Länge von "Inhalt" ist hier also unerheblich.

Kommentar von Garfield0001 ,

in meine Formel passt es aber so mit +6. habe auch die Anpassung getestet wo der Suchtext in einer zweiten Zelle steht. klappt auch

Expertenantwort
von DeeDee07, Community-Experte für Excel, 72

Schönes Beispiel, warum in Excel jede Information in einer eigenen Zelle stehen sollte. Falls das mal nicht möglich ist, weil z.B. die Daten so importiert werden, kann man mit der Funktion "Text in Spalten" den Zellinhalt auf mehrere Spalten aufteilen. In deinem Fall würde man dann das Leerzeichen als Trennzeichen verwenden. Das ist allerdings nur dann sinnvoll, wenn die Informationen immer nach dem gleichen Schema aufgebaut sind.

Anscheinend reicht es dir, die Zahl zu extrahieren. Wie das geht, steht hier http://excelformeln.de/formeln.html?gruppe=2 z.B. Nr. 102

Kommentar von Iamiam ,

Das Problem entsteht mit diesen Formeln bei praktischen Listen:

Viele Artikel haben in ihrer Grundbezeichnung schon eine andere Zahl stehen, die da stört:

Namen wie XXX 6er-Pack oder ...2*5 Beutel à 300 ml o.ä., auch Phantasiename3000 oder Topf Nirosta18/10 mit Deckel 1 l etc.

Kommentar von OlsenEgon74 ,

Ja das Beispiel ist geradezu perfekt... Ich habe eine Tabelle mit ca. 15.000 Artikelbezeichnungen die ich in das WaWi übernehmen will. Leider hat jeder Artikel andere Eigenschaften, die ich natürlich mit übernehmen möchte und nicht nur in der Bezeichnung stehen haben will. Ich bin gerad fleißig ab probieren. Melde mich mit meiner Lösung sobald ich sie gefunden habe.

Lg

Expertenantwort
von Iamiam, Community-Experte für Excel, 59

wenn es Dir reicht, die Zahl innerhalb der letzten (9) Zeichen zu finden, dann tuts diese zwar lange, aber übersichtliche Formel (bezieht sich auf F19, ggf gesammelt ersetzen durch andere Adresse):

=WENNFEHLER(LINKS(RECHTS($F$19;9);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;8);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;7);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;6);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;5);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;4);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;3);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;2);1)*1;"")
&WENNFEHLER(LINKS(RECHTS($F$19;1);1)*1;"")

Bei noch mehr Zeichen wird der Block entsprechend länger (und unschön...), aber von der Rechenleistung her ist auch die Auswertung längerer Listen für xl kein Problem. (den definierten Umbruch in der Zelle erhältst Du mit Alt+Enter, weißt Du ja vllt.)

Könnte mit Teil() evtl noch etwas gekürzt werden, andere Prämissen!

Da dürfen allerdings keine Kommazahlen auftreten, weil ja jedes Zeichen einzeln ausgewertet wirt und ","*1 ergibt nun mal einen Fehler.

Ich hab das auch als Matrixformel gemacht, aber das wird wesentlich unübersichtlicher und auch kaum kürzer (bei 9 Zeichen).

Mehr Zeichen auszuwerten macht keinen Sinn, da mit Sicherheit auch Namen wie 6er-Pack oder 2*5 Beutel etc auftauchen - das ließe sich auch mit einer Matrixformel nicht ignorieren.

Willst Du das vom Suchergebnis eines Zeichens abhängig machen, sind Hilfsspalten sinnvoll.

Zu Deiner 2. Teilfrage (Ausschluss anderer " l") komm mich grad nicht, weiß auch noch nicht, ob das, was mir im Kopf umgeht, vernünftig realisierbar ist

Kommentar von Iamiam ,

so, wieder da.

Wenn es genügt, zu wissen, dass " l" die beiden letzten Zeichen sind, dann einfach eine Wenn-Abfrage davorschalten:

=Wenn(rechts(Zelle;2)=" l";

9-Zeilige Formel;

"kein ' l' am Ende")

ansonsten würde es kompliziert: die Anzahl der " l" ist im Prinzip

=Länge(A1)-Länge(Wechseln(A1;" l";"▓")

wobei ▓  EIN beliebiges Zeichen ist: alle Zweizeichen-" l" werden gegen 1 Zeichen ausgewechselt, die Länge verkürzt sich jedesmal um 1.

Die Positionen der fraglichen " l" lassen sich (ausser der 1. ) nur durch höhere Verschachtelungen von Suchen() bzw Finden() erreichen, oder durch

=Wechseln(Wechseln(Wechseln(A1;" l";"➊";1);" l";"➋";1);" l";"➌";1) und anschließendes

=Finden("➋";Wechseln(Wechseln(Wechseln(A1...)));1)

Dann hat man aber immer noch nicht die Länge bis zum letzten Leerzeichen davor das würde also äusserst kompliziert.  [➊ ➋ ➌ ➍ ➎ ➏ ➐ ➑ ➒ ➓ ]

da wäre dann das Spiegeln evtl besser (AB einem Zeichen vorwärts ist besser zu suchen als VON einem Zeichen rückwärts).

Ich führ das hier nicht aus, geb Dir aber noch eine Makrofunktion, die einen Text spiegelt (warum xl sowas nicht schon lange eingebaut hat, kann ich mir nur mit Marketingstrategien erklären: ist wohl noch als späteres "Hilite" geplant.

Function SpiegelText(Zelle As Range)
Dim Ketteneu As String, i As Integer, Z As String
For i = 1 To Zelle.Characters().Count
Z = Left(Zelle.Characters(i).Text, 1)
Ketteneu = Z & Ketteneu
Next
SpiegelText = Ketteneu
End Function
Kommentar von Iamiam ,

in calc müssen die Umbruchzeichen leider entfernt werden

(vllt inzwischen nicht mehr? weiß das von älteren Versionen)

Antwort
von belem3, 66

Also eigentlich sollte das also so aussehen.

A2= Milchflasche
B2= laminiert
C2= Inhalt 1 Liter

... wobei ich "Inhalt" noch weg lassen würde.

Wenn das dein Ziel ist, dann kopier einfach die gesamte Spalte A in eine Textdatei und öffne diese als CSV-Datei in Excel. Es wird dich fragen was als "Trennungszeichen" eingesetzt werden soll. Gibt die Kommas an und schon hast du alles wie du es brauchst.

Wenn das nicht hilfreich war, nochmal melden...

Kommentar von belem3 ,

Ansonsten, wenn du tatsächlich innerhalb deiner Tabelle Operationen ausführen willst, dann könnte das hässliche Ding hier funktionieren - Allerdings nur wenn in A immer "Inhalt" vorkommt - sonst müsste man sich noch was anderes überlegen:

=RECHTS(A2;(LÄNGE(A2)-SUCHEN(" I";A2)))

Antwort
von dkilli, 51

Wenn "Milchflasche, laminiert, Inhalt " immer gleich lang ist, so schreib in einer Nachbarzelle 

=TEIL(A2;32;LÄNGE(A2)-33)

Keine passende Antwort gefunden?

Fragen Sie die Community