Das ist nicht ganz richtig,...
20.05.2009 05:16:35
Luc:-?
...NoNet,
die Matrix wird schon akzeptiert, aber eben auch wie eine solche behandelt! Es besteht keine Möglichkeit, alle Komponenten nacheinander auf das Ergebnis der letzten Operation "loszulassen"; so fkt das Operieren mit Matrizen einfach nicht! Hier wird etwas ganz Anderes benötigt, nämlich iterative Rekursion. Und das erreicht man entweder mit WECHSELN(WECHSELN(WECHSELN(... oder unter Nutzung des Iterationseffekts. Natürlich hat Ersteres Grenzen und Letzteres Tücken, deshalb plädiere auch ich für die Nutzung von udFktt. Allerdings kann man dabei auch direkt VERKETTEN zum Verketten von Vektorkomponenten benutzen, man muss die xlFkt nur mit Hilfe von VBA-Drumherum dazu bewegen... ;-)
Allerdings ist mir die direkte Methode lieber wie du an folgd Bsp sehen kannst...
P3:="*" P2:="a e i" P1:="abcdefghijkl"
*bcd*fgh*jkl← {=TransFor(WECHSELN(TEIL(RinMxList(WENN((TEIL(WECHSELN(P1;"a";P3);PosNrV
;1)=P3)+(TEIL(WECHSELN(P1;"e";P3);PosNrV;1)=P3)+(TEIL(WECHSELN(P1;"i";P3);
PosNrV;1)=P3)=1;P3;TEIL(P1;PosNrV;1)));2;4*LÄNGE(P1)-1);";";"&"))}
PosNr = TransFor(INDIREKT("A"&LÄNGE($P$1));"RinMxList(row(1:#))")
PosNrV = AUSWERTEN(PosNr)
Es kommt hier nämlich darauf an, das Ganze pro Zeichen durchzuführen - ein Array aus Einzelzeichen lässt sich gut mit xlFormeln erzeugen nur leider nicht wieder VERKETTEN - und dann die Zeichen wieder zu verbinden. Dafür nutze ich hier die udF RinMxList, die eigentlich Arrays in Textform ausgibt (für die direkte Weiterverarbeitung mit AUSWERTEN bzw Evaluate (steckt in der udF TransFor, die allerdings zusätzl m.Platzhaltern arbeiten kann, aber INDIREKT genausowenig verträgt wie AUSWERTEN), weshalb ich ihr Ergebnis mit WECHSELN(TEIL(... zurechtstutzen musste. Unter PosNr wird eine von der Textlänge abhängige Zahl von Zeilennr als Vektor erzeugt (wg nichtfkt INDIREKT - das INDIREKT in Arg1 ist unschädlich, da es nur den Bereich liefert, dessen Dimension den Platzhalter steuert).
Natürlich kann man das auch nur mit xlFktt hinbekommen, aber das wird dann mühselig, wenn man alles linear aufdröseln muss, um nicht über die Verschachtelungstiefe zu stolpern. Vielleicht kann man ja auch das Folgende mit der WECHSELN-Rekursion kombinieren - deiner Kreativität sind da keine Grenzen gesetzt... ;-)
=WENN(ISTFEHLER(FINDEN(TEIL(P1;1;1);P2));TEIL(P1;1;1);P3)&WENN(ISTFEHLER(FINDEN
(TEIL(P1;2;1);P2));TEIL(P1;2;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;3;1);P2));TEIL
(P1;3;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;4;1);P2));TEIL(P1;4;1);P3)&WENN
(ISTFEHLER(FINDEN(TEIL(P1;5;1);P2));TEIL(P1;5;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL
(P1;6;1);P2));TEIL(P1;6;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;7;1);P2));TEIL(P1;7;
1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;8;1);P2));TEIL(P1;8;1);P3)&WENN(ISTFEHLER
(FINDEN(TEIL(P1;9;1);P2));TEIL(P1;9;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;10;1);P2)
);TEIL(P1;10;1);P3)&WENN(ISTFEHLER(FINDEN(TEIL(P1;11;1);P2));TEIL(P1;11;1);P3)&
WENN(ISTFEHLER(FINDEN(TEIL(P1;12;1);P2));TEIL(P1;12;1);P3)
Weiter viel Spaß beim Grübeln... ;-)
Gruß Luc :-?
PS: Bei mir waren es sogar 42, wenn man es etwas genauer nimmt und SuperCalc, 1-2-3 und Works nicht mitrechnet... ;-)