Texte per Formel auftrennen

Hallo,

ich habe in einer Rechenblattzelle einen Text. Dieser Text besteht aus
Einzelteilen, die mit "|" zusammengesetzt sind -> "abc|def|ghi". Die
einzelnen Textstücke sind nicht immer gleich lang. Es sind aber immer
gleich viele Teile.

Nun möchte ich den Text in seine Einzelteile auftrennen und die Teile
jeweils in eine Rechenblattzelle schreiben. Beispiel:

A1 -> abc|def|ghi
B1 -> abc
C1 -> def
D1 -> ghi

Praktisch wäre es, wenn ich eine Formel hätte, die automatisch die
Spalte A so lange durchläuft, wie Einträge darin sind. Und dann die
Texte auftrennt.
Oder noch besser: Eine Formel, die nur die Zeilen bearbeitet, wo in
Spalte A etwas steht und in B nichts.

Vielen Dank für Eure Hilfe im Voraus
Benedikt Quirmbach
_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists

Texte per Formel auftrennen

#3816 On 1 Oktober, 2005 13:02 Thomas Kaegi said,

Hallo Benedikt

Geanu auf solche Problemstellungen werde ich in meinem Buch
detailliert eingehen, weil viele damit nicht zurecht kommen. Die
erforderliche Formel in einer beiliebigen Zelle im gleichen
Rechenblatt (ich zerlege die Formel in einzelne Teile, die ich
jeweils erläutere):

VSuchlauf(A:A;Und(LfdZelle>0;IstLeer(Spaltenwert(2)));0;

Vertikaler Suchlauf über die Spalten A und B, mit der Bedingung, dass
nur Zeilen bearbeitet werden, die in Spalte A etwas enthalten und in
denen Spalte B leer ist. (Weshalb diese zweite Bedingung? Wenn du
nicht Tausende Texte in Spalte A hast spielt es doch keine Rolle,
wenn bereits behandelte Zeilen nochmals bearbeitet werden.) Das
dritte Argument des Suchlaufs, der "Startwert", ist bedeutungslos und
mit 0 angegeben. Als viertes Argument des Suchlaufs folgen mehrere
SetzeZelle-Funktionen, die untereinander durch "&" verknüpft sind.

SetzeZelle(Finden("|";LfdZelle);C:C;LfdIndex)&

Im Text der "LfdZelle" (also der in Spalte A enthaltene Text der
gerade im Suchlauf behandelten Zeile) wird der Trenner "|" gesucht
und dessen Position innerhalb des Textes auf der gleichen Zeile
(LfdIndex) in Spalte C geschrieben.

SetzeZelle(Finden("|";LfdZelle;Index(C:C;LfdIndex)+1);D:D;LfdIndex)&

Im Text der "LfdZelle" wird erneut der Trenner "|" gesucht, wobei die
Suche diesmal nicht ganz am Anfang beginnt, sondern an der in Spalte
C gespeicherten Position des ersten Trenners +1. Die so gefundene
Position des zweiten Trenners wird in Spalte D geschrieben.

SetzeZelle(Links(LfdZelle;Index(C:C;LfdIndex)-1);B:B;LfdIndex)&

Aus dem Text in der "LfdZelle" wird der Teil links des ersten
Trenners, dessen Position ja in Spalte C gespeichert ist, extrahiert
und in Spalte B geschrieben.

SetzeZelle(Teil(LfdZelle;Index(C:C;LfdIndex)+1;Index(D:D;LfdIndex)-Index(C:C;LfdIndex)-1);C:C;LfdIndex)&

Aus dem Text in der "LfdZelle" wird der Teil zwischen erstem Trenner,
dessen Position ja in Spalte C gespeichert ist, und zweiten Trenner,
dessen Position in Spalte D gespeichert ist, extrahiert und in Spalte
C geschrieben (die vorher dort enthaltene Positon des ersten Trenners
wird nicht mehr benötigt).

SetzeZelle(Rechts(LfdZelle;Länge(LfdZelle)-Index(D:D;LfdIndex));D:D;LfdIndex))

Aus dem Text in der "LfdZelle" wird der Teil dem zweiten Trenner,
dessen Position in Spalte D gespeichert ist, extrahiert und in Spalte
D geschrieben (die vorher dort enthaltene Positon des zweiten
Trenners wird nicht mehr benötigt).

Ein Vorbehalt: Wenn in Spalte A Zellen gelöscht werden, dann werden
in den entsprechenden Zeilen die Spalten B bis D nicht gelöscht. Das
müsste noch mit einem zusätzlichen, dem obigen vorangestellten
VSuchlauf gemacht werden.

Mit freundlichem Gruss
Thomas
www.ragtime-consult.ch
--
_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists

Texte per Formel auftrennen

#3817 On 1 Oktober, 2005 13:09 Thomas Kaegi said,

Sorry! Ganz am Anfang müsste es "VSuchlauf(A:B;...)" , nicht "A:A" heissen.

T
--
_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists

Re: Texte per Formel auftrennen

#3834 On 3 Oktober, 2005 15:24 Benedikt Quirmbach said,

Hallo Thomas,

vielen Dank für Deinen Tipp.

Zusammen mit Deiner Verbesserung macht die Formel genau, was ich wollte.

Viele Grüße
Benedikt Quirmbach

P.S.: ich freue mich schon auf Dein Buch!

Am 01.10.2005 um 14:02 schrieb Thomas Kaegi:

> Hallo Benedikt
>
> Geanu auf solche Problemstellungen werde ich in meinem Buch
> detailliert eingehen, weil viele damit nicht zurecht kommen. Die
> erforderliche Formel in einer beiliebigen Zelle im gleichen
> Rechenblatt (ich zerlege die Formel in einzelne Teile, die ich
> jeweils erläutere):
>
> VSuchlauf(A:A;Und(LfdZelle>0;IstLeer(Spaltenwert(2)));0;
>
> Vertikaler Suchlauf über die Spalten A und B, mit der Bedingung, dass
> nur Zeilen bearbeitet werden, die in Spalte A etwas enthalten und in
> denen Spalte B leer ist. (Weshalb diese zweite Bedingung? Wenn du
> nicht Tausende Texte in Spalte A hast spielt es doch keine Rolle,
> wenn bereits behandelte Zeilen nochmals bearbeitet werden.) Das
> dritte Argument des Suchlaufs, der "Startwert", ist bedeutungslos und
> mit 0 angegeben. Als viertes Argument des Suchlaufs folgen mehrere
> SetzeZelle-Funktionen, die untereinander durch "&" verknüpft sind.
>
> SetzeZelle(Finden("|";LfdZelle);C:C;LfdIndex)&
>
> Im Text der "LfdZelle" (also der in Spalte A enthaltene Text der
> gerade im Suchlauf behandelten Zeile) wird der Trenner "|" gesucht
> und dessen Position innerhalb des Textes auf der gleichen Zeile
> (LfdIndex) in Spalte C geschrieben.
>
> SetzeZelle(Finden("|";LfdZelle;Index(C:C;LfdIndex)+1);D:D;LfdIndex)&
>
> Im Text der "LfdZelle" wird erneut der Trenner "|" gesucht, wobei die
> Suche diesmal nicht ganz am Anfang beginnt, sondern an der in Spalte
> C gespeicherten Position des ersten Trenners +1. Die so gefundene
> Position des zweiten Trenners wird in Spalte D geschrieben.
>
> SetzeZelle(Links(LfdZelle;Index(C:C;LfdIndex)-1);B:B;LfdIndex)&
>
> Aus dem Text in der "LfdZelle" wird der Teil links des ersten
> Trenners, dessen Position ja in Spalte C gespeichert ist, extrahiert
> und in Spalte B geschrieben.
>
> SetzeZelle(Teil(LfdZelle;Index(C:C;LfdIndex)+1;Index(D:D;LfdIndex)-
> Index(C:C;LfdIndex)-1);C:C;LfdIndex)&
>
> Aus dem Text in der "LfdZelle" wird der Teil zwischen erstem Trenner,
> dessen Position ja in Spalte C gespeichert ist, und zweiten Trenner,
> dessen Position in Spalte D gespeichert ist, extrahiert und in Spalte
> C geschrieben (die vorher dort enthaltene Positon des ersten Trenners
> wird nicht mehr benötigt).
>
> SetzeZelle(Rechts(LfdZelle;Länge(LfdZelle)-Index(D:D;LfdIndex));D:D;
> LfdIndex))
>
> Aus dem Text in der "LfdZelle" wird der Teil dem zweiten Trenner,
> dessen Position in Spalte D gespeichert ist, extrahiert und in Spalte
> D geschrieben (die vorher dort enthaltene Positon des zweiten
> Trenners wird nicht mehr benötigt).
>
> Ein Vorbehalt: Wenn in Spalte A Zellen gelöscht werden, dann werden
> in den entsprechenden Zeilen die Spalten B bis D nicht gelöscht. Das
> müsste noch mit einem zusätzlichen, dem obigen vorangestellten
> VSuchlauf gemacht werden.
>
> Mit freundlichem Gruss
> Thomas
> www.ragtime-consult.ch
> --
> _________________________________________________
> Die macnews.de Mailingliste Ragtime:
> http://lists.macnews.de/cgi-bin//listinfo/ragtime
>
> Neu: Das Mailinglistenarchiv unter
> http://forum.macnews.de/lists
>

_________________________________________________
Die macnews.de Mailingliste Ragtime:
http://lists.macnews.de/cgi-bin//listinfo/ragtime

Neu: Das Mailinglistenarchiv unter
http://forum.macnews.de/lists