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

ARRAY-Angabe in WECHSELN()-Funktion

ARRAY-Angabe in WECHSELN()-Funktion
18.05.2009 12:37:31
NoNet
Maahlzeit Leute,
zum Mittagessen mal eine Frage von mir :
In A1 steht ein Text, z.B. "abcdefghij".
In B1 möchte ich nun durch eine Funktion in einer einzigen Zelle mehrere Zeichen in diesem Text durch "*" ersetzen.
Mein Versuch scheiterte : {=WECHSELN(A1;INDEX({"b";"e"};ZEILE(1:2));"*")}
Auch das funktioniert nicht : {=WECHSELN(A1;INDEX({"b";"e"};ZEILE(1:2));"*")}
Vermutlich, da WECHSELN()als 2.Argument keine Matrix akzeptiert (wie VERKETTEN() etc. ?)
Könnte mir jemand bitte eine Alternative vorschlagen, wie das in EINER ZELLE lösbar ist ?
Als Ergebnis sollte in B1 folgender String stehen : "a*cd*fghij"
Danke für eure Bemühungen und lasst es euch schmecken
Gruß, NoNet

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ARRAY-Angabe in WECHSELN()-Funktion
18.05.2009 12:47:10
Rudi
Hallo,
ist doch ganz einfach:
=wechseln(wechseln(A1;"b";"*");"e";"*")
Gruß
Rudi
Ja, OK, aber was wenn 10 Zeichen ersetzt werden...
18.05.2009 12:53:48
NoNet
...sollen ?
Hey Rudi,
klaro : da hast du 100% Recht. Auf mein Beispiel bezogen passt das natürlich.
Was aber, wenn 8 oder mehr Zeichen/Zeichenfolgen ersetzt werden sollen ?
Da stösst man dann an die max. Verschachtelungstiefe von Excel und gut lesbar/editierbar ist das auch nicht mehr. Ich wünschte mir eine Alternative mit Matrix (hatte ich oben unterlassungssündigerweise nicht angegeben ;-).
Gruß, NoNet
Es kann keine "Lösung mit Matrix" geben,...
19.05.2009 04:24:46
Luc:-?
...NoNet,
das liegt in der Natur der Sache... ;-)
Ähnlich wie bei VERKETTEN wird auch hier eine Matrix aufgebaut, die in jeder ihrer Zeilen nur einen Begriff im Text austauscht Mir ist keine Fkt bekannt, die Texte quasi summieren könnte und dann noch unter Bevorzugung eines Zeichens (hier: *), das dann ja nicht die Null vertreten würde... Aber das könnte man dann ja mit WENN lösen, wenn's was Vglbares gäbe. Man kann aber sowohl VERKETTEN als auch WECHSELN dazu veranlassen, Bereiche bzw Matrix-Vektoren zu 1nem 1zelligen Ergebnis zusammenzufassen... Die Ziel- und Quellzelle müssen nur identisch sein, d.h. also, man muss iterativ arbeiten, entweder mit VBA (was natürlich noch andere Ansätze böte) oder mit Formeln. Letzteres würde aber auf jeden Fall eine Hilfszelle benötigen wie im Folgenden dargestellt...
N17:abcdefghijklmnopqrstuvwxyzäöüß
N18:aäeioöuüy
N19:=WENN(N19<LÄNGE(N18);N19+1;N19)
N20:=WECHSELN(WENN(N19=1;N17;N20);TEIL(N18;N19;1);"*") ⇒ *bcd*fgh*jklmn*pqrst*vwx*z***ß
Wenn du damit leben kannst, wär's das... ;-)
Moin-Moin und schmackhaftes Frühstück!
Gruß Luc :-?
Anzeige
Zumindest ansatzweise eine "Matrix"-Lösung
19.05.2009 12:17:50
NoNet
Hallo Luc,
vielen Dank für Deine Ausführungen. Ich hatte es ja bereits "befürchtet", dass die Textfunktionen (ähnlich wie VERKETTEN()) keine Matrix akzeptieren - obwohl es nicht so ganz nachvollziehbar ist, denn Texte müssen hier ja nicht "summiert" sondern wirklich nur aneinander gereiht werden, und einer UDF wäre dies problemlos realisierbar (siehe hier (SL) oder auch hier (MOF)).
Dein Lösungsvorschlag per Iteration funktioniert und geht zumindest ansatzweise in die richtige Richtung - auch wenn ich vor dem Einsatz der Iteration nur warnen kann (siehe auch hier (SL)).
Übrigens : "Leben" kann ich sowohl mit wie auch ohne Iteration und Matrix-Funktion, und - Du wirst es kaum glauben - vermutlich auch ohne Excel (ist zwar seit vielen Jahren rein spekulativ, habe ich aber zumindest die ersten 25 Jahre meines Lebens erfolgreich so gehandhabt )
Gruß, NoNet
Anzeige
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... ;-)

Anzeige
TransFOR() und RinMxList() ?
20.05.2009 12:57:20
NoNet
Hey Luc,
woher stammen denn die Funktionen TransFOR() und RinMxList() ?
Sind das Deine eigenen UDFs oder stammen diese aus irgendeinem Tool/AddIn ?
Unter Einsatz von VBA ist ja vieles möglich, aber ich suchte ja speziell nach einer Excel-Standard-Funktion ohne externe "Hilfe".
Aber man weiss ja : Wer suchet, der wird nicht immer finden (zumindest nicht immer genau DAS, wonach er gesucht hat ;-)
Gruß, NoNet
PS: SuperCalc kenne ich nur vom hören, aber klaro : mit Works und Lotus 1-2-3 (und Multiplan, Framework etc.) habe ich früher auch gearbeitet. Dass es bei Dir 42 sind (Antwort auf die Frage „nach dem Leben, dem Universum und allem“ ?) liegt wohl daran, dass Du ein paar Tage früher dass Licht dieser Wet erblickt hast ;-) !?!?!?
Anzeige
Ja, die stammen aus einem bis dato...
20.05.2009 15:04:40
Luc:-?
...unveröffentlichten AddIn, NoNet,
das ich "verbrochen" habe (nur die eine oder andere Proz ist schon in älterer Version in Forumsarchiven zu finden). Die Tests ziehen sich in die Länge, mit xl12 wdn auch die älteren .chm-Hilfedateien nicht mehr unterstützt (gemein, nachdem ich meine .HTMs nun endlich zu .CHMs komprimiert habe), abgesehen davon, dass die noch nicht fertig sind (fehlen noch etliche Bspp). Ja, und dann kommen immer wieder neue udFs hinzu, obwohl immer noch 1-2 wichtige fehlen... Erfinden macht nun mal mehr Spaß als Dokumentieren... ;-)
Und das ganze Projekt ist eigentlich nur die "Spitze des Eisbergs"... Andere interessante udFs benutzen zuviele weitere udFs; dasChaos harrt noch der Ordnung und Aktualisierung...
Sollte ja auch nur ein (Gg-)Bsp zu deinen Links sein... ;-?
Gruß Luc/ius :-?
PS: War die Antwort nicht 40...? Ist mir jetzt nicht ganz ggwärtig, sonst wäre das ja ein irrer Zufall... Ansonsten hast du sicher recht, kannte noch die sog Kleinrechner aus der Vor-PC-Ära (Pgmieren mit Zahlencodes)... ;-)
Anzeige
CHM-Files
20.05.2009 17:22:20
NoNet
Hey Luc,

mit xl12 wdn auch die älteren .chm-Hilfedateien nicht mehr unterstützt


Ich weiß nur, dass Windows Vista die CHM-Dateien standardmässig nicht mehr unterstützt,aber es gibt ein MS-Tool (hmmm... : wie hieß das nochmal... - ich komme gerade nicht darauf...) mit dem man CHM-Dateien auch unter Vista wieder öffnen kann - auf meinem PC funktioniert das zumindest seit über 1,5 Jahren....
Gruß, NoNet

Na gut, Vista verwende ich noch nicht,...
20.05.2009 17:37:57
Luc:-?
...also gehen die .CHMs noch auf, NoNet,
ich kann sie unter xl12 nur nicht mehr direkt über den Hilfeaufruf, {F1} bzw aus der MsgBox mit Hilfe-Optionstaste ansprechen. Die akzeptiert jetzt nur noch Dateien des neuen MS-Hilfeprojekts für XL, WD und PP. Schade, und ich glaube, das neue HProjekt hat MS Anwendungspgmierern noch nicht zur Verfügung gestellt, und wenn doch, müsste man schon wieder umlernen, dann werde ich ja nie fertig...
Gruß Luc :-?
Anzeige
Das geht nicht...
18.05.2009 13:06:54
{Boris}
Hi Nonet,
da heißt es: Wechseln, bis der berühmte Arzt kommt. Und nach 8 mal ist er eben da ... ;-)
Grüße Boris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige