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

Rang ermitteln

Rang ermitteln
19.08.2017 16:16:55
Heier
Hallo Experten,
Ich möchte gerne in den Zellen A1 bis A6 den Rang aus den Zellen B1 bis B6 ermitteln.
Ich habe folgende Formel:
=RANG(B1;B1:B6) - grundsätzlich O.K.
Jetzt kann es aber vorkommen, das in den Zellen B1 bis B6 positive und negative Zahlen vorhanden sind.
Ich möchte jetzt, das z.B. 1 und -1 den gleichen Rang haben.
Wie müsste die Formel dazu aussehen? Könnt Ihr mir da weiterhelfen?
Vorab vielen Dank für Eure Hilfe.

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rang ermitteln
19.08.2017 16:25:34
Hajo_Zi
löse es mit Hilsspalte.

Tabelle2
 ABC
1511
25-11
3322
43-22
5133
61-33

verwendete Formeln
Zelle Formel Bereich N/A
A1:A6=RANG(C1;$C$1:$C$6)  
C1:C6=ABS(B1)  
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 25.12 einschl. 64 Bit



Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Anzeige
Rang ist wenig flexibel
19.08.2017 16:28:49
lupo1
B1: =RANG(ABS(A1);INDEX(ABS(A$1:A$7);)) geht leider nicht
Also:
B1: =ABS(A1) runterziehen und dann
C1: =RANG(B1;B$1:B$7) machen.
Unerwünschtheit der Rückgabe gleicher Ränge hast Du nicht angesprochen. Falls das doch so ist, kannst Du die Hilfsspalte noch modifizieren zu
B1: =ABS(A1)-ZEILE(A1)%%%
AW: Rang ist wenig flexibel
19.08.2017 16:39:28
Heier
Hallo,
vielen Dank für die schnellen Antworten.
Hat funktioniert.
Rang funktioniert nicht als Arrayformel
19.08.2017 16:44:51
WF
Hi,
stattdessen:
=SUMMENPRODUKT(1*(ABS(B1)< ABS(B$1:B$6)))+1
bei umgekehrter Rangfolge: > statt <
WF
netter Trick, m. gleichem Erg. auch b Dopplern owT
19.08.2017 17:38:05
lupo1
Obligater Performancetest
19.08.2017 17:48:18
lupo1
07 Sekunden: =RANG(B1;B$1:B$20000)
50 Sekunden: =SUMMENPRODUKT(--(B1&ltB$1:B$20000))+1
für je 400.000.000 Vergleiche bei je 20.000 Formeln.
Anzeige
das ist niederschmetternd
19.08.2017 18:20:25
WF
Excel benutze ich seit 1992
~ 10 Vergleiche pro Tag mal 365 Tage mal 25 Jahre ergeben 91.250
400.000 dividiert durch 91.250 mal 25 sind 109,6 Jahre
Da werde ich diese 43 Sekunden schmerzlich vermissen.
WF
Fast vergessen: meine Tabellen sind selten länger als 1.000 Zellen
ich auch
19.08.2017 19:08:09
lupo1
... und daher ziehe ich die Hilfsspalte vor. Denn weniger als der Verlust von Zeit wiegt die Hässlichkeit einer solchen.
Aber Du hast recht: Für kleine Tabellen - auch meine sind selten länger als 1000 Zeilen - ist der RANG-Ersatz gut geeignet. Wenn man denn mal wirklich gar nicht sortieren kann.
Anzeige
AW: ich auch
19.08.2017 20:07:27
Luschi
Hallo Lupo1,
mit ein paar Muckis im PC geht's auch ein bischen schneller:
8 sek.bei 16 GByte RAM, Intel i7 / 4 x 3,3 GHz
Gruß von Luschi
aus klein-Paris
Jegliche Entwickler tun gut daran, ...
19.08.2017 20:26:42
lupo1
... PC'S auf der Schwelle vom 2. zum 3. Drittel der Leistungsrange zu verwenden.
Die Begründung kennst Du.
AW: Jegliche Entwickler tun gut daran, ...
19.08.2017 20:42:56
Luschi
Hallo Lupo1,
natürlich habe ich hier noch einen Demorechner (8 Jahre alt) zu stehen, um meine Makros auf Realisierbarkeit im Büroumfeld der Firmen zu testen.
mfg & schönes WE wünscht
Luschi aus klein-Paris
Dann teste doch mal VRank, ...
20.08.2017 01:28:55
Luc:-?
…Lupo;
Du hast ja schon Testdaten, die ich erst erzeugen müsste. Als singulare MatrixFml wg ABS in Arg2 so:
{=VRank(ABS(B1);ABS(B$1:B$20000))} oder so {=VRANK(""&ZEILE(B1);ABS(B$1:B$20000)) } (mit Durch­Nummerierung der Elemente von Arg2)
Außerdem viell noch als plurale MatrixFml: {=VRank(;ABS(B1:B20000))}
Und übrigens bietet diese UDF noch deutlich mehr und intelligentere Möglichkeiten als die seltsame Auftei­lung von RANG ab Xl14/2010!
VRank: https://www.herber.de/forum/archiv/1516to1520/1516547_Spezielle_RANGOrdnung.html#1516547
(Datei in 4.Fortsetzung)
Morrn + schöSo, Luc :-?
Besser informiert mit …
Anzeige
Hier die Ergebnisse
20.08.2017 07:48:50
lupo1
150,00 Sekunden für {=VRank(A1;A$1:A$10000)} (singulär) kopiert, und jetzt kommt's, NUR in B1:B5 (!!!)
040,00 Sekunden für {=VRank(;A1:A10000)} (plural) in B1:B10000 gesetzt.
Ersteres war eine Bestätigung der Beobachtung, dass die singuläre Formel in einer einzigen Zelle ca. 30 Sekunden benötigte.
Letzteres ist mit geviertelten Werten von 20.000 Daten sowie 20.000 Auswertungen auf deren jeweils 10.000 zu vergleichen, also
001,75 für das normale RANG und
012,50 für WF'S SUMMENPRODUKT
Die ABS-Betrachtungen habe ich jetzt mal weggelassen. Sie werden daran nicht so viel ändern, und bei RANG geht es ja eh nur mit Hilfsspalte.
185,00 ergab sich dann noch mal für {VRank(;A1:A20000)} plural in B1:B20000. Zu vergleichen mit vorigem
007,00 für das normale RANG und
050,00 für WF'S SUMMENPRODUKT
Anzeige
Sei bedankt, ...
20.08.2017 14:18:19
Luc:-?
…Lupo;
bei Einsatz über 200 Werte war mir bei den ABS-Fmln nur aufgefallen, dass beide MatrixFml-Arten eine deutliche Verzögerung zeigten, sowohl bei ErstAnlage als auch bei Neuberechnung wg Änderung eines QuellWertes. Inwieweit das nun den (hier nicht genutzten) erweiterten Möglichkeiten geschuldet ist, die zumindest die Zeit zusätzlicher AbfragenVergleiche erfordern, oder aber gewissen Eigenheiten von Xl bei UDF-Einsatz (mindestens 2maliger Durchlauf bei Erstaufruf), kann ich nicht sagen, wahrscheinlich spielt aber beides eine Rolle. Zudem kommt hinzu, dass die UDF intern etliche Xl-Fktt und eine andere UDF benutzt, so dass sie ansich schon einen gewissen „SuperFkt“-Status, vglbar einer kompletten Fml, hat. Sie wäre also nicht ohne wesentliche Änderungen/Abstriche zu beschleunigen…
Demzufolge scheint RANG durchaus auf Massen-DV ausgerichtet zu sein, eine Beobachtung, die auch für andere neuere Xl-Fktt mit Beschränkung auf ZellBereiche zutrifft, aber dem Universalitäts­Gedanken der älteren, originären Xl-Fktt (wie SUMMENPRODUKT) entgegensteht. Auch für diese muss man ja mit einer höheren Anzahl interner Abfrage­Vergleichs­Operationen pro Element rechnen, während das bei RANG in klassischer Form nur eine sein dürfte.
Fazit: Daraus ergibt sich die Folgerung, dass Universalität zu Lasten der Performance geht und ursprüngliche Xl-Fktt (ebenso wie idR meine UDFs) nicht für Massen-DV vorgesehen waren bzw sind, sondern eher zur Unterstützung/Ermöglichung komplexer Berechnungen bei überschaubaren, voraggregierten DatenMengen, ggf auch aus detaillierten DB-Abfragen, womit wir wieder bei der Xl-Zweck-Diskussion wären… ;-)
Ein anderer interessanter Aspekt ist aber, dass mit den beiden EinsatzArten von VRank sehr deutlich wird, dass plurale MatrixFmln per sé schneller sind als die Aufteilung der gleichen Aufgabe auf singulare MatrixFmln, wenn auch nicht in linearem Verhältnis, was an Optimierungen durch Xl-Steuerung/-Fml-Interpreter liegen dürfte. Bei kleineren Datenmengen spielt das idR aber auch keine auffällige Rolle.
Muss jetzt abbrechen, habe aber noch einen Nachtrag.
Luc :-?
Anzeige
Ich würde anders behaupten, dass ...
20.08.2017 15:38:46
lupo1
... plurale UDF-Matrixformeln deswegen schneller sind, weil sie das Interface Excel zu VBA nur einmal bemühen müssen und dann intern arbeiten können.
Singuläre Excel-VBA-UDF (egal ob Matrix oder nicht) sind grundsätzlich nicht massentauglich.
Da muss man schon C++- oder C- oder auch FreeBasic-Kompilate wie .DLL oder .XLL verwenden. Normale Excel-Add-Ins sind ja auch nur wie normales VBA.
Der von mir gerettete Artikel http://xxcl.de/foreign/excelstuff.htm ist da wohl nach wie vor zutreffend.
Ja, das wird b.UDFs wohl noch hinzukommen, ...
21.08.2017 01:35:53
Luc:-?
…Lupo,
und würde auch die Nicht-Linearität der Performance-Relation besser erklären. Darauf deutet auch der verlinkte Artikel hin, der auch den initialen Leerlauf einer UDF erklärt. Allerdings lagen die alten Analyse-UDFs nicht als VBA-Code vor, sondern wohl als DLLs. Das AddIn enthielt jedenfalls keine PgmCodes, nur Namen, die wohl die Verlinkung zu den DLLs steuerten. Namenslisten scheint Xl auch intern für UDFs anzulegen. Darauf weist ihre Einbindung in klassische Xl-Anzeigen hin. Außerdem hatte ich neulich mal einen merkwürdigen Fehler in einer Datei, der das zu bestätigen scheint:
Ich sichere Dateien auf einer externen HD, die ich auch benutze, wenn ich mal am Laptop arbeiten muss. Eine so gesicherte und direkt von dieser HD auf dem Laptop bearbeitete und dann auch so dort gespeicherte Datei wies nach Rückspeicherung auf den Arbeits-PC eine UDF-NamensVerschiebung auf. Auf allen Blättern der Mappe waren die UDF-Namen (und nur diese!) nach gleichem Schema vertauscht, so dass keine UDF-haltige Fml mehr fktionierte, da ja meist schon die UDF-Argumente nicht mehr passten, weil die sich nicht verändert hatten. Hier muss folglich durch irgendeinen Fehler (die OS auf beiden PCs sind unterschiedliche Win-Versionen, 7 & 10!) eine interne und wohl mit der Datei gespeicherte Liste durcheinander gekommen sein…
Aber auch bei universellen Xl-Fktt könnte es einen Unterschied zwischen pluraler und singularer MatrixFmlForm geben, den ich bei neopas AGGREGAT-Konstrukten allerdings nicht nachweisen konnte (möglicherweise wg zu geringer TestGrößen).
Habe mir zu dem hiesigen Problem aber auch noch hybride Fmln einfallen lassen, die möglicherweise Laufzeiten zwischen den jeweiligen Varianten ergeben könnten. Falls das so ist, könnte man so ebenfalls hilfsspaltenfrei und für größere Datenmengen arbeiten, falls ein deutliches Ungleichgewicht zwischen negativen und positiven Werten besteht. Dazu folgendes KurzBsp:
 BCDEFG
9
Hybrid-normale (sing Mx-)Fmlplurale Matrixformel-FormelnTestdatennur Xl-Fkttzusätzl UDFAuswertenzusätzl UDF 483,54444 -206,59999 718,01111 412,45555 -326,07777 359,56666 -118,510101010 715,42222 579,03333 326,07777 C11[:C20]:=WENNFEHLER(RANG(ABS(B11);B$11:B$20);SUMMENPRODUKT(--(-B11<ABS(B$11:B$20)))+1)D11[:D20]: {=WENNFEHLER(RANG(ABS(B11);B$11:B$20);VRank(-B11;ABS(B$11:B$20)))}E11:E20: {=WENNFEHLER(RANG(ABS(B11:B20);B11:B20);Alternativ)}← Name benannter Formel (s.u.)F11:F20: {=WENNFEHLER(RANG(ABS(B11:B20);B11:B20);VRank(;ABS(B11:B20)))}Alternativ: =AUSWERTEN(WECHSELN("summe(--(abs(B#)<abs(B11:B20)))+1";"#";ZEILE(B11:B20)))
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Wäre interessant zu wissen, ob für diese 4 Fmln die Laufzeiten günstiger ausfallen als mit der jeweiligen Alternative allein.
Gruß & schöWo, Luc :-?
Anzeige
AW: evtl. 0-DatWerte sind unberücksichtist ...
21.08.2017 16:16:43
...
Hallo Luc,
... und zwar zumindest in Formel der Spalte C.
Mit 0-DatWerte meine ich nicht echte Leerzellen sondern eben Eingabe-Datenwerte 0. Um derartige korrekt mit zu berücksichtigen, fällt mir für die Formel C11 momentan z.B. folgendes ein: WENNFEHLER(RANG(ABS(B11+(B11=0)%%%);...
Gruß Werner
.. , - ...
Du hast recht, aber das Problem ist größer, ...
21.08.2017 20:00:02
Luc:-?
…Werner,
weshalb ich das nochmal korrigiert, aber Leerzellen, die folglich als 0 gewertet wdn, nicht vorgesehen habe:
 BCDEFG
9
Hybrid-normalesingulareplurale Matrixformeln-FormelnTestdatenFormelnMatrixFmlnAuswertendirekt(nur Xl-Fktt)483,54444(zusätzl UDF)-206,58888 718,01111 412,45555 -326,06666 118,010101010 -118,59999 715,42222 579,03333 326,06666 C11[:C20]:=WENN(B11<-MIN(B$11:B$20);SUMMENPRODUKT(--(-B11<ABS(B$11:B$20)))+(B11≤0);RANG(ABS(B11);B$11:B$20))D11[:D20]: {=WENN(B11<-MIN(B$11:B$20);VRank(ABS(B11);ABS(B$11:B$20));RANG(ABS(B11);B$11:B$20))}E11:E20: {=WENN(B11:B20<-MIN(B11:B20);Alternativ;RANG(ABS(B11:B20);B11:B20))}← definierter Name benannter Fml (s.u.)F11:F20: {=WENN(B11:B20<-MIN(B11:B20);VRank(;ABS(B11:B20));RANG(ABS(B11:B20);B11:B20))}Alternativ: =AUSWERTEN(WECHSELN("summe(--(abs(B#)<abs(B11:B20)))+1";"#";ZEILE()))
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Für Performance-Tests hätte die alte Vorlage ggf gereicht, aber da doch auch positive Werte (inkl 0) betroffen sein können, sollten wohl doch besser die neuen FmlVersionen getestet wdn.
Mit Dank für Deine Aufmerksamkeit! Gruß, Luc :-?
Anzeige
AW: Du schreibst es, aber ...
22.08.2017 09:35:07
...
Hallo Luc,
... hast es noch nicht wirklich behoben. Deine Formel in Spalte C unterscheidet nicht zwischen 0-Werten und (echten) Leerzellen. Bei Vorhandensein von solchen ergeben sich falsche Werte für die absolut kleinsten Zahlenwerte.
Das was Du anstrebst (Rangermittlung für Massendaten mit dem Spezialfall der Auswertung nur deren absoluter Werte) wird in Praxis wohl - wenn überhaupt - nur in äußerst seltenen Fall benötigt. Dann kommt es auf ein paar Sekunden mehr Rechenzeit wohl auch nicht an.
Und für die Auswertung von einigen Dutzend Datenwerten reicht eine "Standard"-Auswertungsformel.
Das Problem verursachende Deines Formelansatzes ist mE, dass Du den Vergleichswert in der Formel negiert hast, anstelle diesen auch mit ABS() zu behandeln.
Gruß Werner
.. , - ...
Anzeige
In der Fml in C habe ich tatsächlich vergessen, …
22.08.2017 19:54:37
Luc:-?
…die letzte Änderung (s. Alternativ) zu übernehmen und stattdessen Unnötiges eingebaut, Werner;
die (be-)richtig(t)e Fml lautet dann so:
C11[:C20]:=WENN(B11<-MIN(B$11:B$20);SUMMENPRODUKT(--(ABS(B11)<ABS(B$11:B$20)))+1;RANG(ABS(B11);B$11:B$20))
Allerdings bezieht sie so immer noch Leerzellen mit ein (war mir wie bereits zuvor geschrieben nicht so wichtig), was RANG natürlich nicht macht (liefert #NV), aber Walters SUMMENPRODUKT-Fml! Das könnte man folgendermaßen verhindern:
C11[:C20]:=WENN(B11<-MIN(B$11:B$20);WENNFEHLER(SUMMENPRODUKT(--(ABS(""&B11)<ABS(B$11:B$20)))+1;"");RANG(ABS(B11);B$11:B$20))
D11[:D20]:{=WENN(B11<-MIN(B$11:B$20);VRank(""&ZEILE(D1);WENNFEHLER(ABS(""&B$11:B$20);""));RANG(ABS(B11);B$11:B$20))}
Beide Fmln ergeben wie RANG #NV für jede Leerzelle. In der 2.Fml habe ich außerdem eine alternative Einzelwert­Auswahl­Methode von VRank benutzt. Die pluralen MatrixFmln in E:F wären dann ebenfalls entsprd zu ändern.
Mein Anliegen war hier, eine Fml zu finden, die ohne Hilfszellen auskommt, aber schneller ist als Walters, was ich (für MassenDV) nor­ma­ler­weise nicht, aber hier für Testzwecke mache (Lupo hat ja leider bisher nicht auf den Hybrid reagiert). Gleichzeitig habe ich gezeigt, dass nur das 2.Argument von RANG auf ZellBereiche festgelegt ist, was auch zu erwarten war. Es gibt aber noch eine wei­tere Beson­der­heit zu entdecken:
RANG kann in seinem 2., seinem HptAtgument auch diskontinuierliche Bereiche (zumindest solche Vektoren) ver­ar­bei­ten, aber nicht in seinem 1. (benötigt in pluralen Matrix­Fmln). Das weist erneut darauf hin, dass hier ange­gebene Bereiche von der Xl-Steue­rung (bzw dem Fml-Inter­preter) über ihre Elemente variiert wdn, aber eben nicht über dis­kon­ti­nuier­liche Bereiche! Das ist wohl dort nicht vor­gesehen (es gibt ja auch keine dis­konti­nu­ier­lichen Daten­felder!) und kann des­halb, für das Hpt­Argument, nur auf Fkts­Ebene pgmmiert worden sein (bei etlichen neueren Fktt, ~WENNs, ist auch das nicht der Fall!). Wollte man das errei­chen, müssten die Elemente des 1.Arguments erst in ein (lücken­loses) Daten­feld trans­for­miert wdn, was mit meinen UDFs VJoin und VSplit idR mög­lich wäre*.
* Interessanterweise ist das auch mit TEXTVERKETTEN (TextJoin) möglich, wenn man zusätzlich eine Splitt-UDF einsetzt, wie das auf einer von Shift-Del kürzlich auf OL verlinkten englisch­sprachigen WebSite vorgestellt wurde. Dabei kann sogar mit 3d-Bezügen gearbeitet wdn, was weder mit VJoin noch MxJoin möglich ist.
Gruß, Luc :-?
AW: dazu ... und nachgefragt ...
23.08.2017 09:45:26
...
Hallo Luc,
... Deine zweite Formel für Spalte C ergibt nun korrekte Ergebnisse. Doch der Konstruktionsaufwand für diese Formel lohnt sich mE nach nur bedingt. Stelle Dir z.B. vor, es gibt im Datenbereich einen MIN()-Wert der absolut betrachtet größer ist als (fast) alle anderen Werte, dann war/ist der Aufwand ganz umsonst.
Interessant ist Deine Feststellung, dass RANG() im 2. Argument diskontinuierliche Bereiche (zumindest solche Vektoren) ver­ar­bei­ten könne. Kannst Du dazu Beispiele einstellen
Gruß Werner
.. , - ...
diskontinuierliche Bereiche
23.08.2017 21:10:43
Josef
Hallo Werner
Z.B. so:
=RANG(A1;(A$1:A$12;B$5:B$6))
Gruss Sepp
AW: schon klar, aber ...
24.08.2017 09:21:50
...
Hallo Sepp,
... ich hatte offensichtlich in meinem Schreiben an Luc nicht eindeutig dargelegt, was ich mir bzgl. einer Rangermittlung diskontinuierlicher Bereiche nicht vorstellen kann.
Die Ermittlung des Ranges eines oder auch verschiedener Werte kann man bezogen auf diskontinuierliche Datenbereiche schon ermitteln aber mE dann eben nicht im Sinne einer "üblichen" Rangermittlung des gesamten Wertebereiches übersichtlich zugeordnet darstellen. Dafür sollte man mE die Datenwerte zuvor in einem Zeilen- oder Spaltenbereich zusammenzustellen.
Gruß Werner
.. , - ...
Das ist unbestritten, ...
24.08.2017 01:58:28
Luc:-?
…Werner,
und meine ursprüngliche Bemerkung nur für negative Werte müsste auch für alle positiven Werte gelten, die kleiner sind als der Betrag der kleinsten negativen Zahl. Folglich kann so eine HybridFml für große Daten­mengen eigentlich nur eine Aus­nahme sein, so wie auch diese ganze Auf­gabe. Hier wäre es sicher besser, nur posi­tive Werte zu ver­wenden, von denen diverse als negative for­ma­tiert sein könnten, falls dieses für andere Zwecke wichtig sein sollte. Das könnte mit einem VBA-Pgm erledigt wdn, wenn man auf Hilfs­spalten ver­zichten muss. Genauso könnten aus den Daten aber, durch Herum­Setzen einer ABS-Fml (per Pgm), auch nur posi­tive gemacht wdn.
Und hier nun das Gewünschte, mal mit regulär geschriebenen und mal mit per UDF erzeugten dis­kon­ti­nu­ier­lichen Berei­chen (wie Du ja sicher noch weißt, gibt auch NoErrRange ggf, wie auch INDEX das kann, Zell­Bezüge zurück). Falls dabei dis­kon­ti­nu­ier­liche Bereiche ent­stehen, was ja durch den Zweck dieser UDF quasi vor­bestimmt ist, las­sen die sich natür­lich nicht direkt auf ein Tab­Blatt abbil­den, so dass bei der­arti­gen Ver­su­chen nur #WERT! zurück­gegeben würde. Aber bspw Anzahl und Summe kön­nen von die­sem Bereich genauso gebil­det wdn wie eben der Rang ihrer Werte. Alle Werte kann man ansonsten nur noch mit Stan­dard-Sor­tier­Fktt wie KGRÖSSTE/KKLEINSTE wie­der­geben. Mit INDEX geht das ggf nur, wenn alle Teil­Bereiche gleich groß sind, wobei man dann idR auch noch die Matrix, die ent­stehen soll, entsprd den Quell­Zeilen, -Spalten und -Teil­Berei­chen in den Argu­menten 2…4 genau vorbilden muss, zB so:
J37:K42: {=INDEX((J45:K46;K47:L48;J49:K50);{1.1;2.2;1.1;2.2;1.1;2.2};{1.2;1.2;1.2;1.2;1.2;1.2};{1.1;1.1;2.2;2.2;3.3;3.3})}
Demggüber gibt die UDF DataSet die Daten in der natürlichen Xl-ZellReihenfolge Spalte-vor-Zeile, zu einem Vektor komprimiert, zurück.
 CDEFGH
30
Bsp1: Quelldatennormale Formelnplurale Matrixformeln61 5 56182← 1.Bereich3← 1.Bereich3829 9 9990 2 290922317192 59 67232.Bereich →632.Bereich →4659 10 8463 4 10810Zellformeln:mit UDF →104E31[:E35]:=RANG(C31;($C$31:$C$35;$D$35:$D$39))F35[:F39]:=RANG(D35;($C$31:$C$35;$D$35:$D$39))G31:G40: {=RANG(MTRANS(VSplit(VJoin($C$31:$C$35)&" "&VJoin($D$35:$D$39);;1));($C$31:$C$35;$D$35:$D$39))}H31:H40: {=MTRANS(VSplit(VJoin($C$31:$C$35)&" "&VJoin($D$35:$D$39);;1))}← Hilfsformel für QuelldatenansichtBsp2: Quelldatensingulare Matrixformelnplurale Matrixformeln2466727241047#NV426672xyz1#NV447124585172abc39#NV681211 9#NV545659#NV3639Anmerk: NoErrRange gibt hier einen diskontinuierlichen Bereich* zurück, 911Zellformeln:DataSet bildet den Gesamtvektor.359E45[:F51]: {=RANG(WENN(ISTZAHL(C45);C45);NoErrRange($C$45:$D$51;;ISTZAHL($C$45:$D$51)*($C$45:$D$51>10)))}G45[:H51]: {=RANG(MTRANS(DataSet(NoErrRange($C$45:$D$51;;ISTZAHL($C$45:$D$51)*($C$45:$D$51>10));"";2;;1));              NoErrRange($C$45:$D$51;;ISTZAHL($C$45:$D$51)*($C$45:$D$51>10)))}(Hilfsfml f.QD-Ansicht)H45[:I51]: {=MTRANS(DataSet(NoErrRange($C$45:$D$51;;ISTZAHL($C$45:$D$51)*($C$45:$D$51>10));"";2;;1))}* Diskontinuierlicher Bereich zu 6 Teilen:(C45:D45;D46;C47:C48;D48:D49;C50;D51)
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Im 1.Bsp habe ich nicht DataSet zur Bildung des VglsVektors benutzt, sondern ein VSplit-VJoin-Konstrukt, das iW dem entspricht, was auf der zuvor erwähnten WebSite so euphorisch für TEXTVERKETTEN (+Trivial-UDF) begrüßt wurde. DataSet erspart diesen Umweg, falls es nicht gleich über mehrere Blätter gehen soll (mit TEXT­VERKETTEN!)…
Morrn, Luc :-?
ANHANG - UDF-Links:
DataSet → https://www.herber.de/forum/archiv/1504to1508/t1507939.htm#1508954
NoErrRange → https://www.herber.de/forum/archiv/1508to1512/t1508209.htm#1508215
VJoin & VSplit → https://www.herber.de/bbs/user/99024.xlsm (BspDatei)

AW: dazu ...
24.08.2017 09:21:12
...
Hallo Luc,
... sorry, ich hatte offensichtlich nicht eindeutig dargelegt, was ich mir bzgl. einer Rangermittlung diskontinuierlicher Bereiche nicht vorstellen kann und Du Dir deswegen unnötig viel Zeit für Deine Ausführungen genommen hast.
Wie ich auch Sepp schreibe, die Ermittlung des Ranges eines oder auch verschiedener Werte kann man bezogen auf diskontinuierliche Datenbereiche schon ermitteln aber mE dann eben nicht im Sinne einer "üblichen" Rangermittlung des gesamten Wertebereiches übersichtlich zugeordnet für diese darstellen. Dafür sollte man mE die auszuwertenden Datenwerte zuvor in einem Zeilen- oder Spaltenbereich zusammenzustellen.
Gruß Werner
.. , - ...
Das musstest Du nicht doppelt schreiben, ...
24.08.2017 12:59:00
Luc:-?
…Werner,
zumal mir das durchaus klar war. Deshalb habe ich ja auch die Einzel- der GesamtVglsVariante ggüber­gestellt. Letztere hat nicht nur mit der Schwierigkeit der Zusammenfassung des Bereichs in Arg2 zu einem von Xl variierbaren Datenfeld für Arg1 zu kämpfen, sondern auch mit einer übersichtlichen Darstellung dieser Beziehung. Es sind aber weiterführende Berechnungen vorstellbar, die auf diese Darstellung verzichten können. Bei ersterer sollte es aber keine diesbzgl Probleme geben, sofern sich die Rang­Bildung auf ein Tab­Blatt beschränkt.
Es scheinen aber auch RangErmittlungen über gleich mehrere TabBlätter möglich zu sein. Dazu später evtl mehr, denn 1.Tests haben ein etwas verwirrendes Ergebnis gehabt. Außerdem habe ich auch noch etwas zu INDEX im Topf…
Luc :-?
AW: dann lass den Topf aber nicht überkochen ...
24.08.2017 15:20:00
...
Hallo Luc,
... bin schon gespannt was Du da offerieren willst. Ich hatte vor ca. 2 Wochen zu INDEX() auch mir bisher Unbekanntes/Neues gelesen. Ich hatte bisher jedoch noch nicht die Möglichkeit gesehen (oder übersehen) dies in einem Beitrag anzuwenden.
Gruß Werner
.. , - ...
Das hört sich aber auch interessant an, ...
26.08.2017 21:39:22
Luc:-?
…Werner,
weshalb ich vorhabe, demnächst dazu einen eigenen Thread zu eröffnen, in dem dann alle Interes­sen­ten Unbe­kanntes bzw Auf­fälliges (über das hinaus, was in Xl-Hilfe und bei PH auf xl-ol, dank Deines Ein­flusses, steht) mit­teilen können. Im Eröff­nungs­Beitrag werde ich mich auf die Rück­lieferung von Zell­Bezügen (falls über­hpt mög­lich) durch INDEX kon­zen­trieren.
Hatte leider in den letzten Tagen nur wenig Zeit, Umfangreicheres zu posten, hier aber noch eine Ergänzung zur letzten Tabelle. Die Fml in Spalte H könnte auch durch folgd plurale MxFmln ersetzt wdn:
{=INDEX(NoErrRange(C45:D51;;ISTZAHL(C45:D51)*(C45:D51>10));{1;1;1;1;2;1;2;1;1};{1;2;1;1;1;1;1;1;1};{1;1;2;3;3;4;4;5;6})}
{=DataSet(INDEX(WENNFEHLER(C45:D51*(C45:D51>10);0);(GANZZAHL((ZEILE(1:14)-1)/2)+1); REST(ZEILE(1:14)-1;2)+1)*1^ZEILE(1:14);0;-1) }

In der 1. bezieht sich INDEX starr auf das Ergebnis von NoErrRange, dessen diskontinuierlicher Bezug unten rechts ermit­telt wurde. Die Bezüge bleiben im Ergeb­nis erhal­ten. Das könnte dann auch ein passender Zusatz im oben ange­kün­dig­ten BT sein.
In der 2. wdn unerwünschte Werte und Texte durch 0 ersetzt und INDEX erzeugt aus der Matrix dieser Werte einen Vektor in der für Zell­Bereiche üblichen „Ein­fädel“-Reihen­folge Zeile—1.Spalte—2.Spalte. DataSet elimi­niert dann nur noch die 0-Werte, wobei das Ergeb­nis dann, ebenso wie das der Original­Fml (→ MTRANS und DataSet!), aller­dings keine Zell­Bezüge mehr auf­weist.
Bis dann! Gruß & schöSo, Luc :-?
PS: Ich hatte es heute lautKanonendonner auf einem 204 Jahre alten Schlacht­feld. Die Preußen haben damals (wie auch heute ab 15:00) die Sachsen & Franzosen geschlagen und so eine erneute Besetzung Berlins verhindert. ;-)
AW: oT zu Deinem PS ...
27.08.2017 10:13:47
...
Hallo Luc,
... auch dieser Kanonendonner kann mE nicht darüber hinwegtäuschen, dass Berlin schon längst wieder "besetzt" war und ist oder vielleicht korrekter geschrieben fremdbestimmt (aus Sicht von Preußen) war und ist.
Gruß Werner
.. , - ...
Da hast Du recht, Werner, ...
29.08.2017 03:37:55
Luc:-?
…das ist alles nur noch die Asche vergangener Zeiten, die selten wirklich glorreich waren…
Die schwarz-weißen und schwarz-weiß-goldenen Fahnen haben mich (ebenso wie die blau-weiß-roten Trikoloren) daran erinnert, dass die Demokratie immer aufs Neue erkämpft und verteidigt wdn muss und der Geist der preußischen Reformer von 1813 längst heimatlos geworden zu sein scheint (und das nicht erst nach 1945!). Unter dem Schwarz-Weiß- bzw -Rot-Gold von 1848/49 war er noch vorhanden, unter dem Schwarz-Weiß-Rot und dem nachfolgenden Schwarz-Rot-Gold (unterbrochen nur durch absolutes Grauen produzierenden totalen Wahnwitz) ging er bald verloren und ein kleinkariert-kleinstaaterisches brav-bürgerliches, kurz­sich­tiges Denken und Handeln* hat sich letztlich erneut aus der Mottenkiste der Geschichte erhoben.
* An vielem erkenntlich, zB auch dem Diesel-Abgas-, Eier-Skandal und Schlimmerem.
Die Republik war schon im antiken Rom gefährdet; wir wissen ja, wie das endete…
Das war quasi mein Wort zur BTW'17! ;-]
Gruß, Luc :-?
Diese Aussage ist in ihrer Absolutheit falsch, ...
20.08.2017 02:32:24
Luc:-?
…Walter!
Du benutzt Array-Fml ja synonym für MatrixFml, der offizielle MS-Begriff in der dt Xl-Hilfe dafür. Der engl Begriff Array bezeichnet idR aber ein sog Datenfeld, das höchstens Argument bzw Ergebnis einer Fkt, sowie Operand oder Ergebnis einer Fml sein kann. Ein solches hat im Gegensatz zu einem ZellBereich keinen ZellBezug (in diesem Sinne wird der Begriff auch in der Pgmmierung gebraucht!). Ein derartiges Feld aus konstanten Werten wird im dt Xl als MatrixKonstante bezeichnet. Das hat mit dem Begriff MatrixFml (bzw engl VBA FormulaArray) nur indirekt zu tun, nämlich insofern, dass man einen ZellBereich aus n>1 Zeilen und m>1 Spalten ebenfalls als Matrix bezeichnen kann (der engl Begriff kann auch Vektoren aus Zeile oder Spalte umfassen).
Der Begriff MatrixFml bezeichnet eigentlich nur eine Fml-EingabeMethode und - damit verbunden - -Auszeichnungsart, die Xl quasi mit­teilt, dass alle sich ergebenden DatenElemente verwendet u/o ausge­geben wdn sollen. Dabei kann man in Abhängigkeit von nötiger ZellAnzahl zur Auslösung dieses Verhaltens und der Anzahl der ErgebnisElemente 3 Typen unterscheiden, die ich in Analo­gie zu linguistisch-grammatischem Usus als singular, dual und plural (Ein-, Zwei-, Mehrzahl) bezeichne.
Es gibt nun tatsächlich Xl-Fktt, die nicht matrixfml-fähig sind, d.h., nur Einzelwerte verarbeiten können, zB UND und ODER. Das ist bei RANG aber nicht der Fall. Hier kann für das 2.Argument generell auch ein ZellBereich angegeben wdn. Tut man das auch für das 1.Argument, variiert der Xl-Fml-Interpreter das über den angegebenen Bezug (der dann auch ein Datenfeld sein darf wie es bspw ABS oder schon dem ZellBezug vorangestelltes -- erzeugt!) in Abhängigkeit von seiner Position im GesamtFeld unter Bezug auf die jeweilige ErgebnisZelle. Die Einschränkung besteht hier wie bei einigen anderen neueren Xl-Fktt nur in der Fixierung des 2.Argu­ments auf ZellBereiche, was allein einer (unnötigen, vgl UDF VRank!) Festlegung in ihrem Pgm geschuldet ist. Das hat also aller­höchstens nur indirekt mit der MatrixFml-Problematik zu tun!
Ich erwarte also künftig eine eines Profis würdige exaktere Ausdrucksweise, keine laienhafte…!
Morrn & schöSo, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige