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

Transponieren von unterschiedlichen Adressblöcken

Transponieren von unterschiedlichen Adressblöcken
25.11.2016 23:22:56
unterschiedlichen
Guten Tag,
vielleicht hat einer der das hier liest eine Idee wie ich eine Tabelle mit
vielen Adressblöcken, die allerdings unterschiedlich im Umfang sind, transponieren kann, also statt untereinander, nebeneinander kopieren
Ein Beispiel für die Adress Blöcke... so wird das mit dem "Umfang" verständlicher, gemeint sind die "Spalten"
Max Muster
Irgendwo 3
01234 Daundda
Gundel Gaukel
Herbstweg 2
01234 Daunda
Tel 0123/12389281
daraus sollte
Max Muster Irgendwo 3 01234 Daundda
Gundel Gaukel Herbstweg 2 01234 Daunda Tel 0123/12389281
werden. Kann mir jemand eine Rat erteilen?

44
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Für einen Rat reichen die Angaben aus, ...
26.11.2016 03:48:35
Luc:-?
…astis,
sogar für eine Fml, die du ggf selbst anpassen musst, weil sie von 3…4 Zeilen pro AdressBlock in deinem Bsp (und Tel am Anfang der 4.!) ausgeht. Wenn PLZ/Ort mehr Zeilen (mit abweichenden Inhalten) folgen können, kann's schwierig wdn, falls Personen­Namen nicht eindeutig identifizierbar sind (im Positiv­Fall könnte die Fml etwas einfacher wdn, wenn in allen anderen Zeilen auch Ziffern auftauchen).
 ABCDE
2
Max MusterMax MusterIrgendwo 301234 Daundda Irgendwo 3Gundel GaukelHerbstweg 201234 DaunddaTel 0123/1238928101234 DaunddaMax MeierIrgendwo 801234 Daundda Gundel GaukelRita GundelSommerweg 501235 NichtdaTel 0124/123456Herbstweg 2Peter PanPoltersteig 9901255 Dingsda 01234 Daundda    Tel 0123/12389281    Max MeierB2:E2[;B3:E6]: {=WENNFEHLER(MTRANS(INDEX(A$2:A$99;SUMME(--(B$1:E1≠""))+1):INDEX(INDEX(A$2:Irgendwo 8          A$99;SUMME(--(B$1:E1≠""))+1):A$99;VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(A$2:A$99;SUMME(--01234 Daundda          (B$1:E1≠""))+1):A$99;5));0)+WENNFEHLER(VERGLEICH("Tel *";INDEX(A$2:A$99;SUMME(--(B$1:E1≠Rita Gundel          ""))+1):A$99;0)-VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(A$2:A$99;SUMME(--(B$1:E1≠""))+1):A$99;Sommerweg 5          5));0)=1;0)));"")}01235 Nichtda    Tel 0124/123456    Peter Pan    Poltersteig 99    01255 Dingsda    
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
senkrechte Adressblöcke waagerecht ausgeben
26.11.2016 08:21:53
WF
Hi,
die Adressblöcke stehen in Spalte A beginnend mit A1. Nach jedem (unterschiedlich langem Block) folgt eine Leerzelle. Ohne einen eindeutigen Blockabschluss wird das schwierig bis unmöglich (wie Luc schon sagte).
in D1 steht:
=A1
in D2 steht die Arrayformel:
{=INDEX(A:A;KKLEINSTE(WENN(A$1:A$99="";ZEILE(X$1:X$99));ZEILE(X1))+1)}
runterkopieren
in E1 steht:
=WENN(D1=0;0;INDEX($A:$A;VERGLEICH($D1;$A:$A;0)+SPALTE(A1)))
nach rechts und nach unten kopieren
Die Zellen benutzerdefiniert mit Standard;; formatieren, damit die Nullen verschwinden.
Salut WF
Anzeige
AW: E1 berücksichtigt momentan noch nicht, ...
26.11.2016 09:10:02
...
Hallo WF,
... das in unterschiedlichen Adressangaben Personen mit gleichen Namen wohnen können.
Gruß Werner
.. , - ...
das war jetzt wieder wichtig
26.11.2016 09:44:27
WF
.
AW: ja, diesmal mE schon owT
26.11.2016 10:06:59
...
Gruß Werner
.. , - ...
es nervt
26.11.2016 10:30:01
WF
.
AW: was genau nervt Dich? ...
26.11.2016 14:04:52
...
Hallo WF,
... mir ist nämlich momentan nicht eindeutig klar, ob Dich wieder mal nur meine alternativen AGGREGAT()-Formeln so sehr nervten oder mein Hinweis darauf, dass Deine Formelergebnisse mit E1 bei vorhandener Namensgleichheiten für unterschiedliche Adressdaten inkorrekt sind. Oder wie Du in ähnlichen Fällen des öfteren schon geschrieben hast/hättest, wenn Du ein derartiges Übersehen in einem Formelvorschlag eines Anderen entdeckt hättest: "in die Hose" geht.
Für heute gehe ich jetzt offline und kann somit auf meine aktuellen Inkorrektheiten und oder Fehler nicht reagieren.
Gruß Werner
.. , - ...
Anzeige
AW: unter Voraussetzung auch ohne {}-Formel ...
26.11.2016 09:13:25
...
Hallo,
... und zwar unter der Voraussetzung, die auch WF getroffen hat, dass nach jedem Adressblock eine Leerzelle steht (alternativ dazu wäre - jedoch mit einer angepassten Formellösung - dass gewährleistet ist, dass immer in der zweiten Zeile nach dem Namen, die Anschrift mit führender PLZ steht).
Für z.B. max 990 Datensätze (ansonsten Bereich in Formel anpassen):
in D1: =A1 und in E1 =WENN(D1="";"";INDEX($A:$A;VERGLEICH($D1;$A:$A;)+SPALTE(A1))&"")
In D2: =INDEX(A:A;AGGREGAT(15;6;ZEILE(A$2:A$999)/(A$1:A$998="");ZEILE(A1)))&"" und Formel nach unten kopieren
In E2: =WENN(D2="";"";INDEX($A:$A;AGGREGAT(15;6;ZEILE(A$2:A$999)/($A$1:$A$998="");ZEILE(A1))+SPALTE(A1))&"") und Formel nach rechts und unten kopieren
Gruß Werner
.. , - ...
Anzeige
Du verlangst doch sonst immer nähere Infos, ...
26.11.2016 12:36:47
Luc:-?
Werner,
wenn etwas so unbestimmt daher kommt… ;-]
Ich war nicht der Meinung, dass man unbedingt von Leerzeilen nach jedem Block ausgehen kann, denn das ist zwar im Bsp so, wird aber nicht erwähnt. Das hängt doch sicher auch davon ab, wie die Liste erzeugt wurde. Stammt sie aus einer DB-Abfrage, sind Leerzeilen eher nicht zu erwarten.
Noch ein Rat, astis,
derartige Listen sollten Identifikatoren in einer führenden Spalte verwenden; eine lfd Nr könnte schon reichen, vor allem, wenn sie in jeder Zeile eines Blockes wiederholt wird. Dadurch könnten dann Blöcke beliebiger Länge sicher und relativ einfach transponiert wdn.
Gruß + schö1AdWE, Luc :-?
Anzeige
AW: verlangen Du ich selten ...
26.11.2016 14:05:18
...
Hallo Luc,
... aber nachfragen, hinweisen oder erbeten schon des öfteren, wenn auch nicht immer.
Übrigens hab ich eins davon auch hier wieder getan, wenn auch etwas verdeckt und hauptsächlichen wegen Deiner Annahme, der von Datenblöcken ohne Leerzellen ausging.
Und meinen Formellösungsvorschlag hab ich für die getroffene Annahme "Leerzellen-Block-Trennung" (die auf Grund der Schreibweise des Fragestellers ja auch wahrscheinlich ist) nicht wegen der alternativen AGGREGAT()-Formellösung eingestellt, sondern weil ich auch eine Lösungsmöglichkeit für das aufzeigen wollte, was mir als Inkorrektheit in der Formellösung mit E1 von WF aufgefallen war.
Gruß Werner
.. , - ...
Anzeige
Vorschlag ...
26.11.2016 16:17:55
Matthias
Hallo Werner,
wäre sicher auch schön wenn Du nicht immer nur AGGREGAT()-Formellösungen anbietest
(auch wenn die Version 2010 ist)
sondern auch mal etwas abwärtskompatibles aufzeigst.
Mich hätte hier z.B. auch eine Lösung für XL2007 (ohne AGGREGAT) interessiert.
auch wenn ich das mit VBA selbst hinbekommen könnte.
Das mit den evtl doppelten Namen habe ich nachvollziehen können.
Es würde dann die erste gefundene Adresse zurückgegeben, was tatsächlich falsch ist.
Übrigens lese ich alle Deine und Luc seine Beiträge genau durch.
Eure Diskussionen sind ein Schatz an Wissen auch für Andere.
Danke dafür an Beide!
Gruß Matthias
Anzeige
@Matthias: herangetastet
26.11.2016 18:17:28
Michael
Hi Matthias,
die Lösungen von Werner und WF verwenden je eine Hilfsspalte und eine relativ komplexe Formel in E.
Da gibt's ja nix zu "verbessern", aber zum gedanklichen Nachvollziehen (auch der "Meister-Formeln") mag Dir das hier auf die Sprünge helfen: https://www.herber.de/bbs/user/109745.xlsx
Schöne Grüße,
Michael
KKLEINSTE(INDEX(...)) gefällt mir da besser
26.11.2016 21:33:04
Matthias
Hallo
Da gibt's ja nix zu "verbessern"
Will ich doch überhaupt nicht.
Der Einwand von Werner war aber berechtigt.
Bei gleichen Namen aber anderer Zusatzinfos wird der erste Fund zurückgegeben.
Außerdem ist wirklich nicht klar ob zwischen den DS tatsächlich immer eine Leerzelle ist.
Dein Bsp hab ich mir angesehen, würde da aber eher mit KKleinste arbeiten
um die Struktur der DS nicht von hinten aufzuarbeiten.
Danke für Deinen Beitrag
Gruß Matthias
Anzeige
AW: KKLEINSTE(INDEX(...)) gefällt mir da besser
27.11.2016 14:39:13
Michael
Hi Matthias,
ist schon recht: mein Beispiel "holpert" auch ein wenig...
Es ging mir nur darum, sich an so was heranzutasten (insbesondere ohne Aggregat), und dazu kann man zunächst mal mit einer Reihe Hilfsspalten "spielen", bis man die Problematik erfaßt hat.
Ob und wie man die dann zusammenfaßt (oder sortiert) bzw. optimiert ist dann der zweite Schritt.
Sei's drum.
Ich sehe, daß wir hier munter diskutieren, nur vom Fragesteller kommt nichts Erhellendes...
Gruß,
Michael
AW: Matrxfunktion(aliität)sformel für XL<2010 ...
27.11.2016 17:39:43
...
Hallo Michael, hallo Matthias,
... die Formel in E2 (und nicht nur die) kann man auch ohne AGGREGAT() und ohne KKLEINSTE() sowie ohne Hilfszellen und ohne {}-Formelabschluss konstruieren, womit sie dann auch in alten Excelversionen einsetzbar ist.
Wollt ihr es zunächst einmal selbst versuchen? Soviel sei dazu vorab "verraten", die entscheidende Rolle spielt dabei eine Excelfunktion, die trotz AGGREGAT() ;-) für mich noch immer die "Nr.1" ist. Natürlich ist es mit AGGREGAT() einfacher ;-)
Gruß Werner
.. , - ...
Anzeige
ohne eindeutige Trennung der DS unmöglich
27.11.2016 18:44:03
Matthias
Hallo
ohne eindeutige Trennung der Datensätze ist das mE alles nicht korrekt realisierbar
und nichts kann absolut festgemacht werden.
Also entweder hat man eine eindeutige ID wie hier zu sehen:
Tabelle1

 AB
1IDDatensatz
21Max Muster
31Irgendwo 3
4101234 Daundda
52Gundel Gaukel
62Herbstweg 2
7201234 Daundda
82Tel 0123/12389281
93Max Meier
103Irgendwo 8
11301234 Daundda


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8


oder die Datensätze sind getrennt z.B. durch eine Leerzelle oder ein anderes eindeutiges Merkmal.
Tabelle2

 A
1Max Muster
2Irgendwo 3
301234 Daundda
4 
5Gundel Gaukel
6Herbstweg 2
701234 Daundda
8Tel 0123/12389281
9 
10Max Meier
11Irgendwo 8
1201234 Daundda
13 
14Rita Gundel
15Sommerweg 5
1601235 Nichtda
17Tel 0124/123456
18 
19Peter Pan
20Poltersteig 99
2101255 Dingsda


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Ich hatte ja erwähnt das eher mit VBA zu realisieren, aber auch da ist eine Trennung unumgänglich.
Welche Funktion bei Dir die "Nr.1" ist weiß und spekuliere ich nicht.
Eine eindeutige Trennung der DS ist mE zwingend.
Gruß Matthias
AW: unter einer Voraussetzung schon möglich ...
27.11.2016 19:06:36
...
Hallo Matthias,
... und diese Voraussetzung hatte ich in meinem Beitrag heute 27.11.2016 09:22:56 auch schon benannt und dafür auch eine AGGREGAT()-Formellösung aufgezeigt. Zu der "Übersetzung" in klassische Matrixformeln hatte ich mich in meinem Beitrag an Dich 27.11.2016 08:31:17 geäußert.
In meinem letzten Beitrag 27.11.2016 17:39:43 ging es "lediglich" um eine "Übersetzung" meiner gestrigen AGGREGAT()-Formel E2 (also wo eine Adressblocktrennung durch Leerzellen vorhanden ist) im Beitrag von 26.11.2016 09:13:25:
=WENN(D2="";"";INDEX($A:$A;AGGREGAT(15;6;ZEILE(A$2:A$999)/($A$1:$A$998="");ZEILE(A1))+SPALTE(A1))&"")
in eine Matrixfunktion(alität)sformel für Excelversionen vor 2010. Diese Formel ist einfacher zu "übersetzen" als die AGGREGAT()-Formel E11 aus meinem heutigen Beitrag 27.11.2016 09:22:56.
Meine Excel-Funktion (nicht Funktionalität) Nr 1 ist natürlich INDEX().
Gruß Werner
.. , - ...
AW: unter einer Voraussetzung schon möglich ...
27.11.2016 20:18:22
Matthias
Hallo,
das Die "Nr 1 - Funktion" INDEX() ist, war mir bewußt ;-)
schönen Abend noch ...
Gruß Matthias
AW: nun denn ...
28.11.2016 08:53:11
...
Guten Morgen Matthias,
... zunächst aber: Deine nun getroffene Aussage steht allerdings diametral zu Deiner vorherigen Aussage: "Welche Funktion bei Dir die "Nr.1" ist weiß und spekuliere ich nicht" ;-)
Nun aber zu meinem avisierten Formelvorschlag in E2: ohne AGGREGAT(), ohne KKLEINSTE(), ohne Hilfszellen und ohne {}-Formelabschluss:
=WENN(D2="";"";INDEX($A:$A;1000-KGRÖSSTE(INDEX(($A$1:$A$998="")*(1000-ZEILE(A$2:A$999)););ZEILE(A1))+SPALTE(A1))&"")
Formel natürlich nach rechts und unten kopieren.
Ok, ich geb zu, dass ich Euch durch die Angabe "... ohne KKLEINSTE()..." möglicherweise etwas irritiert habe. Diese Funktion nutze ich in meiner Formel zwar wirklich nicht, aber wenn man so will, dessen Prinzip durch die "Umkehrung" von KGRÖSSTE() schon. Ich geb auch zu, dass ich die Formel persönlich wohl so kaum in Praxis anwenden würde. Erstens weil es ja AGGREGAT() gibt ;- und zweitens man da doch "etwas mehr um die Ecke" denken muss. Aber prinzipiell kann man auf diese oder ähnliche Art und Weise fast jede klassische Matrixformel als Matrixfunktion(alität)sformel schreiben, die dann so auch in jeder älteren Excelversion einsetzbar ist w.z.b.w.
Gruß Werner
.. , - ...
Nachgefragt ...
28.11.2016 17:25:20
Matthias
Hallo Werner
Ist etwas unübersichtlich geworden in diesem Beitragsverlauf.
Wie und wo standen bei Dir denn die Quelldaten damit diese Formel funktioniert?
Gruß Matthias
AW: melde mich dazu frühestens Morgen owT
29.11.2016 09:10:26
...
Gruß Werner
.. , - ...
OT: Ja, ja, INDEX, ...
28.11.2016 02:04:29
Luc:-?
…Werner, … ;-]
aber mit INDEX kann auch nicht alles realisiert wdn, schon gar nicht eine zusammen­fassende Matrix aus blatt­über­greifenden Bezügen, um sie ggf in einer Fml direkt weiter zu verwenden. Mit INDIREKT ginge das auch nur indirekt, aber WAHL kann das, auch in einer singularen (1zellig-1wertigen) MatrixFml, während mir für INDEX einfach nichts einfällt, was keine FehlerWerte liefert. Ursache mag sein, dass INDEX keine von-bis-Blatt­Angaben und auch keine aus Bereichen unter­schied­licher Blätter zusammen­ge­setz­ten Bereiche akzeptiert. WAHL hingg kann nicht nur als Auswahl aus, sondern auch (weitgehend unbekannt) als Kollektor von Möglich­keiten fungieren:
Tabelle1!H100:H102: {1;2;3}
Tabelle2!H100:H102: {11;22;33}
Tabelle3!H100:H102: {111;222;333}
Daraus ergibt sich {1.11.111;2.22.222;3.33.333} mit folgender pluraler MatrixFml:
{=WAHL(SPALTE(A1:C1);Tabelle1!H100:H102;Tabelle2!H100:H102;Tabelle3!H100:H102)}
Wenn das in einer Fml verwendet wdn soll, die nur einen Wert liefert, reicht eine singulare MxFml (während INDEX in 1-Blatt-bezogen vglbaren Fällen mitunter eine duale MxFml benötigt, um ein 2zellig-1wertiges Ergebnis zu liefern).
Mit dem volatilen INDIREKT sähe die plurale MxFml (bei gleichem Ergebnis) dagg so aus:
{=N(INDIREKT(WECHSELN(WECHSELN("Tabelle#!H10§";"#";SPALTE(A1:C1));"§";ZEILE(A1:A3)-1)))}
Aber alle 3 Fktt können idR nur Vektoren zu einer Matrix verbinden (INDEX wohl nur auf einem Blatt). Will man mehr, wird's mE mit XlStandardFktt schwierig bis unmöglich…
Allen Beteiligten (wozu astis eher nicht zu gehören scheint :-[) eine schö1AdWo! Luc :-?
AW: OT: ... ist keine eierlegende Wollmichsau ....
28.11.2016 08:53:06
...
Guten Morgen Luc,
... doch mit INDEX() ist vieles möglich. Sicher, ähnliches trifft auch auf WAHL() zu, doch diese Funktion ist bei mir trotzdem nur 2. Wahl ;-)
Deine hiesigen Ausführungen zu WAHL() lasse ich mal unkommentiert, weil ich keinen direkter Bezug zum thread erkenne und ich zuletzt auch ausdrücklich eine {}-freie Lösungsformel für E2 ins Visier genommen hatte.
Meinen entsprechenden Formelvorschlag zu E2 schreib ich in meinem zeitgleichen Beitrag an Mattias, weil ich diesen ja eine solche avisiert hatte.
Gruß Werner
.. , - ...
AW: OT: ... ist keine eierlegende Wollmichsau ....
28.11.2016 15:21:29
Michael
Hi zusammen,
vielleicht ist der ganze Beitrag nur eine Werbung für "Astis", ein Dorf in den Pyrenäen...
WAHL habe ich effektiv noch nie eingesetzt - mal sehen, wann ich's brauchen kann.
Macht's gut, Gruß,
Michael
AW: dann wähle das nächste mal WAHL() ...
28.11.2016 15:55:29
...
Hallo Michael,
... wenn Du z.B. ansonsten eine verschachtelte WENN()Formel siehst oder schreiben willst und Du wirst gut gewählt haben.
Gruß Werner
.. , - ...
...Oder wenn es um die Erzeugung einer ...
29.11.2016 00:00:32
Luc:-?
…gemeinsamen WerteMatrix aus mehreren gleichgerichteten und -langen Vektoren (unter­schied­lichster Stand­orte) geht, Michael;
das fktioniert sogar in einer singularen MatrixFml.
Der Nachteil ggüber INDEX ist nur, dass stets nur Werte, niemals ZellReferenzen ausgegeben wdn!
Gruß, Luc :-?
Da es sich bei diesem 'Thread' lt Michael ja ...
29.11.2016 03:44:08
Luc:-?
…eh' nur um Eigenwerbung (wie bei der angeblich ins falsche Seefeld verfahrenen Pistenraupe) handelt, Werner,
sehe ich keinen Grund, hier nicht auch Weiterführendes bzw (ganz) Anderes zu diskutieren, zumal der Threadder ja auch nicht mit Server-Mails belästigt wird… ;-]
Übrigens hatte ich hier vor 7½ Jahren mal mit NoNet über INDEX diskutiert, wobei ich inzwischen natürlich weitere Erkenntnisse hin­zu­gewonnen habe.
Aber Du verwendest INDEX idR ja auch nicht in „unorthodoxen“ Variationen, für die ich mich besonders inter­essiert hatte, wodurch ich nach Entdeckung der dualen Matrix­Fmln auch fest­stellen konnte, dass darunter auch bestimmte INDEX-Fmln fallen und dann mit einem kleinen Zusatz ein richtiges Ergebnis liefern (Du erinnerst Dich!).
Was weder INDEX (mit 4.Argument) noch WAHL vermögen, ist die zusammen­fassende Wieder­gabe von unterschied­lich gerichteten u/o langen Vektoren und schon gar nicht beliebiger Matrizen. Letzteres ist mir auch mit WAHL noch nicht gelungen und wahr­schein­lich ist das mit Xl-Standard-Fktt auch nicht möglich. Man könnte das mit der Addition 2er Kronecker-Tensor-Produkte formal wie folgt lösen: {1;0}⊗{1.2;3.4}+{0;1}⊗{5.6;7.8} ⇒ {1.2;3.4;5.6;7.8}
Dieses Bsp entspräche der MatrizenAddition ={1.2;3.4;0.0;0.0}+{0.0;0.0;5.6;7.8}, die man mit (dem anders als Kronecker rechnenden) MMULT so erreichen könnte: {=MMULT({1.0;0.1;0.0;0.0};{1.2;3.4})+MMULT({0.0;0.0;1.0;0.1};{5.6;7.8})}
Gruß, Luc :-?
Na, dann bist Du sicher Angehöriger einer ...
26.11.2016 19:35:14
Luc:-?
…schützenswerten Minderheit, Matti, ;-]
denn das machen wohl die Wenigsten.
Echtes Transponieren ist natürlich nur in meiner Fml verwendet worden, die deshalb ja auch eine plurale MatrixFml über die ganze Zeile ist. Im Folgenden habe ich mal auf analoge Weise meinen Ident-Vorschlag umgesetzt:
 ABCDEFG
1
Ident/lfdNrVorlageIdent/lfdNrTransponiert - neue Variante ohne Leerzeilen, aber mit Ident1Max Muster1Max MusterIrgendwo 301234 Daundda 1Irgendwo 32Gundel GaukelHerbstweg 201234 DaunddaTel 0123/12389281101234 Daundda3Max MeierIrgendwo 801234 Daundda 2Gundel Gaukel4Rita GundelSommerweg 501235 NichtdaTel 0124/1234562Herbstweg 25Peter PanPoltersteig 9901255 Dingsda 201234 Daundda     2Tel 0123/12389281     3Max Meier     3Irgendwo 8 Transponiert - alte Variante ohne Leerzeilen und ohne Ident301234 Daundda Irgendwo 301234 Daundda  4Rita Gundel Gundel GaukelHerbstweg 201234 DaunddaTel 0123/123892814Sommerweg 5 Max MeierIrgendwo 801234 Daundda 401235 Nichtda Rita GundelSommerweg 501235 NichtdaTel 0124/1234564Tel 0124/123456 Peter PanPoltersteig 9901255 Dingsda 5Peter Pan     5Poltersteig 99     501255 Dingsda     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Die Fmln für beide Varianten stelle ich lieber (nochmal) separat dar, da die Darstellungs­Software Veränderungen an Fmln vornimmt, um einerseits eine Text­Straffung und anderer­seits annähernd das Vorlagen­Aussehen zu erreichen:
D2:G2[;D3:G6]:{=WENNFEHLER(MTRANS(INDEX(B$2:B$99;VERGLEICH(ZEILE()-1;A$2:A$99;0)):INDEX(B$2:B$99;WENNFEHLER(VERGLEICH(ZEILE();A$2:A$99;0)-1;ANZAHL(A$2:A$99))));"")}
D11:G11[;D12:G15]:{=WENNFEHLER(MTRANS(INDEX(B$2:B$99;SUMME(--(D$10:G10""))+1):INDEX(INDEX(B$2:B$99;SUMME(--(D$10:G10""))+1):B$99;VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(B$2:B$99;SUMME(-- (D$10:G10""))+1):B$99;5));0)+WENNFEHLER(VERGLEICH("Tel *";INDEX(B$2:B$99;SUMME(--(D$10:G10 ""))+1):B$99;0)-VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(B$2:B$99;SUMME(--(D$10:G10""))+1):B$99; 5));0)=1;0)));"")}
Dank zurück! Gruß & schö1Adv, Luc :-?
Danke ... owT
26.11.2016 22:44:17
Matthias
AW: Alternativen zu den pluralen Matrixformeln ...
27.11.2016 09:22:56
...
Guten Morgen Luc,
... ich kenne ja Deine Vorliebe für diese. Die Vorteile dieser hast Du mir schon dargelegt (Ressourcenschonender und damit schneller in der Auswertung).
Du kennst aber auch meine Argumentation gegen deren Einsatz (mit einigen Ausnahmen), wo in vielen Fällen die Nachteile dieser Formeln die Vorteile zumindest aus meiner Sicht aufheben. Das beginnt mit der mangelnden Transparenz dieser Formeln. MS bietet kein sofortiges Erkennungsmerkmal für diese im Unterschied zu den klassischen einzelligen Matrixformeln an. Darüber hinaus bedarf es einer (oft nicht wirklich möglichen) optimalen Einschätzung, wie groß der Ergebnisbereich dessen sein muss. Ansonsten muss eine nicht ganz unaufwendige Änderung vorgenommen werden.
An hiesigem Beispiel lässt sich das wie folgt aufzeigen: Angenommen es kommt auch nur für eine Person nicht nur max 3 sondern eine 4. und sogar 5. Datenzelle hinzu, muss der gesamte Formel-Ergebnisbereich gelöscht und neu definiert werden. Hinzu kommt, dass die notwendigen Formeln auch ganz schön voluminös werden können.
Meine alternative einfache einzellige Formel für Deinen ersten Lösungsansatz (mit Ident) wäre:
In D2:
=WENN(SPALTE(A1)>ZÄHLENWENN($A:$A;$C2);"";INDEX($B:$B;VERGLEICH($C2;$A:$A;)+SPALTE(A1)-1))
und Formel nach rechts und unten kopieren.
Deine Lösungsformel für Daten ohne Ident hat noch einen Haken, denn "Max Muster" wird damit "verschluckt".
Meine alternative Lösung für Daten ohne Ident wäre unter der bereits gestern dazu von mir genannten Voraussetzung (deutsche PLZ am Beginn des jeweils 3. Datensatzes einer Adressangabe) ein zweiteiliger Formelansatz. Eine einfache einzellige AGGREGAT()- Formel für die Ermittlung Personennamen und eine einzellige AGGREGAT()- Formel (die möglicherweise noch etwas optimiert werden könnte) für die diesen zugeordneten Daten:
In D11:
=WENNFEHLER(INDEX(B:B;AGGREGAT(15;6;ZEILE(B$1:B$99)/ISTZAHL(--LINKS(B$3:B$99;5));ZEILE(A1)));"") und Formel nach unten kopieren:
In E11:
=WENN(D11="";"";WENN(INDEX($B:$B;AGGREGAT(15;6;ZEILE(C$1:C$99)/ISTZAHL(--LINKS($B$4:$B$99;5)); ZEILE(B1))+SPALTE(B1))=$D12;"";INDEX($B:$B;AGGREGAT(15;6;ZEILE(C$1:C$99)/ ISTZAHL(--LINKS($B$4:$B$99;5));ZEILE(B1))+SPALTE(B1)))) und Formel nach rechts und unten kopieren.
Dir auch einen schönen 1. Adventssonntag noch.
Gruß Werner
.. , - ...
Nun ja, und ich kenne die Deinige, ...
28.11.2016 00:46:21
Luc:-?
…Werner;
aber das muss jeder selber wissen und meine Variante ist auch schneller eingetragen. Im Übrigen gehe ich in diesem Fall davon aus, dass diese Herstellung einer transponierten Liste nicht dauerhaft per Fml erzeugt wdn soll, weshalb die ganze Liste anschließend auch kopiert und als Werte auf den ZellBereich gespeichert wdn könnte. Dann sind ohnehin alle Vor- bzw Nachteile irrelevant. Andererseits wäre das, falls das des Öfteren benötigt wird, auch eine Motivation für ein leicht umrüst- bzw entsprd para­metrier­bares VBA-Pgm, nur, dass das ähnliche Probleme mit der Aufgabe hätte wie eine reine Fml-Lösung. Beachtet wdn muss bei sehr großen Listen allerdings, dass die Xl-Fkt MTRANS (.Transpose) Limitierungen hat!
Aber im Einzelnen:
1. Mangelnde Transparenz von MatrixFmln kann ich nicht feststellen — sie liefern im pluralen Standard­Fall halt nur mehrere Werte in Vektor- oder MatrixForm, nicht eben selten in der Algebra. Ob die nun alle auf 1× oder indiziert wieder­gegeben wdn sollen, hängt eher davon ab, ob unbedingt Einzelwerte benötigt wdn oder ein zusammen­hängendes Datenfeld auch recht ist.
2. Die Länge kann man im konkreten Fall, besonders hier, vorher bestimmen. Für unüber­sicht­lichere Fälle habe ich vor Jahren mal eine von einer Ereignis­Routine unter­stützte UDF geschrieben, in der fest­gelegt wdn kann, welcher Teil des ihr über­gebenen Daten­felds (oder auch das ganze) aus­gegeben wdn soll. Danach erfolgt dann die Bereichs­Auswahl für die in einer Zelle als Argument dieser UDF einge­tragene Matrix­Fml, wobei gleich auch noch Zell­Forma­tierungen, ggf sinnvoll ange­passt, über­tragen wdn.
3. Vergrößert kann ein ErgebnisBereich auch im NormalFall immer leicht wdn, nur das Verkleinern erfordert eine Neuanlage des Ganzen. Insofern ist das auch für zusätzliche Spalten ganz einfach, man muss hier aber entweder zeilenweise arbeiten oder nur die 1.Zeile erweitert neu berechnen und dann auf die Folge­Zeilen über­tragen (auf­kopieren).
Ja, die alte Fml; hatte ich über­sehen. Liegt daran, dass D10 jetzt nicht mehr leer und deshalb +1 auch nicht mehr erforderlich ist:
D11:G11[;D12:G15]:{=WENNFEHLER(MTRANS(INDEX(B$2:B$99;SUMME(--(D$10:G10""))):INDEX(INDEX(B$2:B$99;SUMME(--(D$10:G10""))):B$99;VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(B$2:B$99;SUMME(-- (D$10:G10""))):B$99;5));0)+WENNFEHLER(VERGLEICH("Tel *";INDEX(B$2:B$99;SUMME(--(D$10:G10 ""))):B$99;0)-VERGLEICH(WAHR;ISTZAHL(--LINKS(INDEX(B$2:B$99;SUMME(--(D$10:G10""))):B$99; 5));0)=1;0)));"")}
Aber Deine 2-Fml-Lösung auf AGGREGAT-Basis scheint hier ohnehin günstiger zu sein, wobei sie als plurale MatrixFml evtl noch kürzer und günstiger wäre…
Schö1AdWoche, Luc :-?
AW: wohl aber nicht in Gänze ;-) ...
28.11.2016 08:53:15
...
Hallo Luc,
... zu Deinen letzten Aussagen, folgendes.
Vorab: Das Deine (Formel-)Variante schneller eingetragen ist, kann ich nun wiederum nicht nachvollziehen.
zu 1.) Mit "mangelnder Transparenz" meinte ich, dass man als Nutzer das aktuelle Array (Lage und Größe) erst richtig erkennt, wenn man eine diesbzgl. Zelle aktiviert und dann zusätzlich über {F5] und da über "Inhalte ..." die Option "aktuelles Array" aktiviert. Jedenfalls kenne ich keine einfachere Möglichkeit. Zweckmäßig wäre mE jedoch, dass die MS-Programmierer dafür Sorge getragen hätten, einen solchen Zellbereich sofort komplett dann zu markieren, also quasi so als ob diese "virtuell" verbundene Zellen sind.
zu 2.) Wenn ich die notwendige Länge eines Ergebnisbereiches erst vorher bestimmen (muss), dann ist das für mich einfach zu statisch.
zu 3.) Auch das Vergrößern und erst Recht das Verkleinern dieser Formeln ist mir zu wenig nutzerfreundlich.
Mein Fazit: Ich werde Dir die pluralen Matrixformeln nicht ausreden können, aber umgekehrt Du auch mir nicht diese als Vorteil einreden.
Gruß Werner
.. , - ...
Muss gleich mal weg, deshalb auf die Schnelle, ...
28.11.2016 15:43:39
Luc:-?
…Werner;
Schneller? Na klar; Bereich markieren → Fml in 1.Zelle und als MxFml abschließen → fertsch!
Transparenz? Komplettmarkierung → mE war das auch mal so (in alten Versionen); MS hat inzwischen mehrfach an der Selektierung rumgewerkelt und was wir jetzt haben ist das (vorläufige) Endergebnis davon.
Statisch? Jein, man kann ja auch so ein Hilfsmittel wie das erwähnte o.ä. einsetzen. Damit klappen dann auch Vergrößern und Verkleinern wunderbar. ;-)
Fazit: Bin noch am Überlegen, aber evtl kommt dabei ein neues Tool heraus, das matrix-verbundene FmlBereiche in EinzelFmln (oder reine Werte) zerlegt, wenn bestimmte Voraussetzungen gegeben sind.
Luc :-?
AW: bin dann auch gleich wieder w wie weg ...
28.11.2016 16:10:09
...
Hallo Luc,
... ich kann nur immer wieder darauf verweisen, dass zur Bewertung von "Schnelligkeit" einerseits die Auswertungszeit anderseits das Eingabe-/Änderungshandling und vor allem die Zeit zur Formelkonstruktion gehört. Bei einzelligen Formeln die weit genug eingeben werden/wurden, braucht man bei notwendigen Datenänderung gar nichts zu tun und bei notwendigen Formeländerung in einem Spaltenbereich nur einen Doppelklick auf die rechte untere Formelzellenecke. Also wäre ich da auf keinen Fall langsamer.
Aber entscheidender ist die Zeit, die man für die Konstruktion entsprechender Formelkonstrukte aufwendet bzw. aufwenden muss. Da bin ich zumindest bei einzelligen Formeln auf jeden Fall (nennen wir es) geübter als für die Erstellung von plurale Matrixformeln.
Ein gutes Beispiel, wo auch ich eine plurale Matrixformel einsetzen würde, findet sich z.B. in ähnlichen Aufgabenstellungen wie hier: https://www.herber.de/forum/archiv/1524to1528/t1527609.htm
Gruß Werner
.. , - ...
So, Tool zur Vereinzelung ist fertig, ...
28.11.2016 20:59:20
Luc:-?
…Werner (& Mitleser);
das ist allerdings nur ein Bsp dafür, wie man so etwas angehen könnte. Allerdings setzt das 2 Erfor­der­nisse voraus:
1. Die MatrixFml muss als benannte Fml unter einem definierten Namen angelegt wdn;
2. Die MatrixFml darf keine (teil-)relativen Bezüge enthalten.
Um das Ereignis nicht unnötig mit PgmCode zu belasten, habe ich dem Tool eine eigene SubProzedur gegeben, die nur aus der Ereignis­Proz heraus auf­ge­rufen wird. Hier steht diese im selben Dokument-Klassen­Modul und kann deshalb Private sein. Sie kann aber auch ein eigenes (Basis-)Modul haben, das Option Private Module haben kann, während die Prozedur selbst stets Public sein muss:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Call FormulaArrayIndex(Target)
End Sub

Rem Indizierg u.Elementarisierg v.ZellBereichen benannter MatrixFmln
'   die nur absolute Zell- u.BereichsBezüge aufweisen dürfen.
'   Vs1.0 -LSr:CyWorXxl -cd:20161128 -1pub:20161128h -lupd:20161128t
Private Sub FormulaArrayIndex(ByVal Ziel As Range)
Dim difSp As Long, difZl As Long, txFml$, xZ As Range
On Error Resume Next
With Application
On .CutCopyMode GoTo ex, ex
If IsArray(Ziel) Then
If Ziel.Cells(1).HasFormula Then
txFml = Mid(Ziel.Cells(1).FormulaArray, 2)
If IsError(ActiveSheet.Names(txFml)) Then
If IsError(ActiveSheet.Parent.Names(txFml)) Then Else GoTo iz
Else
iz:                 .EnableEvents = False
difSp = Ziel.Column - 1: difZl = Ziel.Row - 1
Ziel.ClearContents
For Each xZ In Ziel
xZ.Formula = "=index(" & txFml & "," & xZ.Row - _
difZl & "," & xZ.Column - difSp & ")"
Next xZ
.EnableEvents = True
End If
End If
End If
ex: End With
End Sub
Gruß, Luc :-?
AW: komme frühestens Do hierzu owT
29.11.2016 09:12:48
...
Gruß Werner
.. , - ...
@Luc & Werner
30.11.2016 20:59:29
Michael
Hi,
sorry, wenn ich etwas unbeteiligt wirke - die Index-/Wahldiskussion (und den hübschen Link auf 2009 oder was) habe ich verfolgt, aber eine eingehende Beschäftigung damit erlaubt mir mein voller Schreibtisch nicht recht...
Auf Anhieb ist mir nicht klar, wozu ich die FormulaArrayIndex brauchen kann: da ist mir scheint's irgendwas entgangen - sorry, ich will Euch nicht den Spaß verderben.
Schöne Grüße jedenfalls,
Michael
Siehe mein Fazit in meiner AW darüber, ...
01.12.2016 01:17:28
Luc:-?
…Michael;
man kann unter den genannten bestimmten Voraussetzungen auch einfach und bequem (wenn eine Normal­Fml­Variante nicht von vorn­herein ein­facher ist) mit Matrix­Fmln arbeiten und falls aber (ver­schieb­bare) Einzel­werte benötigt wdn, diese nach­träglich (bzw im Moment des Fml­Abschlusses) auto­matisch aus dem Matrix­Ergebnis­Block erzeugen. Da das mit Hilfe der Fkt INDEX geschieht, habe ich Indizierung und Elementarisierung geschrie­ben und die SubProz FormulaArrayIndex genannt. Probier's halt mal aus!
Nachtrag (für mehr Substanz ;-]): Weiter oben hatte ich eine andere UDF erwähnt, die die Arbeit mit pluralen Matrix­Fmln erleichtern kann. Diese heißt FlexArr und ihr von einer Ereignis- nebst einer HilfsProz unter­stütztes Wirken wird im folgd Bild (aus der ca 7 Jahre alten Hilfe zum FXss-AddIn) dar­ge­stellt:
Userbild
Gruß, Luc :-?
AW: ... nachfolgend realisiert ...
27.11.2016 08:31:17
...
Guten Morgen Matthias,
... zunächst aber Danke für Dein Lob :-)
Die mit KKLEINSTE() äquivalente {}-Formel zu meiner AGGREGAT()-Formel (bei Annahme Leerzellentrennung) in E2 wäre:
{=WENN(D2="";"";INDEX($A:$A;KKLEINSTE(WENN($A$1:$A$998="";ZEILE(A$2:A$999));ZEILE(A1))+SPALTE(A1))&"")}
Aber nun entschuldige jedoch bitte, wenn in ich meinem nachfolgenden Beitrag an Luc auf eine "Übersetzung" meiner dortigen neuen AGGREGAT()-Formeln in äquivalente {}-Formeln zumindest vorläufig verzichte.
Dies hat folgende Gründe:
- ich sehe (zumindest für mich) die AGGREGAT()-Formeln für die einfacher zu konstruierenden Formeln an, die aber auch schneller in der Auswertung sind als die äquivalenten einzelligen Matrixformeln.
- wenn nicht schon Heute, so wird doch in Kürze bzw. absehbarer Zeit wohl der weit überwiegende Teil der Exceluser keine Excelversion mehr unterhalb 2010 in Einsatz haben.
- wenn eine solche "Übersetzung" auch nicht all zulange Zeit in Anspruch nimmt, so ist es doch Zeit.
- na und nicht zuletzt, will ich möglichst oft eine Lanze brechen für Matrixfunktion(alität)sformeln (die AGGREGAT()-Formeln betrachte ich ja nur als einen, wenn auch mächtigen Teil dessen), weil ich nun mal Meinung bin, man kann darüber vielleicht noch mehr (als mit den klassischen Matrixformeln) Einsteiger wie fortgeschrittene Exceluser für die "Excelformelwelt" interessieren.
Dir einen schönen 1. Adventssonntag dann noch.
Gruß Werner
.. , - ...
Euch auch einen schönen 1. Advent :-) owT
27.11.2016 08:45:28
Matthias
AW: VBA
26.11.2016 11:00:24
Fennek
Hallo,
mangels Formel-Kenntnissen, hier eine Variante mit VBA:
(ungetestet und nur ein Anfang)

sub test()
with columns(1).specialcells(2)
for each ar in .areas
ar.cells(1).offset(,2) = application.transpose(ar)
next ar
end with
end sub
mfg
(Die "Könner" werden gleich auf einige Fehler hinweisen)
Nicht Fehler, sondern Unbestimmtheit, ...
26.11.2016 12:27:34
Luc:-?
…Fennek;
Areas musst du ja erstmal festlegen! Wieviele sollen das sein und wie legst du die fest? Eine Adressliste besteht ja üblicherweise nicht nur aus 2 Adressen, denn da würden sich ja weder Fmln noch ein Pgm lohnen.
Gruß, Luc :-?
AW: Nicht Fehler, sondern Unbestimmtheit, ...
26.11.2016 16:28:03
Fennek
Hallo Luc,
danke für den Kommentar, aber ich verstehe ihn nicht ganz. "Specialcells(2)" mit areas bestimmt alle Bereiche zwischen 2 Leerzeilen.
mfg
Eben, und sind die auch vorhanden...? Das ...
26.11.2016 18:14:11
Luc:-?
…weiß nur astis!
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige