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

Bereichsnamen nutzbar wenn Spalten sich ändern?

Bereichsnamen nutzbar wenn Spalten sich ändern?
07.06.2016 10:37:13
Juliane
Hallo,
ich habe einen Reiter (1) in dem ich eine Auswertung aus einem System (Excel-Report)stupf reinkopiere. Jetzt habe ich einen zweiten Reiter, in dem automatisch die Daten aus dem 1. Reiter stehen sollen; allerdings nur für ein paar relevante Spalten.
Ziel ist es, dass ich den kompletten 1. Reiter permanent aktualisieren kann: d. h. alles markieren - löschen - neue Auswertung aus System rein.
Ich hatte erst die Idee, dass ich basierend auf dem 1. Reiter Berechsnamen für die Spalten definiere und dann im Reiter 2 statt Formeln nur "=Bereichsname" eintrage. Dann hat er theoretisch die jeweils relevanten Daten der relevanten Spalten.
ABER! Problem ist, dass sich die Spalten des Systemexports ändern können. Zwar nicht die Spaltentitel, aber theoretisch die Reihenfolge der Spalten.
Soweit ich das sehen hilft mir dann meine Idee mit den Bereichsnamen nicht weiter. Außer ich aktualisiere in dem Fall jedes Mal.
Oder gibt es da eine geschickt Möglichkeit?
LG

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: über Spaltentitel ist die Spaltenzuordnung ...
07.06.2016 10:42:21
...
Hallo Juliane,
... z.B. mit VERGLEICH() eindeutig möglich.
Gruß Werner
.. , - ...

AW: über Spaltentitel ist die Spaltenzuordnung ...
07.06.2016 10:51:26
Juliane
Hallo Wernder,
das klingt erst mal gut. Wo kann ich den Vergleich denn integrieren? Kommt er in die Definition des Bereichsnamens? Oder ist dein Vorschlag ohne Bereiche?
Bitte hilfe mir auf die Sprünge, wie ich das jetzt konkrete umsetzen kann. Ich kenne mich mit der Funktion Vergleich nciht aus.
VG

dynamische Bereichsnamen
07.06.2016 10:48:13
Rudi
Hallo,
klar geht das.
Schema:
Name: Bereich1
Bezug: =INDEX(Tabelle1!$1:$1;VERGLEICH("Spaltentitel";Tabelle1!$1:$1;)):INDEX(Tabelle1!$100:$100;VERGLEICH("spaltentitel";Tabelle1!$1:$1;))
Gruß
Rudi

Anzeige
AW: dynamische Bereichsnamen
07.06.2016 11:07:22
Juliane
Hallo Rudi,
leider fehlen mir die Kenntnisse, da ich weder die Index noch die Bergleichs-Formeln kenne. Daher weiß ich auch nicht, wie ich deine Formel jetzt für mich anpassen kann.
Könntest du es für mich an einem Beispiel machen:
Angenommen die Spalte soll heißen "Nmmer". Die Tabelle heißt "Liste" (A1:D1000).
Ich will jetzt im Reiter 2 die Nummer in Spalte A ausgeben: daher steht hier der Verweis auf den bereich drin "=Nummer". Der Bereich selber muss so definerit sein, dass er die Nummer im Reiter 1 findet, egal, ob sie nun dort in Spalte B oder C steht.
Besten Dank

Anzeige
AW: dynamische Bereichsnamen
07.06.2016 12:16:11
Rudi
Hallo,
was ist denn so schwer daran?
Name: Nummer
Bezug: =INDEX(Liste!$1:$1;VERGLEICH("Nummer";Liste!$1:$1;)):INDEX(Liste!$1000:$1000;VERGLEICH("Nummer";Liste!$1:$1;))
Gruß
Rudi

AW: dynamische Bereichsnamen
07.06.2016 13:07:41
Juliane
Hallo Rudi,
ok, es hat geklappt. Nur kann ich die Funktionsweise der Formel nicht ganz nachvollziehen. Ist das so richtig:
- grundsätzlich 2 Index-Bestandteile um den Bereich von Anfang bis Ende einzugrenzen
- Ich brauche die 2 Index Teile um die Spalte zu ermitteln
- das mache ich über den Vergleich
- der Vergleich ermittelt mir als Ergebnis z. B. den Wert "A" (wenn A die gesucht Spalte ist)
- Und Index nutzt dann diese Information, um in der Zeile 1 (also die Überschriften), Spalte A zu suchen
Aber besteht eine Index-formel nicht immmer aus 3 Teilen - Index(Bereich, Spalte, Zeile)?
wo ist denn dann in deiner Formel dieser 3. Teil?
Lieben Dank

Anzeige
AW: dynamische Bereichsnamen
07.06.2016 13:29:10
Rudi
Hallo,
Index gibt es in 2 Varianten. Als Matrix und als Bezug
Siehe hierzu auch http://www.online-excel.de/excel/singsel.php?f=180
In deinem Fall gibt Index einen Bezug zurück. Zeile 1, Spalte in der "Nummer" steht : Zeile 1000, Spalte wo in Zeile 1 "Nummer" steht.
3-Teilig: Das gilt für die Matrixversion. Besteht die Matrix aber nur aus 1 Spalte oder Zeile kann auf den 3. Parameter verzichtet werden. z.B.=Index(A:A;5)
Gruß
Rudi

AW: dynamische Bereichsnamen
07.06.2016 14:17:01
Juliane
Alles klar. besten Dank

OT: Matrix ist ein zu allgemeiner Begriff, denn …
07.06.2016 17:04:30
Luc:-?
…damit kann sowohl ein BereichsBezug als auch ein Datenfeld als Ergebnis eines Ausdrucks gemeint sein, Rudi.
Ansonsten ist es schon erstaunlich, dass ein Pgmmierer wie PH von einem FmlSpezi wie Werner (neopa) erst auf die Möglichkeiten von INDEX hingewiesen wdn muss. Offensichtlich pgmmiert(e) er so wie wohl die Mehrheit → (daten-)typenrein. ;-]
Das mag in Access angehen, nicht aber in Xl. Die (alten) Xl-StandardFktt leben geradezu von der TypVariabilität bei Argumenten und mitunter auch ihrem Ergebnis wie im Falle von INDEX, das immer, wenn es möglich ist, ZellBezüge liefert (INDIREKT macht das stets).
Nachdem ich nun deinem Link gefolgt bin (der jetzige Text ist neueren Datums - letzte Revision: 2015-03-05 -, denn ich kannte ihn noch nicht), muss ich feststellen, dass PH sich noch ein weiteres Mal irrt.
Zitat: …Eingabe: =Index(Bezug;Zeile;[Spalte];[Bereich]) Dies bedeutet normalerweise, dass Spalte und Bereich optional anzugeben sind, aber Bezug und Zeile verpflichtend. Tatsächlich ist dies aber falsch
Was er hier als GegenBsp anführt, nämlich =SUMME(INDEX((Januar;Februar;März);;;C1)), trifft diesen TatBestand nicht, denn Arg2+3 gelten ebenfalls (implizit) als Angabe, nämlich von 0. Das wird allein schon durch das ListenTrennzeichen ; bewirkt und ist auch bei anderen Xl-Fktt, zB =WENN(A1>100;1;), übliche Praxis. Man kann das leicht in einer UDF nachgestalten; das sollte ein (VBA-)Pgmmierer aber wissen!
Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: ach ja, Theorie und Praxis ...
08.06.2016 14:16:55
...
Hallo Luc,
... zu Deiner Feststellung würde ich meinen, dass Du theoretisch Recht hast, aber auch Peters Aussagen praxisbezogen nicht falsch sind.
Das 2. und 3. Argument in der von Peter aufgezeigten Formel (ohne 0 oder mit 0) sind im Sinne der Excel-Funktions-Definition natürlich Argumente. Doch versuch mal die Wirkungsweise einer 0 oder eines "nichts" an diesen Stellen der Formel einem "Standard-"Exceluser nachvollziehbar, einleuchtend und kurz zu beschreiben. Also mir würde es nicht gelingen, deshalb lasse ich es auch. So gesehen sind die getroffene Aussagen von Peter schon verständlich(er), also zumindest für mich.
Abgesehen davon steht für mich fest, dass zumindest in meiner Excelpraxis ich bisher noch keinen einzigen Fall hatte, wo ich INDEX() mit einer Bereichsoption wirklich gebraucht habe bzw. eine solche benötigt hätte. Mir fällt auch kein sinnvolles Praxis-Beispiel ein. Dir?
Das von Peter gewählte Beispiel ist mE auf jeden Fall ein sehr theoretisches, welches so in der Praxis mE nicht vorkommt bzw. man nur in abgewandelter Struktur vorfinden würde.
Eher nachvollziehbar wäre auch anstelle der Suche nach einer Monatsnummer die Suche nach dem Monatsname, wenn diese genauso geschrieben sind wie in Zeile 5) oder wenn wirklich nach der Monatsnummer gesucht werden soll, eine (Spalten-) lückenlose Datenbasis.
Wenn das der Fall sein sollte (dürfte mE allerdings auch ein theoretischer Falls sein), würde ich die Auswertungsformel ohne umständliche Bereichsdefinitionen wie nachfolgend in A2 schreiben. (Auch da nutze ich übrigens für das zweite Argument von INDEX() die "Leer- oder 0-"Schreibweise). Die Formel A2 hätte dann auch noch den Vorteil, dass auch alle 12 Monate leichter ausgewertet werden können als mit Hilfe einer Bereichsoption.
 ABCDEFGH
1FebMonat2     
215Summe15     
3        
4        
5 Jan  Feb  März
6 1  4  7
7 2  5  8
8 3  6  9

Formeln der Tabelle
ZelleFormel
A2=SUMME(INDEX(6:8;;VERGLEICH(A1;5:5;)))
C2=SUMME(INDEX((B6:B8;E6:E8;H6:H8); ;;C1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Werner
.. , - ...

Anzeige
Aus der Sicht eines einfachen Xl-Nutzers ohne ...
09.06.2016 04:25:32
Luc:-?
…PgmmierKenntnisse hast du sicher recht, Werner,
aber PH ist Pgmmierer und als solcher muss er sich denken können, warum das so ist. Dann kann er auch nicht einfach behaupten, die Hilfe sei falsch, sondern müsste erklären, warum das so ist! Wir beide hatten darüber vor geraumer Zeit schon mal diskutiert, du erinnerst dich sicher, und es ist tatsächlich so, dass zwischen leeren und fehlenden Argumenten unterschieden wird, weshalb ich das auch in UDF-Beschrei­bungen verwende, obwohl VBA hier eigentlich keinen Unterschied kennt, aber das ist ja sicher nicht die Sprache der (alten) XlFktt. Ein Default- bzw Standard-Wert wird ggf dann für ein Argument angenommen, wenn es gänzlich fehlt, ansonsten ist er bei ZahlenTypen und idR bei Variant 0. Bei Texten ist er LeerText. Fehlen können dann aber nur alle Argu­mente ab dem ersten entfallenden.
In VBA kann man nur bei ParameterFeldern relativ einfach zwischen leer und fehlt unterscheiden, denn am Ende des Feldes gänzlich fehlende Elemente wdn naturgemäß nicht mitgezählt, denn hier ist die Anzahl derselben ja höchstens auf ein Maximum begrenzt, aber nicht festgelegt (zB die Argumente von SUMME). Wird aber ein Listen­Trennzeichen gesetzt, wird das so initiierte und ggf leere Element mitgezählt. Bei allen EinzelArgumenten ist diese Unterscheidung ungleich schwerer, eigentlich nicht gegeben, aber man könnte das wohl über den internen Aufruf einer HilfsFkt mit Parameter­Feld realisieren.
PHs INDEX-Bsp mit BereichsAngabe ist schon sinnvoll. Ich habe so etwas auch schon des öfteren gezeigt, wenn du dich erinnerst. Allerdings ist das Bsp eben recht einfach. Es gibt aber auch Situationen, mit denen INDEX diesbzgl nicht fertig wird und nur Teile eines unzusammen­hängenden Bereichs wieder­geben kann, aber für (zusammenfassende) TotalWiedergaben ist das 4.Argument ja auch nicht gedacht (wie auch eigentlich das 2. und 3. nicht).
Nun, du arbeitest natürlich praxisorientiert. Aber mit Ersetzungen des einen (schwierigeren) Vorgehens durch ein anderes, kann man natürlich nicht die Möglichkeit des ersteren abschaffen. Man muss ggf trotzdem definieren, Erklärungen und Strategien finden, denn so etwas könnte auch mal die einzige Möglichkeit sein (das ist so wie mit den dualen MatrixFmln - sie sind nun mal möglich!).
Du entschuldigst, dass ich jetzt nicht näher auf dein Bsp eingehen kann, aber ich muss Schluss machen.
Morrn, Luc :-?

Anzeige
AW: dazu ...
09.06.2016 15:49:09
...
Hallo Luc,
... kannst Du mal ein praxisnahes Beispiel für eine sinnvolle Nutzung von Bereichsangaben hier aufzeigen?
Das Beispiel welches Peter angeführt hat, ist für mich nach wie vor nicht sehr praxisnah. Entweder die Monatsdaten stehen ohne Leerspalten direkt nebeneinander oder die Monatsangaben haben ein eindeutige Spaltenüberschrift (z.B. wie bei Peter), dann aber wahrscheinlich nicht nur 3 sondern zumindest 12 Monate.
Die Formel mit Bereichsangaben wird für z.B. 12 Monate fast 4 mal so lang, währenden mein Formellösungsvorschlag identisch bleibt
Gruß Werner
.. , - ...
oT: ich gehe in wenigen Minuten offline und werde dann wahrscheinlich frühestens Montag Nachmittag wieder online sein.

Anzeige
...komme ich ggf im Laufe des Tages bzw ...
13.06.2016 03:54:53
Luc:-?
…Abends, Werner;
meine wenige Restzeit ging für Sabines Problem drauf!
Morrn, Luc :-?

Besonders praxisnah wird's jetzt nicht, aber ...
14.06.2016 02:54:38
Luc:-?
…es ist zumindest eine zusätzliche Lösungsmöglichkeit für ein kürzlich gelöstes Problem, Werner.
Ich habe deshalb auf dein damaliges Bsp in meiner Erweiterung zurückgegriffen und nur eine Bedingung etwas geändert, damit's interessanter wird. Außerdem habe ich mir erlaubt, deine Lösung auf eine plurale MatrixFml umzustellen, damit nur 1-, nicht 4-mal gerechnet wird (das ist das Problem, das oftmals künstlich erzeugt wird, nur um {} u/o Ergebnis­Bereich­Fixierung zu vermeiden → man kann sich vorstellen, was das für die Rechen­Belastung bedeutet, wenn so aus einigen Hdt uU Tsde MatrixFmln wdn, die alle stets den ganzen ErgebnisBereich berechnen, aber immer nur einen Wert daraus zurückgeben!).
Interessant ist hier vor allem der Unterschied zwischen deiner Lösung, die per AGGREGAT Auswahl­Indizes für INDEX bildet, und meiner neuen, die das Ergebnis von NoErrRange einfach nur mit INDEX abbildet (WENNFEHLER habe ich nur bei meiner Fml eingesetzt, um #BEZUG! zu unterdrücken, bei deiner ist das ja hier nicht erforderlich → übrigens kannst du das gleiche Ergebnis auch mit der direkten Verwendung des in der Anmerkung angegebenen Bezugs erreichen!).
INDEX hat also die (begrenzte) Möglichkeit, mehrere TeilBereiche zusammen­gefasst abzubilden, sofern alle auftretenden Zeilen-, Spalten- und (Teil-)BereichsBezüge angegeben wdn (können). Dabei reicht ggf die Angabe einer 0 für Zeilen- u/o SpaltenBezug nicht (im Bsp konnte nur die Spalte=0 gesetzt wdn)!
Diese Unterschiede deutlicher heraus­zuarbeiten, war neben dem oben bereits angedeuteten der eigent­liche HptGrd für die Änderung deiner Fml auf eine plurale MxFml. Ich gehe davon aus, dass dir klar ist, warum die Ergebnisse so (unterschiedlich angeordnet) ausfallen müssen. Ich gehe aber ebenso davon aus, dass nur die Wenigsten das verstehen geschweige denn erklären könnten… ;-)
Nun, auch bei der Ermittlung der Schriftfarbe wird auf Basis deiner Lösung zwar INDEX, aber nicht unbedingt sein 4.Argument benötigt. Und in meiner diesbzgl Fml könnte ganz auf INDEX verzichtet wdn, weil CellContIn das Ergebnis von NoErrRange direkt verarbeiten kann:
 ABCDEFGH
14VorNNNamAltergesuchtNamen:   
15VN_01NN_0145VN_02NN_02NN_03NN_07NN_09
16VN_02NN_0256älter alsNN_02NN_03NN_07NN_09
17VN_02NN_034740NN_02NN_03NN_07NN_09
18VN_01NN_0458AnzahlNN_02NN_07NN_09Anzahl
19VN_03NN_05324NN_03  1
20VN_01NN_0627 PflaumeGrünBlau<--Schriftfarbe
21VN_02NN_0758SchriftfarbeRot   
22VN_01NN_0862Anmerkungen:PflaumeRotGrünBlau
23VN_02NN_0963NoErrRange liefert hier den hybriden Bereich (B16:B17;B21;B23).
24VN_02NN_1037CellContIn gibt hier eine Zelleigenschaft wieder, was Zellbezug erfordert.
25VN_03NN_1162VJoin&MxJoin verbinden alle Zellinhalte im Bereich, VSplit kehrt das um.
26E15:H15: {=INDEX(B15:B25;AGGREGAT(15;6;ZEILE(B1:B11)/(A15:A25=D15)/(C15:C25>D17);SPALTE(A1:D1)))}
27E22:H22: {=T(JETZT())&CellContIn(INDEX(B15:B25;AGGREGAT(15;6;ZEILE(B1:B11)/(A15:A25=D15)/(C15:C25>D17);SPALTE(A1:D1)));;;"fcn")}
28E16:H16: {=VSplit(VJoin(WENN((C15:C25>$D17)*(A15:A25=D15);B15:B25;"");;-1))}
29E17:H17: {=VSplit(MxJoin(NoErrRange(B15:B25;;(A15:A25=D15)*(C15:C25>D17))))}
30E18:G19: {=WENNFEHLER(INDEX(NoErrRange(B15:B25;;(A15:A25=D15)*(C15:C25>D17));ZEILE(A1:A2);;SPALTE(A1:C1));"")}
31E20:G21: {=WENNFEHLER(T(JETZT())&CellContIn(INDEX(NoErrRange(B15:B25;;(A15:A25=D15)*(C15:C25>D17));{1;2};;{1.2.3});;;"fcn");"")}
32D19: {=AGGREGAT(3;6;NoErrRange(B15:B25;;(A15:A25=D15)*(C15:C25>D17)))}<-- richtig
33H19: {=AGGREGAT(3;6;INDEX(NoErrRange(B15:B25;;(A15:A25=D15)*(C15:C25>D17));ZEILE(A1:A2);;SPALTE(A1:C1)))}<-- falsch
Außerdem mag (ggf nur für andere) auch noch interessant sein, warum AGGREGAT zur Anzahl­Ermittlung nur als singulare MxFml fktioniert, aber ein richtiges Ergebnis nur ohne INDEX liefert (bei direkter Verwendung der Bezugs­Angabe reicht sogar eine NormalFml; die MxFmlForm wird also nur wg NoErrRange benötigt!).
Man könnte das hier glatt als RätselFrage bringen und dann weiter diskutieren!
Falls du noch näher an die Praxis willst, und dann wohl möglichst alternativlos, werde ich ggf auf Obst&Gemüse vs Früchte zurückgreifen müssen… ;-)
Falls du vergessen hast, wie's geht, aber hier noch antworten willst, noch der Forumslink zum Vorbeitrag:
https://www.herber.de/forum/messages/1498509.html
Morrn, Luc :-?

Anzeige
AW: ist mE ein unzutreffendes Beispiel ...
14.06.2016 17:11:50
...
Hallo Luc,
... diese zeigt, wenn überhaupt nur über "Umwege" auf, nach was ich gesucht bzw. nachgefragt hatte.
Mit "Umwege" meinte ich das generieren von Bereichsangaben für INDEX() wie z.B. in E18:G19 über eine Deiner UDF, die dann notwendig/sinnvoll wird/ist, wenn bestimmte Zusatzauswertungen nicht mit Excelstandardfunktionalitäten (ohne alte Excel4makros) vorgenommen werden können (z.B. Auswertung von Formaten) und trotzdem eine Formellösung angestrebt ist/wird.
Ich meinte ein Beispiel, dass wirklich mit der von INDEX() ausgewiesene Bezugsversion mit Bereichsangaben in einer singulare Formel realisiert wird, und zwar analog dem Beispiel von Peter nur eben "praxisnäher" und ohne Hochzüge und Umwege.
Richtig eingeschätzt hast Du, dass wohl nur äußert wenige neben Dir eine derartige Lösung wie in Deinem Beispiel aufgezeigt realisieren könnten und es dann auch würden.
Nachfolgend betrachte ich nur Dein Beispiel bzgl. der Auswertung der Namen in den Zellen D19 und E15:H15.
Die Formel in D19 zeigt mir weder das, was ich suchte und ist außerdem schon mehr als gekünstelt.
Jeder einigermaßen erfahrene Exceluser wird doch hier lediglich schlicht und einfach eine SUMMEWENNS()-Formel einsetzen oder eben alternativ =SUMMENPRODUKT((A1:A99=D15)*(D1:D99>D17)).
Auch Deine plurale Matrixformel in E15:H15 ist mE kein Beispiel dafür, wo der Einsatz einer BEREICHSangabe in einer Bezugsversion von INDEX() erfolgt.
Deine Aussage zu den pluralen Matrixformeln teile ich nur bedingt.
Hast Du schon mal eine Ergebnis­Bereich­Fixierung für mehrere (z.B. nur) Dutzende (um nicht wie Du von tausenden Zellen zu schreiben) vorgenommen? Die Erzeugung dafür ist vor allem starr, was sich insbesondere bei evtl. notwendigen Änderungen mehr als ungünstig auswirkt. Außerdem kann man im Nachgang äußerlich nicht erkennen, wie groß der definierte Ergebnisbereich ist (wie z.B. bei verbundenen Zellen).
Im konkreten Beispiel würde ich für die plurale Formel den Ergebniszellbereich erstens größer _ definieren und die Formel entsprechend reichlich vordefinieren z.B. so: {=WENNFEHLER(INDEX(B:B;AGGREGAT(15;6;ZEILE(B15:B99)/(A15:A99=D15)/(C15:C99>D17);SPALTE(A1:Z1)));"") }
Aber bevorzugen würde ich wegen der besseren Erkennbarkeit und Flexibilität trotzdem die singulare Matrixfunktion(alität)sformel in E15:
=WENNFEHLER(INDEX($B:$B;AGGREGAT(15;6;ZEILE($B15:$B99)/($A15:$A99=$D15)/($C15:$C99>$D17);SPALTE(A1))) ;"") 
die ich dann einfach nach rechts kopieren würde. Die dadurch reduzierte Auswertungsgeschwindigkeit ist bei derartigen überschaubaren Bereichen völlig unbedeutend.
Gruß Werner
.. , - ...

Anzeige
Nun, ich hatte schon befürchtet, dass du ...
15.06.2016 02:14:11
Luc:-?
…nicht verstehst, worum es mir bei diesem alten und redigierten Bsp ging, Werner,
denn du klebst irgendwie an überkommenem „Brauchtum“. ;-]
Deshalb zuvor ein allgemeines Statement zur Problematik in bezug auf deinen Wunsch:
Es ist sicher nicht einfach ein praxisnahes Bsp für den sinnvollen Gebrauch des 4.INDEX-Arguments zu finden, weil das sicherlich selten benötigt wird, denn …
1. sollte man sowohl listenförmige als auch KreuzTabellen so anlegen, dass sie eine rationale Auswertung ermöglichen;
2. kann man aus jeder rational aufgebauten Tabelle Bereiche u/o ihre Daten nach Kriterien oder zufällig auswählen, so dass übliche Xl-Fktt verwendet wdn können;
3. kann man, auch, wenn benötigte Kriterien fehlen, diese über Hilfszellen (ggf als einfache AuswahlMarkierung) hinzufügen.
So bleiben also nur die Fälle übrig, in denen …
1. benötigte Kriterien fehlen,
2. die Anlage von Hilfszellen nicht möglich oder zu aufwendig ist und auch parallele AnkreuzListen nicht infrage kommen,
3. die benötigten TeilBereiche sehr unterschiedlich, aber statisch sind und es folglich einfacher wäre, sie direkt anzusprechen (in VBA-Makros habe ich solche Versuche schon des öfteren gesehen!).
Trotzdem kommt so etwas vor und viele (alte) XlFktt können auch damit umgehen. INDEX nun hat primär die Aufgabe, einzelne Werte aus ZellBereichen zurückzugeben. Da sollte dann auch mit diskreten bzw hybriden (teils diskret, teils kontinuierlich wie im Bsp) Bereichen umgegangen wdn können. Außerdem kann INDEX bekanntlich auch Datenfelder (aus Ausdrücken in Arg1) verarbeiten, wobei Arg4 wg fehlender Möglichkeit, mehrere Datenfelder in Arg1 anzugeben (ich hatte mal eine Sammel-UDF geschrieben, die das erlaubt → Collect - ggf recht nützlich), entfallen muss.
Nun ist bekannt, dass INDEX auch ganze Spalten oder Zeilen zurückgeben kann. Das wird so nicht für Bereiche gelten können, da diese idR kaum alle gleich groß sein und gleiche Zeilen-/SpaltenNrn aufweisen wdn. In diesen Fällen muss, wie im Bsp gezeigt, nicht nur Arg4 angegeben wdn.
Der Übersichtlichkeit halber kommentiere ich im Folgenden deinen BT in vorliegender Reihenfolge:
- Generieren von Bereichsangaben für INDEX wie zB in E18:G19 über eine UDF
Das habe ich getan, um die Verbindung zu den ursprünglichen Lösungen beizubehalten und somit den Vgl zu erleichtern. Die Auswertung von Formaten ist übrigens auch mit deiner Lösung möglich (als plurale MxFml in E15:H15), wie E22:H22 zeigt (INDEX liefert in allen gezeigten Fällen, ebenso wie NoErrRange, ZellBezüge!), wodurch dieser Teil deiner Argumentation irrelevant wird (das sollte nur eine Demo sein, dass tatsächlich Zell­Bezüge geliefert wdn). Die XLM-Fkt scheidet hier aus, weil sie nur Einzel­Zellen verarbeiten kann und somit die MxFmln komplizieren oder gar unmöglich machen würde, könnte aber in deiner ursprünglichen Fml eingesetzt wdn (einer der wenigen Berech­tigungs­fälle solchen Vorgehens!).
- Realisierungsfähigkeit - äußerst Wenige
Ich habe nicht nur mich, sondern auch noch einige Andere gemeint, zuallererst natürlich auch dich! ;-)
So etwas kann kompliziert wdn und man muss einiges beachten. Dazu hatte ich mich ja bereits geäußert. Etwas mehr zu INDEX und unauffälligerer INDEX-Aktivität in Fmln nachfolgend (und ggf zum Schluss).
- Formel in D19 - gekünstelt?
Diese Fml ist Zugabe! Sie ist nur im Zusammenhang mit H19 zu sehen! Hierbei geht es darum, dass die Fml in H19 die Anzahl nicht mit INDEX und AGGREGAT ermitteln kann, weil INDEX hierzu (über meine Demo einer sinnvollen Anwendung dualer MxFmln - in anderem Zusammenhang) seine ZellBezüge verlieren würde, was nur noch die direkte Anzahl­Ermittlung ohne AGGREGAT erlauben würde. In D19 ist das aber oW möglich (ein Plädoyer für NoErrRange und ihr Ergebnis → hier ein hybrider Bereich)!
Der Wissenschaftler muss alle Wege untersuchen (für Mathematiker quasi eine existenzielle Frage!), der Ingenieur wählt dann den/die rationellsten aus… ;-)
- plurale Matrixformel in E15:H15 und INDEX-Arg4
Diese Fml basiert auf deiner ursprünglichen Fml, wie du sicher unschwer erkannt hast. Der Unterschied zu deiner Version besteht nur darin, dass hier nur 1× gerechnet wird (deine Version würde 4× alles berechnen, um dann nur einen, jeweils anderen Wert auszuwählen). Diese Auswahl des jeweils passenden Wetes übernimmt bei der MxFml-Version die Xl-Steuerung. Das wird dadurch ermöglicht, dass das 2.Arg als Ausdruck ein Datenfeld aus ZeilenNrn liefert, die nach­einander als INDEX-Arg2 verwendet wdn, abhängig von der relativen Position der Ergebnis­Zelle im Ergebnis­Feld. Somit ergeben sich wiederum ZellBezüge als Ergebnis, allerdings linear angeordnet. Im Grunde genommen sind das ebenfalls einzelne Bereiche (aus jeweils einer Zelle), die hier aber einfach über die Abzähl­Variante von INDEX (bei nur 2 Argumenten) ausgewählt wdn können. Weiter unten zeige ich, dass das mit einer Direkt­Angabe eines hybriden bzw diskreten Bereichs auch nur mit Arg4 fktio­nieren würde.
- plurale Matrixformeln - nebensächlich? ErgebnisFixierung nachteilig?
Es ist mit Sicherheit anzunehmen, dass diese Möglichkeit eingebracht wurde, um mehrere Werte (also Matrizen und Vektoren als Berechnungs­Ergebnis) mit nur einer Fml sowohl berechnen als auch ausgeben zu können - ein normaler mathematischer Ver­fahrens­weise analoger Vorgang. Das ist auch in anderen Kalku­lations­Pgmm so (nur das Handling ist oft anders)! Damit wären sie der eigentliche Zweck der Existenz dieses Features und die Existenz sowohl singularer als auch dualer MxFmln nur ein Neben­Effekt, der sich aus der Xl-Steuerung und ihrer Rolle bei der Daten­bereitstellung ergibt.
Ich halte es eher für einen Missbrauch dieser Fktionalität, wenn sie überwiegend zur Erzeugung von Einzelwerten benutzt wird. Das sollte die Ausnahme sein und ist nur notwendig, wenn anderenfalls ein falsches Ergebnis geliefert wird und keine günstige Alternative zV steht. Die „Mx(Fml)Fktio­nalität“ ist hierbei eher zu nutzen, ist aber (besonders bei Massen­Berechnungen) eher kontra­produktiv, falls auch eine plurale MxFml möglich wäre. Die idR vorgebrachten Gegen­Argumente sind meist nur Schein­Argumente (oft in Verkennung der tatsäch­lichen Abläufe). Die Fixierung des Ergebnis­Bereichs kann auch ein Vorteil sein (Erschwerung versehentlichen Überschreibens) und einer nach­träglichen Erweiterung des Ergebnis­Bereichs geht iaR eine Erweiterung des Quell­Bereichs voraus, so dass ohnehin neu gestaltet wdn muss!
Die Größe des ErgebnisBereichs lässt sich leicht anzeigen, wenn man das dafür vorgesehene Feature benutzt. Außerdem kann man den ja auch färben!
Ansonsten bin ich ebenfalls der Meinung, dass man Xl nicht für Massen-DV missbrauchen sollte. Das kann man mit dem Laden voraggregierter DB-Daten iaR vermeiden (nur dazu müsste man sich näher mit SQL befassen und da liegt wohl oft „der Hase im Pfeffer“!).
- plurale MxFml und Größe des Ergebniszellbereichs
Für das Bsp ist dein Vorschlag irrelevant, denn darum ging's mir hierbei nicht. Es ist ja bekannt, dass man nur soviel Werte aus einer pluralen MxFml angezeigt bekommt, wie in den markierten Ergebnis­Bereich passen. Nebenbei, Ich hatte schon vor Jahren eine UDF geschrieben, die mit Unterstützung einer ereignis­ausgelösten Prozedur eine MxFml automatisch auf einen angegebenen bzw den erforderlichen Gesamt­Bereich ausdehnt (sogar inkl Formatierung!). Außerdem hatte ich auch eine Möglichkeit geschaffen, bei Bedarf alle Werte einer nur mit einem Wert präsenten pluralen MxFml zu berechnen (PlatzSpar­Modell).
So, dass war's wohl dazu. Ansonsten hatte ich ja den hybriden Bereich direkt als Bezug in der erforderlichen Schreibweise angegeben. Setzt man den statt deiner AGGREGAT- oder meiner NoErrRange-Konstruktion ein, wird sofort klarer, was passiert:
 IJKLM
14Alternative (Direktangabe des Hybridbereichsbezugs)(vertikal)
15NN_02NN_03NN_07NN_09NN_02
16NN_02NN_03NN_07NN_09NN_03
17NN_02NN_03NN_07NN_09NN_07
18NN_02NN_07NN_09AnzahlNN_09
19NN_03  4Pflaume
20PflaumeGrünBlau4Rot
21Rot  SchriftfarbeGrün
22PflaumeRotGrünBlauBlau
23Formeln    
24I15:L15: {=INDEX((B16;B17;B21;B23);;;SPALTE(A1:D1))}
25I22:L22: {=T(JETZT())&CellContIn(INDEX((B16;B17;B21;B23);;;SPALTE(A1:D1));;;"fcn")}
26I16:L16: {=VSplit(MxJoin((B16;B17;B21;B23)))}
27I17:L17: {=VSplit(MxJoin((B16:B17;B21;B23)))}
28I18:K19: {=WENNFEHLER(INDEX((B16:B17;B21;B23);ZEILE(A1:A2);;SPALTE(A1:C1));"")}
29I20:K21: {=WENNFEHLER(T(JETZT())&CellContIn(INDEX((B16:B17;B21;B23);ZEILE(A1:A2);;SPALTE(A1:C1));;;"fcn");"")}
30L19:=AGGREGAT(3;6;B16;B17;B21;B23)
31L20:=AGGREGAT(3;6;B16:B17;B21;B23)
32M15:M18: {=INDEX((B16;B17;B21;B23);;;ZEILE(A1:A4))}
33M19:M22: {=WENNFEHLER(T(JETZT())&CellContIn((B16;B17;B21;B23);;;"fcn");"")}

Ich glaube doch, dass du die Zusammenhänge selber herausfindest…! ;-)
Morrn, Luc :-?

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige