Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: "Inhalte anders darstellen"

"Inhalte anders darstellen"
19.06.2015 12:06:18
Adrian1977
Hallo zusammen,
könnte mir jemand bitte bei nachfolgenden Problem helfen?
Im Beispiel habe ich Spalten mit einem "," getrennt, d.h. in Spalte A, Zeile 1 steht ein a, in Spalte B ein b, usw.
Das Ziel ist alle mehrfachen Inhalte nur einmal aufzulisten. Zusätzlich sollen gleiche Inhalte, sofern sich diese in unterschiedlichen Spalten befinden, mehrfach aufgelistet werden (trifft im Beispiel auf d, Spalte 3 und 4 sowie e Spalte 4 und f). Kommt gleicher Inhalt in mehreren Splaten vor, soll es noch mit "_1", "_2", usw. gekennzeichnet werden. Reihenfolge des Ergebnisses ist nicht relevant.
1. Zeile: a , b , c , f , g
2. Zeile: a , b , c , d , e
3. Zeile: a , b , d , e ,
Ziel: a , b, c , d_1, d_2, f, e_1, e_2, g (Reihenfolge nicht relevant)
Für Hilfe wäre ich sehr dankbar!
Danke & Grüße
Adrian

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nachgefragt ...
19.06.2015 12:25:26
der
Hallo Adrian,
... wie viele Zeilen und Spalten sind denn max. auszuwerten?
Gruß Werner
.. , - ...

AW: nachgefragt ...
19.06.2015 12:34:20
Adrian1977
Ca. 10 Spalten und 10 Zeilen.
Dies muß dann aber ca. größer 1000 mal durchgeführt werden.

dann stelle ich den thread wieder offen ....
19.06.2015 15:17:21
der
Hallo Adrian,
... da Du dann offensichtlich einen VBA-Lösung benötigst und suchst?!
Gruß Werner
.. , - ...

Anzeige
Auf dein Bsp würde nachfolgende Fml passen, ...
20.06.2015 04:09:42
Luc:-?
…Adrian;
sie ist noch relativ kurz und benötigt keinerlei Hilfszellen, verwendet aber 3 (in VBA pgmierte) universelle UDFs und setzt eine stets gleiche Anzahl von zulässigen Wiederholungen (gleiche Werte in unterschiedlichen Spalten) voraus, weshalb sie wohl eher nicht infrage kommt. Folgte man deiner ZielAngabe nach Augenschein, müsste sie so aussehen (1zellige MatrixFml!):
{=VJoin(MTRANS(VSplit(VJoin(I1:M3;;1))) &WENN(HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3;I1:M3)>1; "_"&SPALTE(A:E);"");;1)));"_");0;1);VSplit(VJoin(I1:M3;;1));0);ZEILE(1:7))<2;"";"_"&SPALTE(A:B)); ", ";1) }
Ihr Ergebnis ist für dein Bsp dann ⇒ a, b, c, d_1, d_2, f, e_1, e_2, g
Falls aber jeder Wert eine eigene Zelle (einer Spalte) beanspruchen soll, das Ergebnis (in Matrix­Konstanten­Schreibweise also so aussähe ⇒ {"a";"b";"c";"d_1";"f";"e_1";"g";"d_2";"e_2"}, müsste die mehrzellige MatrixFml diese Form haben:
{=MTRANS(VSplit(VJoin(MTRANS(VSplit(VJoin(I1:M3;;1))) &WENN(HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3;I1:M3)>1; "_"&SPALTE(A:E);"");;1)));"_");0;1);VSplit(VJoin(I1:M3;;1));0);ZEILE(1:7))<2;"";"_"&SPALTE(A:B));; 1))) }
Sollen die Werte in einer Zeile über mehrere Spalten abgebildet wdn, kann das führende, die ganze Fml umschließende MTRANS entfallen (vgl unten).
Können sich zulässig wiederholende Werte aber unterschiedlicher Anzahl sein, sollte folgende (1zellige Matrix-)Fml verwendet wdn:
{=WECHSELN(GLÄTTEN(VJoin(WENN(HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3; I1:M3)>1;"#"&SPALTE($A:$E);"");;-1)));"#");0;1);VSplit(VJoin(I1:M3;;-1));0);ZEILE($1:$7))<2; MTRANS(VSplit(VJoin(I1:M3;;-1)));WECHSELN(WECHSELN(WECHSELN(WIEDERHOLEN(MTRANS(VSplit(VJoin(I1:M3;; -1)))&"# ";HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3;I1:M3) >1;"#"&SPALTE($A:$E);"");;-1)));"#");0;1);VSplit(VJoin(I1:M3;;-1));0);ZEILE($1:$7)));"#";"_1";1); "#";"_2";1);"#";"_3";1));;1));" ";", ") }
Diese liefert dann das Ergebnis ⇒ a, b, c, d_1, d_2, f, e_1, e_2, g
Wenn man das b in der 2.Zeile gg ein e austauscht, liefert sie ⇒ a, b, e_1, e_2, e_3, c, d_1, d_2, f, g, die andere Fml aber nicht!
Alle Werte in EinzelZellen einer Zeile, also ⇒ {"a"."b"."c"."d_1"."d_2"."f"."e_1"."e_2"."g"} erhält man mit folgender mehrzelliger MatrixFml:
{=VSplit(GLÄTTEN(VJoin(WENN(HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3; I1:M3)>1;"#"&SPALTE($A:$E);"");;-1)));"#");0;1);VSplit(VJoin(I1:M3;;-1));0);ZEILE($1:$7))<2; MTRANS(VSplit(VJoin(I1:M3;;-1)));WECHSELN(WECHSELN(WECHSELN(WIEDERHOLEN(MTRANS(VSplit(VJoin(I1:M3;; -1)))&"# ";HÄUFIGKEIT(VERGLEICH(INDEX(Sprite(MTRANS(VSplit(VJoin(I1:M3&WENN(ZÄHLENWENN(I1:M3;I1:M3) >1;"#"&SPALTE($A:$E);"");;-1)));"#");0;1);VSplit(VJoin(I1:M3;;-1));0);ZEILE($1:$7)));"#";"_1";1); "#";"_2";1);"#";"_3";1));;1))) }
Sollen die Werte in einer Spalte stehen, muss sie noch ein MTRANS umschließen.
Diese Fmln sind also schon deutlich länger. Alle Fmln enthalten auch Zähler, wobei sie in den zu favorisierenden längeren Fmln bereits absolut adressiert sind. Der Zähler SPALTE(A:E) muss bei dir ja nicht bis 5 (wie im Bsp), sondern bis 10 zählen (10 Spalten), also mit $A:$J adressiert wdn. Der Zähler ZEILE(1:7) zählt von 1 bis zur Anzahl verschiedener Original­Werte, unabhängig davon, wo sie stehen. Ihre Anzahl könnte auch auf der Basis des entsprechenden FmlTeils ermittelt und in einer ZEILE/INDIREKT-Konstruktion verwendet wdn. Das Problem hierbei sind die zulässigen Wiederholungen, denn für deren Maximal­Anzahl verlangt die Fml je ein WECHSELN. 3 sind bereits in der Fml enthalten, obwohl für das Bsp nur 2 benötigt wdn, um zu zeigen, dass jeweils überzählige WECHSELN unschädlich sind. Leider habe ich eine das vereinfachende UDF immer noch nicht fertiggestellt (sie wäre mir aber auch zu umfangreich, um sie hier darzustellen).
Allerdings ist fraglich, da hat Werner sicher recht, ob du das überhaupt mit Fmln realisieren willst (und kannst), wenn ich deine Wiederholungs­angabe als mehr als 1000 Blöcke á 10×10 Zellen deute. Aber viell ist das ja trotzdem ein Ansatz für dich…
Deshalb gebe ich hier auch den Archiv­Standort der UDFs an. VSplit und VJoin sind in dieser Datei in letzter Version zu finden. Die vor 5 Jahren hochgeladenen Dateien, die evtl die UDF Sprite enthalten könnten, rückt der Server (zZ) nicht heraus (bzw hat sie verbummelt, kommt öfter vor), weshalb ich die hier später separat einstelle, falls du die Fmln benutzen willst.
Morrn, Luc :-?
Besser informiert mit …
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige