Microsoft Excel

Herbers Excel/VBA-Archiv

Spezielle RANG-Ordnung


Betrifft: Spezielle RANG-Ordnung
von: Luc:-?
Geschrieben am: 27.09.2016 03:36:03

Werte Xl-Gemeinde, liebe UDF-Freunde & verehrte Formel-Cracks & -Freaks;

ich habe mich vor einigen Wochen mal mit dem beschäftigt, was MS ab Xl14/2010 aus der „guten“ alten RANG-Fkt gemacht hat, und mir überlegt, was hier wirklich benötigt würde. Das Ergebnis dieser Über­legungen ist im 1.Abschnitt der unten gezeigten Tabelle dar­ge­stellt. Hierbei habe ich einer­seits die Ergebnisse der beiden neuen Abkömm­linge dieser Fkt und anderer­seits das dar­ge­stellt, was ich an Neuem erwartet hätte. Daneben zeige ich, wie man mit anderen Xl-Standard-Fktt (und ggf UDFs) zu gleichen Ergeb­nissen bzw dem von mir erwar­teten Neuen kommen kann, dem ich im Stil der MS-„Dotterei“ treffende(re) Bezeich­nungen gegeben habe. Denn, was sollen uns die MS-Namen, denen die dt Über­setzung diesmal genau ent­spricht, eigent­lich sagen?
• Was ist an RANG.GLEICH (Rank.eq) eigentlich gleich? Es ist doch nur die alte RANG-Fkt, deren ggf „lücken­hafte“ Ergeb­nisse ja nur auf der Sortie­rung und der Aus­wahl des 1.Treffers beruhen, wie man unschwer anhand der Ersatz­Fml nach­voll­ziehen kann!
• Wieso soll RANG.MITTELW (Rank.avg) eigentlich ein Durch­schnitt sein, ist doch der Mittel­wert von zB 3× Rang2 auch nur 2, hier aber 3? Es ist tat­sächlich ein Durch­schnitt, aber der der Ränge 2…4! Die aus­ge­las­senen Ränge wdn also in die Ermitt­lung ein­be­zogen. Das kann zum kuriosen Ergebnis führen, dass 3 gleiche beste Werte nur den Rang2 bekommen → es gibt dann keinen Rang1!
• Wenn hier der mittlere von 3en heraus­kommt, warum sollte es dann nicht auch eine Rang­Variante geben, die den jeweils letzten Rang verwendet? Wie man das bei Bedarf erreichen kann, habe ich per Fml gezeigt.
• Aber viel gefragter sind doch lückenlose Ränge. Warum hat MS nicht auch eine RANG-Variante spendiert, die genau das tut? Sicher kann man das mit Fmln und auch noch uni­ver­seller als nur mit Zell­Bereichen errei­chen, wie ich es hier zeige und excelformeln.de ohnehin, aber warum nicht auch mit einer RANG-Variante?
• Und wenn es nun schon einen RANG.MITTELW gibt, warum nicht auch einen lückenlosen Rang, der alle gleich­rangigen Ergeb­nisse durch­nummeriert?
• Dazu kommt natürlich noch meine Standard­Frage an MS, warum nur für Zell­Bereiche, nicht auch für Daten­felder aus Aus­drücken (expres­sions) als Argument?

Wie ich mir eine solche Rang-Fkt vorstelle, zeige ich anhand dieser 5 Ergebnis­Kategorien in den unteren Tabellen­Blöcken, die diverse Ergeb­nisse meiner UDF VRank zeigen. Deren Entwick­lung ist zwar (vorläufig) abge­schlossen, könnte aber noch etwas ver­ändert bzw erweitert wdn, zB RANG.Zähle (Rank.count) von einfachem Durch­zählen auf generelle Anteil­Ermitt­lung als Dezimale, aber das kann man quasi auch über die %-Schiene erreichen (dazu später mehr).

Vorerst möchte ich an dieser Stelle meine (einlei­tenden) Ausführungen beenden. Es folgt die angekündigte Darstellung:

 ABCDEFGHIJK
1a: PunkteRANG.ERSTE ¹·> Vergleich·KgrössteRANG.MITTE ²·> Rang·ZählenwennRANG.LETZTE·> Rang·ZählenwennRANG.FOLGE(do. plural)RANG.ZÄHLE(do. plural)
225444,54,555444,1 
313778899666,1 
428333333333 
540222222222 
613778899666,2 
722666666555 
825444,54,555444,2 
941111111111 
1013778899666,3 
11B2[:B10]:=RANG.GLEICH(A2;A$2:A$10)D2[:D10]:=RANG.MITTELW(A2;A$2:A$10)F2[:F10]:=ZEILEN(A$2:A$10)+1-RANG(A2;A$2:A$10;1)
12C2[:C10]: {=VERGLEICH(A2;KGRÖSSTE(A$2:A$10;ZEILE(L$1:L$9));0)}E2[:E10]:=RANG(A2;A$2:A$10)+(ZÄHLENWENN(A$2:A$10;A2)-1)/2G2[:G10]:=RANG(A2;A$2:A$10)+ZÄHLENWENN(A$2:A$10;A2)-1
13H2[:H10]: {=VERGLEICH(RANG(A2;A$2:A$10);KKLEINSTE(VSplit(VJoin(RANG(A$2:A$10;A$2:A$10);;-1);;1);ZEILE(L$1:L$9));0)}¹ RANK.EQ
14I2:I10: {=VERGLEICH(RANG(A2:A10;A2:A10);KKLEINSTE(VSplit(VJoin(RANG(A2:A10;A2:A10);;-1);;1);ZEILE(L1:L9));0)} ² RANK.AVG
15J2[:J10]: {=VERGLEICH(RANG(A2;A$2:A$10);KKLEINSTE(VSplit(VJoin(RANG(A$2:A$10;A$2:A$10);;-1);;1);ZEILE(L$1:L$9));0)+WENN(ZÄHLENWENN(A$2:A$10;A2)>1;ZÄHLENWENN(A$2:A2;A2);)/10}
16a: PunkteRANG.Erste ·> VRank 0±0RANG.Mitte ·> VRank 0+1RANG.Letzte ·> VRank 0+2RANG.Folge ·> VRank 0-2RANG.Zähle ·> VRank 0-1
1725444,54,555444,14,1
1813778899666,16,1
1928333333333,13,1
2040222222222,12,1
2113778899666,26,2
2222666666555,15,1
2325444,54,555444,24,2
2441111111111,11,1
2513778899666,36,3
26b: PointsRANK.first ·> VRank 1±0RANK.midst ·> VRank 1+1RANK.last ·> VRank 1+2RANK.set ·> VRank 1-2RANK.count ·> VRank 1-1
2725555,55,566333,13 (1. 50%)
2813112233111,11 (1. 33%)
2928777777444,14 (1. 100%)
3040888888555,15 (1. 100%)
3113112233111,21 (2. 33%)
3222444444222,12 (1. 100%)
3325555,55,566333,23 (2. 50%)
3441999999666,16 (1. 100%)
3513112233111,31 (3. 33%)
36c: PunkteRANG.Erste ·> VRank 1±0RANG.Mitte ·> VRank 1+1RANG.Letzte ·> VRank 1+2RANG.Folge ·> VRank 1-2RANG.Zähle ·> VRank 1-1
3725555,55. (…6.: 2)66333,13,1
38131122. (3)33111,11,1
39287777. (1)77444,14,1
4040#NV#NV#NV#NV#NV#NV#NV#NV#NV#NV
41131122. (3)33111,21,2
42224444. (1)44222,12,1
4325555,55. (…6.: 2)66333,23,2
4441#NV#NV#NV#NV#NV#NV#NV#NV#NV#NV
45131122. (3)33111,31,3
46d: PointsRANK.first ·> VRank 0±0RANK.midst ·> VRank 0+1RANK.last ·> VRank 0+2RANK.set ·> VRank 0-2RANK.count ·> VRank 0-1
47(25)222. (-½›‹ 50%)2 (…3: 2)3322. (50%)2 (1 × 50%)2 [(1)2]
48(13)556. (33%)6 (3)7744. (33%)4 (1 × 33%)4 [(1)3]
49(28)111. (100%)1 (1)1111. (100%)1 (1 × 100%)1 [(1)1]
50(13)556. (33%)6 (3)7744. (33%)4 (2 × 33%)4 [(2)3]
51(22)444. (100%)4 (1)4433. (100%)3 (1 × 100%)3 [(1)1]
52(25)222. (-½›‹ 50%)2 (…3: 2)3322. (50%)2 (2 × 50%)2 [(2)2]
53(13)556. (33%)6 (3)7744. (33%)4 (3 × 33%)4 [(3)3]
54e: PunkteRANG.Erste ·> VRank 1±0RANG.Mitte ·> VRank 1+1RANG.Letzte ·> VRank 1+2RANG.Folge ·> VRank 1-2RANG.Zähle ·> VRank 1-1
55(25)2. (2)2. (PG 50%)2. (…3.: 2)2. (-½›‹ 50%)3. (2)3 [2]2. (2)2 [2 ges.]2 (1/50%)2 [1 v. 2]
56(13)5. (3)5. (PG 33%)6. (3)6. (33%)7. (3)7 [3]4. (3)4 [3 ges.]4 (1/33%)4 [1 v. 3]
57(28)1. (1)1. (PG 100%)1. (1)1. (100%)1. (1)1 [1]1. (1)1 [1 ges.]1 (1/100%)1 [1 v. 1]
58(13)5. (3)5. (PG 33%)6. (3)6. (33%)7. (3)7 [3]4. (3)4 [3 ges.]4 (2/33%)4 [2 v. 3]
59(22)4. (1)4. (PG 100%)4. (1)4. (100%)4. (1)4 [1]3. (1)3 [1 ges.]3 (1/100%)3 [1 v. 1]
60(25)2. (2)2. (PG 50%)2. (…3.: 2)2. (-½›‹ 50%)3. (2)3 [2]2. (2)2 [2 ges.]2 (2/50%)2 [2 v. 2]
61(13)5. (3)5. (PG 33%)6. (3)6. (33%)7. (3)7 [3]4. (3)4 [3 ges.]4 (3/33%)4 [3 v. 3]
62B17[:B25]:=VRank(A17;A$17:A$25)D17[:D25]:=VRank(A17;A$17:A$25;;1)F17[:F25]:=VRank(A17;A$17:A$25;;2)H17[:H25]:=VRank(A17;A$17:A$25;;-2)J17[:J25]:=INDEX(VRank(A$17:A$25;A$17:A$25;;-1);ZEILE(A1))
63C17:C25: {=VRank(;A17:A25)}E17:E25: {=VRank(;A17:A25;;1)}G17:G25: {=VRank(;A17:A25;;2)}I17:I25: {=VRank(;A17:A25;;-2)}K17:K25: {=VRank(;A17:A25;;-1)}
64B27[:B35]:=VRank(A27;A$27:A$35;1)D27[:D35]:=VRank(A27;A$27:A$35;1;1)F27[:F35]:=VRank(A27;A$27:A$35;1;2)H27[:H35]:=VRank(A27;A$27:A$35;1;-2)J27[:J35]:=INDEX(VRank(A$27:A$35;A$27:A$35;1;-1);ZEILE(A1))
65C27:C35: {=VRank(;A27:A35;1;"first")}E27:E35: {=VRank(;A27:A35;1;"midst")}G27:G35: {=VRank(;A27:A35;1;"last")}I27:I35: {=VRank(;A27:A35;1;"set")}K27:K35: {=VRank(;A27:A35;1;"count";" (#`. ´%)")}
66B37[:B45]: {=VRank(A37;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));1)}H37[:H45]: {=VRank(A37;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));1;-2)}
67C37:C45: {=VRank(A37:A45;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));1)}I37:I45: {=VRank(A37:A45;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));1;"Folge")}
68D37[:D45]: {=VRank(A37;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));1;1)}J37[:J45]: {=INDEX(VRank(A$37:A$45;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));1;-1);ZEILE(A1))}
69E37:E45: {=VRank(A37:A45;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));1;"Mitte";". (#)")}K37:K45: {=VRank(A37:A45;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));1;"Zähle")}
70F37[:F45]: {=VRank(A37;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));1;2)}
71G37:G45: {=VRank(A37:A45;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));1;"Letzte")}
72B47[:B53]: {=VRank(""&ZEILE(A1);NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30)))}H47[:H53]: {=VRank("Z"&ZEILE(A$47)&"S"&SPALTE();NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));;"Folge")}
73C47:C53: {=VRank(;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)))}I47:I53: {=VRank(;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));;"set";". (#%)")}
74D47[:D53]: {=VRank(""&ZEILE(A1);NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));;"Mitte";". (#%)")}J47[:J53]: {=INDEX(VRank(;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));;"count";" (#` × ´%)");ZEILE(A1))}
75E47:E53: {=VRank(;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));;"midst";" (#)")}K47:K53: {=VRank(;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));;"count";" [(#)]")}
76F47[:F53]: {=VRank("Z"&ZEILE(A$47)&"S"&SPALTE();NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));;"Letzte")}
77G47:G53: {=VRank(;NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));;"last")}
78B55[:B61]: {=VRank(""&ZEILE(A1);DataSet(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));MIN(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30)));;;1);;;". (#)")}
79C55:C61: {=VRank(;DataSet(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));MIN(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)));;;1);;;". (PG #%)")}
80D55[:D61]: {=VRank(""&ZEILE(A1);DataSet(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));MIN(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30)));;;1);;1;". (#)")}
81E55:E61: {=VRank(;DataSet(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));MIN(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)));;;1);;"Mitte";". (#%)")}
82F55[:F61]: {=VRank(""&ZEILE(A1);DataSet(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));MIN(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30)));;;1);;2;". (#)")}
83G55:G61: {=VRank(;DataSet(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));MIN(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)));;;1);;"last";" [#]")}
84H55[:H61]: {=VRank(""&ZEILE(A1);DataSet(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));MIN(NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30)));;;1);;-2;". (#)")}
85I55:I61: {=VRank(;DataSet(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));MIN(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)));;;1);;"Folge";" [# ges.]")}
86J55[:J61]: {=INDEX(VRank(;NoErrRange(A$37:A$45;;(A$37:A$45>10)*(A$37:A$45<30));;-1;" (#/%)");ZEILE(A1))}
87K55:K61: {=VRank(;DataSet(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));MIN(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30)));;;1);;"count";" [#` v. ´]")}

Diese Tabelle dient allein der Illustration meiner Aus­führungen und der Vor­stellung der UDF VRank, deren Ergebnis­Reali­sierung in den ver­schie­denen Kate­gorien allein über ihre Argumen­tierung erfolgt. Dabei können auch Zusatz­Texte ange­geben wdn, deren Wirkung eben­falls darge­stellt wurde (vgl die Fmln im unteren Teil).

Wird sukzessive fortgesetzt!

Mit Gruß, Luc :-?

PS: Meinungen und Anregungen hierzu können nach jedem (Folge-)Beitrag kund­getan wdn.

  

Betrifft: AW: ja für: RANG(), RANG_Letzte & RANG_Folge ...
von: ... neopa C
Geschrieben am: 27.09.2016 10:30:21

Hallo Luc,

... das sind/wären für mich Auswertungsfunktionalitäten die wirklich von Interesse sind bzw. sein könnten.

Bereits in den neuen MS-RANG()-Funktionen kann ich keinen wirklichen Nutzeffekt sehen. Wen interessiert denn wirklich die von MS bereitgestellte RANG-Mittelwert und wo und für was? Aber das ist halt nur meine Meinung. Vielleicht sehen das Andere anders!?

Bzgl. einer "lückenlosen" Rangfolge, teile ich Deine Aussage. Die von Dir als RANG_Folge bezeichnete Auswertung könnte durchaus von Interesse sein. Ich weiß nicht, ob es dazu schon Auswertungsformeln gibt. Auf jeden Fall bin ich überzeugt, dass dies auch alternativ ohne UDF möglich sein dürfte.
Vielleicht komme ich am Abend dazu, einen entsprechenden Formelvorschlag hier zu ergänzen.

Mal sehen was Andere zu Deinen Überlegungen meinen.

Gruß Werner
.. , - ...


  

Betrifft: AW: alternative Formellösung für RANG_Folge ...
von: ... neopa C
Geschrieben am: 27.09.2016 18:46:00

Hallo Luc,

... nur mit Funktionen die in Excel (ab Version 2010) standardmäßig angeboten werden und ganz ohne RANG...() könnte die Formel z.B. wie folgt aussehen:

=WENN(A2="";"";VERGLEICH(A2;INDEX(AGGREGAT(14;6;KGRÖSSTE(A$2:A$35;ZEILE(A$1:A$34)) /(KGRÖSSTE(A$2:A$35+0;ZEILE(A$2:A$34))0))))););)) 
Gruß Werner
.. , - ...


  

Betrifft: die Formel solltest Du eigenlich kennen
von: WF
Geschrieben am: 27.09.2016 19:41:49

Hi,

{=ANZAHL((A2&"")/HÄUFIGKEIT(WENN(A$2:A$99>=A2;A$2:A$99);A:A))}

aus:
http://www.excelformeln.de/formeln.html?welcher=230

Und in Deiner Formel ist ne Macke: es gibt Fehlermeldungen ?

WF


  

Betrifft: Genau, wusst' ich's doch, solche Formel habe ...
von: Luc:-?
Geschrieben am: 28.09.2016 00:36:29

…ich gesucht, Walter,
aber leider nicht (sofort) gefunden. ;-)
Gruß, Luc :-?


  

Betrifft: AW: nein, die kannte ich nicht ... und ...
von: ... neopa C
Geschrieben am: 28.09.2016 08:13:13

Hallo WF,

... die Suche danach ist auf Eurer Seite offensichtlich nicht ganz einfach, was sehr schade ist. Denn diese Formel ist wirklich eine Klasse Formel eben eine Sepp Burch Formel.

Das meine Lösungsformel nicht dieses Format hat ist da naheliegend, aber das sie so wie hier dargestellt nicht funktioniert, liegt offensichtlich an der Forumssoftware.

Deshalb stelle ich meine Lösungsfomel, die als einzige ohne {} auskommt ;-) hier diesmal mit der Jeanie ein, u.a. auch damit ich Hans Herber zeigen kann, dass sein Forumscode offensichtlich nicht immer einen korrekte Wiedergabe vornimmt:

 AE
1PunkteRang(Folge)
2254
3136
4283
5402
6136
7225
8254
9411
10136
11127
12  

Formeln der Tabelle
ZelleFormel
E2=WENN(A2="";"";VERGLEICH(A2;INDEX(AGGREGAT(14;6;KGRÖSSTE(A$2:A$35;ZEILE(A$1:A$34))/(KGRÖSSTE(A$2:A$35+0;ZEILE(A$2:A$34))<KGRÖSSTE(A$2:A$35+0;ZEILE(A$1:A$34))); ZEILE(A$1:INDEX(A:A;SUMME(N(HÄUFIGKEIT(A$2:A$35;A$2:A$35)>0))))); ); ))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Gruß Werner
.. , - ...


  

Betrifft: na ja: unsere Ursprungsformel von vor 15 Jahren
von: WF
Geschrieben am: 28.09.2016 08:55:13

{=ISTZAHL(A3)*SUMME(WENN(WENN(ISTZAHL(A$3:A$99)*(ZÄHLENWENN(INDIREKT("A1:A"&ZEILE($3:$99));A$3:A$99) =1);A$3:A$99;MIN(A$3:A$99)-1)>A3;1);1) }

... ist halb so lang wie Dein Aggregat-Konstrukt jetzt.

WF


  

Betrifft: AW: mein Ziel war ja auch ein anderes owT
von: ... neopa C
Geschrieben am: 28.09.2016 09:05:20

Gruß Werner
.. , - ...


  

Betrifft: Das mit der Suche kann ich bestätigen, ...
von: Luc:-?
Geschrieben am: 28.09.2016 13:03:17

…Werner,
die Rang-Fmln stehen nicht alle unter einem Stichwort.
Das mit der Forumssoftware zweifle ich aber an. Beim Setzen der Tags kann man leicht mal nicht alles, was von ihnen umschlossen wdn soll, ausgewählt haben. Dann kann einiges durch­einander­kommen. Die Methode mit den Ersatz-HTML-Kürzeln ist sicherer, zumal die von Dir (u.Anderen) hierfür benutzten Tags eigentlich für Code und allenfalls noch die Darstellung einfacher Strukturen bestimmt sind. HWH hat für die einfache Fml-Darstellung was anderes vorgesehen (˜f˜).
Gruß, Luc :-?


  

Betrifft: AW: dazu folgendes ...
von: ... neopa C
Geschrieben am: 28.09.2016 16:22:05

Hallo Luc,

... ich nutzte und nutze für Formeldarstellung ohne die Jeanie hier im Forum immer die Funktionalität,
die Hans Herber anbietet: [Code < pre >]

Wenn ich meine Formel einkopiere, sieht die auch korrekt aus:

=WENN(A2="";"";VERGLEICH(A2;INDEX(AGGREGAT(14;6;KGRÖSSTE(A$2:A$35;ZEILE(A$1:A$34)) /(KGRÖSSTE(A$2:A$35+0;ZEILE(A$2:A$34))0))))); ); )) 
aber bereits in der Vorschau wird sie offensichtlich falsch wiedergegeben, was ich aber bisher nicht mitbekommen habe, weil ich die Formel normalerweise nicht nochmal prüfe.
Meistens funktioniert dies ja auch. Warum das bei dieser Formel hier nicht der Fall ist, entzieht sich mir mangels einschlägigen Wissens.

Gruß Werner
.. , - ...


  

Betrifft: Noch vergessen, ...
von: Luc:-?
Geschrieben am: 28.09.2016 13:19:41

…Werner;
Deine Fml passt leider nicht ganz zur dargestellten OriginalTabelle. Es ist mir nicht gelungen, sie so anzupassen, dass auch Rang6 angezeigt wird. Stattdessen erhalte ich #NV. Im Original fktioniert sie hier gar nicht. Bei Sepps Fml war die Anpassung kein Problem.
Das mit der {}-Freiheit halte ich ohnehin nur für eine, mit Verlaub, fixe Idee von Dir. In anderer Calc-Software gibt's das auch, wird idR aber anders dargestellt. Bei zB LO/OOcalc könntest Du dann begründen, dass der Haken im Fml-Menü nicht gesetzt wdn muss, unter Linux-kompatiblen Pgmm dann uU analog Xl, nur wdn dabei wohl ohnehin keine {} um die Fml gesetzt, sondern ggf eine Array-Positionierung nachgesetzt, usw…
Und Linux soll ja lt IT-Presse die Zukunft sein…
Luc :-?


  

Betrifft: AW: kann ich so nicht nachvollziehen ... und ...
von: ... neopa C
Geschrieben am: 28.09.2016 16:30:31

Hallo Luc,

... ich hab die Daten und die Formel aus meinem Beitrag hier in eine neue Tabelle einkopiert und hatte damit keine Probleme. Die Formel muss natürlich in einer Zelle der Zeile 2 eingegeben werden.

Und nun zu Deiner Aussage:
"Das mit der {}-Freiheit halte ich ohnehin nur für eine, mit Verlaub, fixe Idee von Dir" muss ich darauf hinweisen, das wir darüber schon diskutiert hatten.

Meine Erfahrungen sind noch immer die, das diese im Vergleich öfters zwar etwas länger ausfallen aber dafür in Anwendungen performanter sind. Dies spürt man natürlich bei wenigen derartigen Formeln mit kleinen Auswertungsbereichen nicht wirklich. Aber es war und ist u.a. ein Grund, dass ich mich derartigen Formelkonstrukten bevorzugt zuwende.

Das ich diese meine Formel nicht mehr anwenden würde, nachdem ich Kenntnis von Sepps Formel habe, ist natürlich klar. Allerdings mein Ziel war und ist ja eh auch ein anderes. Im konkreten Fall ging es mir darum, den Nachweis zu erbringen, dass eine Formellösung möglich ist. Und allgemein hatte ich ja auch schon des öfteren geschrieben, dass mich beim Erstellen von Formel zu aller erst der "Weg" zum Ziel interessiert. Genauso wie ich beim Wandern meist erst dann auf eine Karte schaue, wenn ich mich verlaufen habe oder keine große Lust mehr zum Wandern habe.

Gruß Werner
.. , - ...


  

Betrifft: Zu MatrixFmln habe ich noch ein ganz besonderes …
von: Luc:-?
Geschrieben am: 02.10.2016 17:47:21

…Leckerli für Dich und alle Mitleser, Werner,
das u.a. Deine Meinung belegt, dass mancher mit diesen Fmln nicht viel anfangen kann, obwohl sie ja sogar in der Xl-Hilfe erklärt wdn. Aber Nachlesen ist wohl nicht jedermanns Sache…
Vor dem Hintergrund, dass MxFmln in LO/OO anders organisiert wdn, zeigt dieser Link auch, dass es ein Irrtum ist zu glauben, dass gleiche Namen und ein sehr ähn­liches Erschei­nungs­bild schon aus­reichen, daraus auch interne Über­ein­stim­mungen abzu­leiten. Mal ganz abge­sehen davon, dass es sich beim Frage­steller xmr offen­sicht­lich um einen Trend­setter der Diskus­sions­kultur par excellance handelt, sozu­sagen das It-Girl der „Kalku­la­tions­diskus­sions­kunst“. Mit solchen jung-dyna­misch-flexib­len Durch­reißern (im Ggsatz zu uns [ver-/ur-]alt[et]en „Assis“) mag auch MS inzwi­schen (über-)reich­lich „gesegnet“ sein… :-[
Gruß & schöSoAb, Luc :-?


  

Betrifft: Formel ohne { }
von: Josef B
Geschrieben am: 28.09.2016 22:00:10

Hallo Werner

Eine Formel für das Ranking sollte in der Regel auch mit Nullen und minus Zahlen funktionieren.

Da müsstest du deine Variante noch nachbessern.

Oder ich verrate dir bei Gelegenheit meine { } freie Variante, ohne die Funktion AGGREGAT ;-)

Gruss Sepp


  

Betrifft: AW: hatte mir sowies vorgenommen ...
von: ... neopa C
Geschrieben am: 29.09.2016 07:30:51

Guten Morgen Sepp,

... mich mit der Problematik am WE nochmal zu beschäftigen. Gut das Du mir den Hinweis gegeben hast auch 0 und Minuswerte zu berücksichtigen. Meine Formel war auch nur mehr ein "Augenblickskonstrukt" ohne große Testung.

Gruß Werner
.. , - ...


  

Betrifft: hier noch etwas zum Nachlesen....
von: Josef B
Geschrieben am: 29.09.2016 09:50:05

Hallo Werner

... auch mit Beiträgen von dir.
Die Formel musste schlussendlich auch Funktionieren, wenn Text im angegebenen Bereich vorgekommen ist.

http://www.online-excel.de/fom/fo_read.php?f=1&bzh=60767&h=60767

Gruss Sepp


  

Betrifft: 2011 war ja in der Vor-Aggregat-Zeit
von: WF
Geschrieben am: 29.09.2016 17:31:17

.


  

Betrifft: AW: muss ich leider verschieben ...
von: ... neopa C
Geschrieben am: 03.10.2016 20:00:29

Hallo Sepp,

... das lange Wochenende lief bei mir etwas anders ab, als meinerseits geplant. Aber aufgeschoben ist ja nicht aufgehoben. Ich melde dazu später nochmal.

Gruß Werner
.. , - ...


  

Betrifft: Die einzige Xl14/2010-Fkt ist ja in Deiner Fml ...
von: Luc:-?
Geschrieben am: 27.09.2016 20:43:39

…AGGREGAT, Werner,
aber leider fktioniert die Fml nicht, weil sie in der dargestellten Form einen Syntax-Fehler enthält, der bei Korrektur und Anpassung der Fml an die (dargestellte) Tabelle zu weiteren Fehlern bzw falschen Ergebnissen führt (und ich komme nicht so schnell dahinter).
Ich sehe dabei ohnehin gravierende Probleme und auch das, was ich von XlFmln.de angenommen hatte, scheint so nicht zu stimmen, denn dort wird etwas anderes gemacht. Aber viell gibt's da irgendwo doch noch einen anderen Beitrag (im hiesigen Archiv müsste aber so etwas enthalten sein, denn an derartige Aufgaben­Stellungen meine ich mich erinnern zu können). Ohne RANG (und UDFs) müsste aber ggf noch konstruiert wdn (viell hast Du's ja eigentlich doch schon!)… ;-)
Später setze ich dann meine oben begonnenen Erläuterungen unter dem EröffnungsBeitrag fort.
Gruß + Dank für Dein Interesse, Luc :-?


  

Betrifft: Dir ist bei den HTML-Tags was durcheinander ...
von: Luc:-?
Geschrieben am: 28.09.2016 00:59:00

…gekommen, Werner;
aus dem HTML-DOM habe ich dann das Folgende rekonstruiert und an die Tabelle angepasst, aber es fktioniert nicht richtig, weil da wohl noch mehr durcheinander gekommen ist:
=WENN(A2="";"";VERGLEICH(A2;INDEX(AGGREGAT(14;6;KGRÖSSTE(A$2:A$10;ZEILE(A$1:A$9)) /(KGRÖSSTE(A$2:A$10+0;ZEILE(A$2:A$10))<KGRÖSSTE(A$2:A$10+0;ZEILE(A$1:A$9))); ZEILE(A$1:INDEX(A$2:A$10;SUMME(N(HÄUFIGKEIT(A$2:A$10;A$2:A$10)="")))));)))
Mit einem Ersatz der ><-Zeichen durch die HTML-Codes &gt; bzw &lt; wärst du wohl besser gefahren als mit den <pre>-Tags.
Luc :-?


  

Betrifft: AW: ja, dazu siehe mein Beitrag an WF owT
von: ... neopa C
Geschrieben am: 28.09.2016 08:15:00

Gruß Werner
.. , - ...


  

Betrifft: Auf Letzteres wäre ich auch gespannt, ...
von: Luc:-?
Geschrieben am: 28.09.2016 02:00:42

…Werner,
vor allem, ob sich außer Dir überhaupt noch jemand zu Wort meldet (WF hat ja „nur“ auf etwas hingewiesen, was ich vermutet, aber erst dank ihm gefunden hatte).
Die Unterscheidung von RANG soll wohl nur Verwechslungen der alten mit der neuen Fkt vorbeugen, aber so erscheinen sie dem Nutzer als 3 Fktt statt 2 oder nur 1er. Ich halte das für (psychologisch und technisch) schlecht gelöst (eher marketing-wirksam) und ist wohl auch bei den anderen „neuen“ Dot-Fktt so. Aber wie gesagt, so würde ich das nicht lösen.
Einen Sinn kann ich in RANG.MITTELW nur erkennen, wenn nie mehr als 2 gleiche Ränge ermittelt würden. Ansonsten ist so etwas nur sinnvoll, wenn es um Wettkampf­Pktt und Sieg- bzw Platz­Prämien (Preis­Gelder) geht und man diese ggf teilen muss. Dann könnte man mit den von mir festgelegten Kategorien Erste, Mitte, Letzte die Ausgangsbasis des PG bestimmen, entweder nur durch diese Rang­Fest­Legung u/o durch Teilen. Deshalb habe ich hier auch noch RANG.LETZTE hinzugefügt. Bei RANG.FOLGE und .ZÄHLE würde das ähnlich geregelt wdn, wodurch eine Palette von 5 Möglich­keiten bestünde, die PG-Ausgangsbasis zu bestimmen. Für andere Rang­Ordnungen wären dann eher die beiden letzt­genannten Kategorien interessant, wollte man sich nicht mit dem normalen RANG begnügen.
Gruß, Luc :-?

Besser informiert mit …


  

Betrifft: Auf Grund der bisherigen Diskussion um ...
von: Luc:-?
Geschrieben am: 29.09.2016 03:26:23

…die Problem-DarstellungsTabelle, die ich vor einigen Wochen in anderer Form auch auf Ol-Xl.de gezeigt hatte, habe ich mich entschlossen, diese nocheinmal zu ändern/erweitern und sie in dieser Form schon vor Abschluss der VRank-Beschreibung zu zeigen. Letztere setze ich dann später fort.

 ABCDEFGHIJK
1PunkteRANG.ERSTE ¹·> Vergleich·KgrössteRANG.MITTE ²·> Rang·ZählenwennRANG.LETZTE·> Rang·ZählenwennRANG.FOLGE(do. plural)RANG.ZÄHLE(do. plural)
225444,54,555444,14,1
313778899666,16,1
4283333333333
5402222222222
613778899666,26,2
7226666665555
825444,54,555444,24,2
9411111111111
1013778899666,36,3
11B2[:B10]:=RANG.GLEICH(A2;A$2:A$10)C2[:C10]: {=VERGLEICH(A2;KGRÖSSTE(A$2:A$10;ZEILE(L$1:L$9));0)} ¹ RANK.EQ² RANK.AVG
12D2[:D10]:=RANG.MITTELW(A2;A$2:A$10)E2[:E10]:=RANG(A2;A$2:A$10)+(ZÄHLENWENN(A$2:A$10;A2)-1)/2J2[:J10]: {=ANZAHL((A2&"")/HÄUFIGKEIT(WENN(A$2:A$10≥A2;A$2:A$10);A$2:
13F2[:F10]:=ZEILEN(A$2:A$10)+1-RANG(A2;A$2:A$10;1)G2[:G10]:=RANG(A2;A$2:A$10)+ZÄHLENWENN(A$2:A$10;A2)-1                  A$10))+WENN(ZÄHLENWENN(A$2:A$10;A2)>1;ZÄHLENWENN(A$2:A2;A2);)/10}
14H2[:H10]: {=ANZAHL((A2&"")/HÄUFIGKEIT(WENN(A$2:A$10≥A2;A$2:A$10);A$2:A$10))} *Autor: J.BurchK2:K10: {=VERGLEICH(RANG(A2:A10;A2:A10);KKLEINSTE(VSplit(VJoin(RANG(A2:A10;A2:A10);;-1);;1);ZEILE
15I2:I10: {=VERGLEICH(RANG(A2:A10;A2:A10);KKLEINSTE(VSplit(VJoin(RANG(A2:A10;A2:A10);;-1);;1);ZEILE(A1:A9));0)}               (A1:A9));0)+WENN(ZÄHLENWENN(A2:A10;A2:A10)>1;ZÄHLENWENN(A2:INDEX(A2:A10;ZEILE()-1);A2:A10);)/10}
Hier habe ich nun Sepps Fml von xlfmln.de mit eingebunden und meine in den beiden Fällen auf die pluralen MatrixFmln beschränkt.
Luc :-?


  

Betrifft: Nachtrag zu RANG.MITTELW & Co ...
von: Luc:-?
Geschrieben am: 29.09.2016 23:50:05

Zitat Werner: Wen interessiert denn wirklich die von MS bereitgestellte RANG-Mittelwert und wo und für was?
MS formuliert generell dazu das Folgende (in der Xl-Hilfe zu Xl14/2010 unter Verbesserte FktsGenauigkeit), Werner:
Als Antwort auf das Feedback der schulischen, technischen und wissenschaftlichen Communitys umfasst Excel 2010 nun eine Reihe exakterer statistischer und anderer Funktionen. Einige vorhandene Funktionen wurden zudem umbenannt, um ihre Aufgabe besser zu beschreiben.
Unter der Rubrik Konsistenz mit den bewährten Methoden ist dann auch RANG.MITTELW zu finden, zu der es heißt …
Die folgenden Funktionen wurden hinzugefügt, da sie eine höhere Konsistenz zu den bewährten Methoden aufweisen als bestehende Funktionen. So entspricht die RANG.MITTELW-Funktion eher der von Statistikern erwarteten Funktionsweise als die bestehende RANG-Funktion.
Nun, ich habe diese Fktsweise nicht erwartet und eher meint wohl tatsächlich nur die Mittelwert-Bildung bei gleichen Rängen, was bei mehr als 2 gleichen Rängen kurios wird. Ich hätte eher eine lückenlose RangBildung ala RANG.FOLGE erwartet. Gleiche Ränge sind auch für Statistiker nichts Ungewöhnliches. Da war MS wohl etwas übereifrig.
Dafür vermisse ich in der Rubrik Fehlerfreie und konsistente Funktionsnamen (unter Xl14/2010) immer noch PRODUKTeSUMME als nun endlich fehlerfreien FktsNamen für das altbekannte SUMMENPRODUKT. Denn unter ersterer, richtiger Benennung ist es nicht nur dt Statistikern, sondern auch anderen (zB dt Mathematikern) bekannt und wird in (Hoch-)Schulen so vermittelt!
Die behauptete Verbesserung von Algorithmen kann man ja höchstens an den Ergebnissen erkennen, wobei es sich bei RANG.MITTELW natürlich nur schlicht um eine Algorithmus­Erweiterung handelt.
Was nun aber bspw am REST-Algorithmus verbessert wurde, kann nur marginal sein; eine der Wirkungsweise des vbOperators Mod entsprd Fkts­Variante fehlt in Xl14/2010 jedenfalls immer noch!
Luc :-?


  

Betrifft: AW: zu PRODUKTeSUMME anstelle SUMMENPRODUKT ...
von: ... neopa C
Geschrieben am: 30.09.2016 15:59:07

Hallo Luc,

... diesem Deinem Wunsch gebe ich einerseits völlig Recht, wirst aber damit keinen Erfolg haben. Denn dann müssten einerseits insgesamt zigtausende von Tabellen bei insgesamt ebenso zigtausende Nutzer nachträglich der Funktionsname verändert werden. Und dies müsste Excel gleich automatisch mit vornehmen, analog der Übersetzung von anderen Sprachversionen. Andererseits haben sich die zigtausende Nutzer sich mittlerweile derartig an den Begriff gewöhnt, dass es von deren Seite wieder Aufschrei zu erwarten wäre. Also wird MS dies einfach so lassen wie es ist.

Zu Denen weiteren Ausführungen. Nun die MS-Aussagen kennen wir nun. Ich für meinen Teil erkenne trotzdem keinen wirklichen praktischen Nutzwert der Funktion RANG.MITTELW(), von der Du mich ja auch nicht überzeugen wolltest.

Den weitere Nutzern hier im Forum ist es offensichtlich egal und /oder sie äußern sich halt nicht hierzu.

Gruß Werner
.. , - ...


  

Betrifft: Nee, nee, soweit wollte ich nicht und würde ...
von: Luc:-?
Geschrieben am: 30.09.2016 17:18:48

…auch MS natürlich nicht gehen, Werner,
sie sollen nur diesen Namen als Variante hinzufügen, wobei sie auch gleich den Algorithmus so ver­bessern könnten, dass er sich zumindest bei globalen Zell­Bereichs­Angaben nur auf den tatsächlich benutzten Bereich bezieht. Wenn sie das auch bei allen anderen alten Fktt machen würden, gäbe es das oft beklagte Performance-Problem nicht mehr.
Den meisten ForumsNutzern wird diese Diskussion zu spezifisch sein und auch nicht zu ihren Tages­Problemen gehören. Von den Cracks mit Zeit hätte man allerdings etwas mehr erwarten können. Aber das ist mir nicht gerade neu; die meisten wollen selber machen und ihre Zeit nicht für mehr oder weniger theore­tische Diskus­sions­Runden verwenden. Das ist diesem Xl-Hilfe-Forum ja auch nicht Hpt­Anliegen, obwohl HWH vor Jahren wohl auch an so etwas gedacht und u.a. dafür ein Extra-Forum hatte. Auch seine Idee mit den VBA-Atoms hat er ja vor Jahren aus Zeit­mangel wieder auf­geben müssen, obwohl das schon hoff­nungs­voll ange­laufen war. Des­halb war ich dann zeit­weilig auf das Projekt­Forum unter Ol-Xl.de für derartige Dar­stel­lungen ver­fallen, nur hat das PH dann eben­falls beendet.
Wdn Interessenten also zukünftig auf meine WebSite warten müssen, denn hier wird das wohl meine (erste und) letzte Aktion zumindest solchen Aus­maßes sein, weil das im „Tages­Geschäft“ ja allzu­schnell unter­geht. Außerdem ging mir inzwischen eine ca 13 Jahre alte Idee wieder durch den Kopf, die den Leuten helfen könnte, die generell Probleme mit Fml-Erstel­lung haben. Der Xl-Fml­Assi ist ja auch keiner, sondern eher ein Fkts­Assistent. Mal sehen…
Gruß, Luc :-?


  

Betrifft: AW: so ist es bzw. so wird es wohl sein owT
von: ... neopa C
Geschrieben am: 30.09.2016 17:27:20

Gruß Werner
.. , - ...


  

Betrifft: AW: warum es hier nicht so viel zu diskutieren..
von: Daniel
Geschrieben am: 30.09.2016 22:11:13

..gibt:
nunja, was bringt es?
Ich muss das Excel von MS so nehmen wie es ist und versuchen, damit meine Probleme und Aufgaben zu lösen. Natürlich kann man sich drüber unterhalten, was MS hätte besser machen können, aber helfen tut es nicht.

Wenn man selber ein bisschen programmieren kann, dann ist es auch kein großer Aufwand, sich die benötigten Funktionen selber zu bauen, vorallem wenn man auf das "universelle" verzichtet und die Form er Parameter festlegt:

Function RangLückenlos(VergleichsWert As Double, Wertebereich As Range, _
                Optional Rang1IstKleinster As Boolean = False)

Dim VZ As Long
Dim Werte
Dim Z As Long

VZ = 2 * Rang1IstKleinster + 1
Werte = Intersect(Wertebereich, Wertebereich.Worksheet.UsedRange).Value

RangLückenlos = 1
For Z = 1 To UBound(Werte, 1)
    If IsNumeric(Werte(Z, 1)) Then _
        If Application.Match(Werte(Z, 1), Werte, 0) = Z Then _
            RangLückenlos = RangLückenlos - (VZ * Werte(Z, 1) > VZ * VergleichsWert)
Next

End Function

also keine große Sache.

aufwendiger wird, wenn man das ganze "universeller" machen will, dh verschiedene Varianten bei den Eingabeparametern zulassen will und die Funktion Matrixtauglich haben will.

hier dann die gleiche Funktion etwas "universeller", dh man kann auswählen zwischen Rang mit und ohne Lücke, (4. Parameter), es ist möglich, nicht nur eine lückenlose Range als Wertebereich zu übergeben, sondern auch lückenhafte Ranges oder Arrays.
auch als Vergleichswert sind mehrere Werte möglich, die Rückgabe der Ergebniswerte erfolgt dann als eindimensionales Array.
Außerdem hat diese Rangfunktion gegenüber der originalen Rangfunktion den Zusatznutzen, dass sie auch für Werte, die nicht in der Werteliste vorhanden sind, einen "virtuellen" Rang ermitteln kann:
    Function RangXXX(VergleichsWert, Wertebereich, _
                Optional Rang1IstKleinster As Boolean = False, _
                Optional RangMitLücken As Boolean = True)

'--- Rang-Funktion für Rangbildung mit und ohne Berücksichtigung mehrfach vorkommender Werte

'--- Steuerparameter:
'    Rang1IstKleinster
'           Wahr: kleinster Wert hat Rang 1
'           Falsch: größter Wert hat Rang 1
'
'    RangMitLücken
'           Wahr: bei mehrfach vorkommenden Werten nächster Rang = +Anzahl
'           Falsch: bei mehrfach vorkommenden Werten nächster Rang = + 1

Dim Bearbeitet As Object
Dim VZ As Long
Dim Wert, VglW
Dim Zähler
ReDim Erg(0)
Set Bearbeitet = CreateObject("Scripting.dictionary")
VZ = 2 * Rang1IstKleinster + 1
If IsObject(VergleichsWert) Then Set VergleichsWert = Intersect(VergleichsWert, VergleichsWert. _
Worksheet.UsedRange)
If IsObject(Wertebereich) Then Set Wertebereich = Intersect(Wertebereich, Wertebereich. _
Worksheet.UsedRange)
If VarType(VergleichsWert) < vbArray Then VergleichsWert = Array(VergleichsWert)

For Each VglW In VergleichsWert
    Zähler = ""
    If IsNumeric(VglW) And Not IsEmpty(VglW) Then
        Zähler = 1
        For Each Wert In Wertebereich
            If IsNumeric(Wert) Then
                Zähler = Zähler + (VZ * Wert > VZ * VglW) * (Bearbeitet(CStr(Wert)) = "" Or  _
RangMitLücken)
                Bearbeitet(CStr(Wert)) = "x"
            End If
        Next
    End If
    If Zähler > 0 Then
        Erg(UBound(Erg)) = Zähler
    Else
        Erg(UBound(Erg)) = ""
    End If
    ReDim Preserve Erg(UBound(Erg) + 1)
Next
If UBound(Erg) > 0 Then
    ReDim Preserve Erg(UBound(Erg) - 1)
    RangXXX = Erg
End If
End Function

und hier sieht man im Vergleich mit der einfachen UDF, dass der Zusatzaufwand für die Universalität im vergleich zur Lösung der Kernaufgabe nicht unerheblich ist.

Gruß Daniel


  

Betrifft: Richtig, und mein Aufwand war sogar noch ...
von: Luc:-?
Geschrieben am: 01.10.2016 01:43:06

…größer, Daniel!
Deine Idee mit dem virtuellen Rang ist nicht schlecht. Dadurch würden in TeilTabelle c die #NV entfallen. Merke ich mir mal neben der bisher vermiedenen „Komplikation in Spalte J“ für die Version1.2 vor. Jetzt wird das nichts mehr auf Grund des Forum­Zeit­Fensters und anderer Aktivitäten.
Gruß, Luc :-?


  

Betrifft: 1.Forstsetzung: VRank
von: Luc:-?
Geschrieben am: 28.09.2016 03:56:51

Hallo, geneigte Leser;

nun geht es vorrangig um die UDF VRank, bei der das führende Namens-V Vector bedeutet. D.h., die UDF ist dazu bestimmt, als horizontaler (Zeile) bzw vertikaler (Spalte) Vektor vorliegende Daten zu „berangen“. Tuen sie das nicht, kann man sie aber auch mit einer geeigneten Fml um das jeweilige Fkts­Argument herum in diese Form bringen. Die UDF kann also im Ggsatz zu RANG auch Daten­felder verarbeiten.
In der 1.u.2.FolgeTabelle geht's aber erst mal um reine, zusammen­hängende Zell­Bereiche, die in Spalte A als vertikaler Vektor vorliegen. Dabei sind alle Teil­Tabellen so aufgebaut, dass (als Zugeständnis an die Fml­Nutzer/-Bauer, die eher/lieber Einzel­Ergeb­nisse benö­tigen/er­zeugen) zuerst Fmln (ggf als singulare Matrix­Fml) für skalare Ergebnisse, dann in der jeweils 2.Spalte plurale Matrix­Fmln für fest zusammen­hängende Ergebnis­Vektoren stehen.
Diese beiden FolgeTabellen unter­scheiden sich eigentlich nur durch das 3.Argument der UDF, das die gleiche Form und Bedeutung wie bei der Xl-Fkt RANG hat (es darf also auch fehlen). Bis hierhin stimmt die UDF mit der Xl-Fkt überein, denn die Ergebnis­Kategorie als Argument4 darf ebenso fehlen wie Argument5, das für Zusatz­Texte bestimmt ist, die uU auch eine Umformung des (dann) Text­Ergeb­nisses bewirken können.
Sind EinzelErgebnisse gewünscht, muss Argument1 (mit gleicher Bedeutung wie bei RANG) unbedingt ange­geben wdn; bei Ergebnis­Vektoren (mit plu­raler Matrix­Fml) darf es auch fehlen (nicht aber das ihm nach­folgende Auf­zählungs­Trenn­zeichen!). In diesem Fall wird jeder Wert aus Argument2 mit allen Werten von Argument2 vgln. Eine gewisse Sonder­Rolle nimmt bei den Einzel­Ergebnissen die Kategorie .ZÄHLE (.count) ein. Eine Durch­Numme­rierung gleicher Ränge ist nämlich nur möglich, wenn diese auch alle vorliegen. Deshalb müssen hier die Einzel­Ergeb­nisse extern mit INDEX isoliert wdn (im Pgm der UDF habe ich auf diese Kompli­kation verzichtet).
Im optionalen 4.Argument der UDF wird die gewünschte Ergebnis­Kategorie angegeben. Fehlt es oder ist es 0, ist das Ergebnis hier dem von RANG(.GLEICH) identisch. Mit dem posi­tiven Wert 1 ist es dem Ergebnis von RANG.MITTELW gleich. Bei 2 erhält man Ergeb­nisse nach Kategorie .LETZTE. Die Titel der Kate­gorien (auch die englischen!) können hier alter­nativ verwendet wdn, was auch für die nega­tiven Werte -1 und -2 gilt, bei denen das Minus darauf hinweist, dass die ermittelten Ränge lücken­los auf­ein­ander folgen, wobei gleichen Quell­Daten natürlich eben­falls gleiche Ränge zuge­ordnet wdn. Bei -1 wird der Rang in Analogie zu +1 (nur bei gerader Anzahl jeweils gleicher Ränge) stets (bei fehlendem Argument5!) mit Dezimale(n) dargestellt, die eine lfdNr gleicher Ränge (auf den jeweiligen Rang bezogen) darstellt(/en).
In Spalte K der 2.TeilTabelle wurde der UDF auch noch ein 5.Argument mitgegeben, das hier wie gezeigt eine Durch­Numme­rierung der gleichen Ränge mit Anteil am jeweiligen Rang in % ergibt. Aber dazu in der Fort­setzung, bei Beschreibung der anderen Teil­Tabellen, mehr.

Für heute soll es genug sein. Fortsetzung folgt!

Luc :-?


  

Betrifft: 2.Fortsetzung: VRank
von: Luc:-?
Geschrieben am: 30.09.2016 02:33:51

In TeilTabelle c (mit gleicher Rang- bzw Reihen­folge wie b) wird als Alter­native zu Teil­Tabelle d iW nur gezeigt, was passiert, wenn ein zusammen­hängender Zell­Bereich wie A37:A45 mit einem unzu­sammen­hängenden vgln wird. Letzteres wird hier durch die Anwendung der UDF NoErrRange* auf das 2.Argument erreicht. Durch deren Bedingung in ihrem 3.Argument entfallen die Quell­Werte ab 40 (als Zell­Objekt­Referenz!*), wodurch für diese kein Rang ermittelt wdn kann und folglich #NV zurück­gegeben wird. Dabei konnte auf eine eigene Behandlung unzu­sammen­hängender Bereiche in der UDF verzichtet wdn, indem intern die unlängst im Forum vorgestellte UDF DataSet verwendet wird, die daraus ein Vektor-Datenfeld erzeugt.
Da sich somit Argument1 von Argument2 auch in den EinsatzFällen pluraler MatrixFmln unterscheidet, muss es hier auch stets angegeben wdn.
Die Spalte E zeigt hier ebenfalls eine (andere) Variante, der durch einen Zusatz­Text in Argument5 bewirkten Ergebnis­Umfor­mung. Darauf gehe ich zum Schluss, bei näherer Betrach­tung dieses Arguments ein.
* Diese im Archiv enthaltene UDF kann deshalb übrigens auch in anderen XlFktt, die einen Zell­Bereich verlangen und auch unzu­sammen­hängende zulassen (zB RANG, TEILERGEBNIS, AGGREGAT, nicht aber INDIREKT und die ~WENNs-Fktt) verwendet wdn. Sie ver­langt hier auch bei Einzel­Wert-Rück­gabe die (dann singulare) Matrix­Fml­Form.

In TeilTabellen d und e (mit gleicher Rang- bzw Reihen­folge wie a) wird u.a. gezeigt, wie man in Argument1 auch aus Argument2 auswählen kann. Das ist iW ebenfalls ein Zugeständnis an die Liebhaber von Einzel­Wert- anstelle von fest mitein­ander verbun­denen Vektor­Ergeb­nissen, das besonders bei Daten­feldern in Argument2 (s. Teil­Tabelle e) sinnvoll ist. Dabei kann der Bezug auf Argument2 auf 2erlei Weise erfolgen:
Direkt durch Angabe einer TextZahl, die die Posi­tion im Argu­ment-2-Vektor angibt. Im Tabel­len­Bsp wird das durch Verbin­dung der ZeilenNr mit einem Leer­Text erreicht.
Indirekt durch Angabe eines voll­stän­digen Adress­Textes in Z1S1(- bzw R1C1)-Schreib­weise (absolut), wobei der signi­fi­kante Zähler stets auf die 1.Stand­ort­Zelle der Fml lt Argu­ment2 ausge­richtet sein sollte. Soll der 2.Wert des Argu­ment-2-Vek­tors gewählt wdn, muss also nicht die Zelle der Fml, sondern die davor ange­geben wdn, weil intern die Posi­tions­Zählung quasi mit dieser beginnt.
Bei pluralen MatrixFmln kann in diesem Fall Argument1 ebenfalls entfallen (bis auf das unbedingt erfor­der­liche Trenn­Zeichen!).
Die Klammerung der Werte in Spalte A der TeilTabellen d/e soll darauf hinweisen, dass sie von der UDF nicht als Quelle benutzt wdn. Sie bildet deren tat­säch­lich verwen­dete Daten nur mittels einer pluralen Matrix­Fml (nur TeilTab d) ab. Diese Fml lautet so:
{=INDEX(NoErrRange(A37:A45;;(A37:A45>10)*(A37:A45<30));{1;2;3;1;2;3;1};;{1;1;1;2;2;2;3})}
INDEX ist hierbei erforderlich, um den von NoErrRange gelie­ferten unzu­sammen­hängenden Bereich auch abbilden zu können.
Hinweis: Bitte beachten, dass TabSpalte J in allen 5 VRank-Teil­Tabellen INDEX zur Einzel­Wert-Rück­gabe benötigt, ansonsten aber in seiner Fml der pluralen Matrix­Fml in Spalte K entspricht, auch, wenn die Matrix­Fml­Form nicht erfor­derlich (a/b) oder singular (c/d/e) ist!

In TeilTabelle e geht es um Datenfelder als Argument. Dazu und zu Argument5 Näheres in der Fortsetzung.

Luc :-?


  

Betrifft: 3.Fortsetzung: VRank
von: Luc:-?
Geschrieben am: 01.10.2016 04:10:56

In TeilTabelle e wdn Datenfelder für Argument2 verwendet. Diese wdn hier bequemer- und vglbarer­weise, wie in c und d gehabt, durch Anwendung der UDF NoErrRange auf den Quell­Bereich (→unzusammen­hängender Bereich!) mit anschlie­ßender externer Bear­beitung durch DataSet* erzeugt (ein einfaches -- vor einer Bereichs­Angabe hätte auch gereicht, wenn alle Quell­Daten hätten ver­wendet wdn sollen).
* Im Prinzip über­flüssig, weil diese UDF auch intern ange­wendet wird. Hier soll damit aber die VRank-Reak­tion auf die Angabe eines Daten­feldes (das ja durch DataSet erzeugt wird) demon­striert wdn. Die Anwen­dung von INDEX würde hier das Ganze nur unnötig kom­pli­zieren.

Der SchwerPkt liegt bei dieser TeilTab aber sichtbar auf der Demon­stration verschie­dener Möglich­keiten, den Rang in allen 5 Kate­gorien je nach Anwen­dungs­Ziel mit Zusatz­Infor­mationen zu versehen, wodurch das Ergebnis zu einem Text* wird.
In Argument5 wird der nahezu vollständige Zusatz­Text ange­geben, wobei das Zeichen # eine fest­gelegte (Dummy-)Funktion hat. Es steht für eine zweite, in der jewei­ligen Kate­gorie ermittelte Zahl. Das wäre im Normal­fall die Anzahl ermit­tel­ter gleicher Ränge pro Rang­Zahl. Wird zusätz­lich noch das %-Zeichen ange­geben, also idR #%, wird statt der Anzahl der Anteil des jewei­ligen Rangs an den Rängen mit gleicher Rang­Zahl ins­gesamt ange­geben. Das könnte von Inter­esse sein, wenn bei Wett­kämpfen Preis­Gelder geteilt wdn müssten. Dabei sind bei unge­radem Argu­ment4 fol­gende Besonder­heiten, die zu einer Text­Umfor­mung führen, zu beachten:
.Mitte (+1): Ist die jeweilige Anzahl gleicher Ränge gerade, wird keine Dezimal­Zahl aus­ge­geben, son­dern zusätz­lich …
 →…vor der Anzahl (#) der nächste Rang mit voran­gestell­tem , wobei eine evtl Pktie­rung des Ranges auch für diesen über­nommen wird. Danach wird ein : gefolgt von einem Leer­zeichen gesetzt.
 →…bei #% der niedri­geren Rang­Zahl ein -½›‹ gefolgt von Leer­Zeichen (und Anteil) nach­ge­stellt. Damit wird darauf hin­ge­wiesen, dass uU der halbe Abstand zur nächsten Rang­Stufe beim Preis­Geld des erst­ange­gebe­nen Ranges abset­zend berück­sichtigt wdn müsste.
.Zähle (-1): Hier müssen gleich 2 zusätz­liche Zahlen­Angaben im Text unter­ge­bracht wdn → die sonst als Dezimale erschei­nende Durch­Numme­rierung der Fälle eines gleichen Ranges und deren Anzahl bzw Anteil. Dabei ersetzt erstere das # und letzteres wird dem bzw dem ersten Folge­Zeichen nach # nachgesetzt. Dadurch kann ein direkter Bezug der Durch­Numme­rierung zu Anzahl bzw Anteil her­ge­stellt wdn. Soll das nicht nur mit einem Zeichen, son­dern einem kurzen Text­Ein­schub erfol­gen, muss dieser in gesetzt wdn, wobei ` # unmit­tel­bar folgen muss.
* Wer den Rang auch in diesem Fall als Zahl benötigt, darf Argument5 nicht für das Ergeb­nis ver­wenden, sondern muss das mit benutzer­defi­nierter Forma­tierung zu errei­chen ver­suchen, was aber nicht so einfach ist und mitunter VBA-Unter­stützung erfor­derte, wollte man visuell Gleiches erhalten.

Damit ist die Beschreibung der Möglichkeiten von VRank und ihrer in den Teil­Tabellen a-e dar­ge­stell­ten Ergebnisse vorerst abge­schlossen. Es folgen in Fort­setzung dessen ggf noch spezielle Hin­weise und vor allem eine fktions­fähige Bsp­Datei mit den benö­tig­ten UDFs und Enumerationen. Dabei wird wahr­schein­lich die Basis­Tabelle fehlen, weil deren UDFs in aktueller Version noch nicht frei­ge­geben sind. Hier reichen aber die im Archiv zu fin­denden bis­herigen höchsten Versionen.

Luc :-?


  

Betrifft: 4.Fortsetzung: VRank - Abschluss
von: Luc:-?
Geschrieben am: 02.10.2016 02:52:06

Diesem letzten Beitrag zu VRank ist eine BspDatei beigefügt, die iW das bisher Gezeigte enthält und hier her­unter geladen wdn kann. Sie be­inhal­tet die 3 UDFs DataSet (Vs1.3), NoErrRange (Vs1.3) und natürlich VRank (Vs1.1), sowie die 4 von ihnen benötigten Enumerationen. Den UDFs sind Kurz­Beschrei­bungen (als Gedächt­nis­Stütze gedacht) voran­gestellt. Die gene­rellen Hin­weise am Modul­Anfang im VBA-Projekt-Teil, bitte ich zu beachten (ich möchte diese Pgmm nicht eines Tages in ver­stüm­melter Form, weil falsch gepostet, in irgend­einem Forum wieder­sehen, was schon vor­ge­kommen ist)!
Die einleitende VglsTeilTabelle ist noch vorhanden, ihre Spalten I und K enthalten aber nur Werte, keine Fmln, weil alle nicht unmit­tel­bar zu dieser Bsp­Mappe gehö­ren­den UDFs auch nicht in ihr ent­halten sein sollten. Dabei handelte es sich um einige mehr als nur die UDFs VJoin und VSplit. Wer diese in ihren letzten, im Archiv ent­hal­tenen Versionen 1.4 bzw 1.1 zV hat bzw dort findet, kann die plu­ralen Matrix­Fmln in den genannten Spalten anhand der Angaben im unter der Tabelle befind­lichen Fml­Teil gern wieder­her­stellen.
Die internen CodeNamen im VBA-Projekt der Mappe wurden geändert, um einen ein­deu­tigen Ver­weis auf sie aus anderen VBA-Pro­jek­ten heraus zu ermög­lichen. Der wäre nämlich erfor­der­lich, wenn eine dieser UDFs in anderen VBA-Pgmm ver­wen­det wdn soll ohne sie in deren Projekt zu über­nehmen. Die Datei könnte auch als AddIn genutzt wdn, wobei durch andere VBA-Projekte eben­falls ein Verweis auf dieses gesetzt wdn muss. Für reine Zell­Fml­Nutzung der UDFs ist nur dessen Akti­vierung erfor­derlich.
• Bei der Nutzung der UDF VRank in VBA-Pgmm ist zu beachten, dass ihr 1.Argument nicht optional ist! Das stört in Zell­Fmln auf Grund seines Daten­typs nicht, wohl aber in VBA-Pgmm. In diesen Fällen kann bzw muss dann ersatz­weise Null oder Empty ver­wen­det wdn.
• Zur separaten Nutzung der UDF DataSet in Sub­Prozeduren sei ange­merkt, dass in einigen Fällen stan­dard­mäßig 2spal­tige Matri­zen aus­ge­geben wdn, die eigent­lich vertikal orien­tierte Vek­toren sind, deren Elemente von hori­zontal orien­tierten Vek­toren mit jeweils 2 Ele­menten gebil­det wdn. Diese müs­sen vor dem Schrei­ben in eine Datei erst „norma­lisiert“, d.h. ggf 2× trans­poniert wdn (Work­sheet­Function.Trans­pose). Alter­nativ kann aber auch eine Aus­gabe­Form als Vektor gewählt wdn. In Zell­Fmln wird diese Nor­ma­li­sie­rung von Xl selbst besorgt.
• Die UDF NoErrRange ist normaler­weise nicht volatil. Sie wird es aber, wenn ihr 2.Argu­ment ange­geben wird, egal, welchen Wert es hat.

Allen, die diese UDFs nutzen wollen, können und auch dürfen, wünsche ich dabei viel Erfolg!
Luc :-?


  

Betrifft: Nachtrag zu 'virtuellem Rang' mit VRank
von: Luc:-?
Geschrieben am: 02.10.2016 16:50:00

Hi, Folks;
habe Daniels „virtuellen Rang“ nochmals (praxis­theore­tisch) überdacht. Ein solches Ergebnis einer Rang­Ermittlung wäre ja aus sta­tisti­scher Sicht nur dann erfor­der­lich, wenn ein externer hypothe­tischer, Basis- bzw Eich­wert oder ein ander­weitig berech­neter Wert (zB Mittel­wert einer Mess­reihe) mit der gesamten Daten­reihe vgln wdn soll/muss. Das wäre aber jetzt schon mit RANG{.~} (nur auf Zell­Bereichs­Basis) und auch mit VRank möglich. Dabei bestehen prin­zipiell 2 Möglichkeiten:
• Der externe Wert wird in die DatenGesamtheit ein­ge­ordnet:
    =RANG(S11;(A2:A10;S11)) bzw =VRank(S11;(A2:A10;S11))
• Der externe Wert wird nicht eingeordnet und nur zusätz­lich „virtuell“ ermit­telt; dann sollte er aber irgend­wie gekenn­zeich­net wdn (zB negativ), damit er sich ggf von den anderen Rängen abhebt:
    =WENNFEHLER(RANG(S11;A2:A10);-RANG(S11;(A2:A10;S11))) bzw
    =WENNFEHLER(VRank(S11;A2:A10);-VRank(S11;(A2:A10;S11)))
In folgender ergänzender BspTabelle wird das mit VRank für Rang.Folge demon­striert, wobei DataSet hier wieder extern benutzt wird, um ein Daten­feld zu erzeugen, was erforderlich wäre, falls Daten direkt aus einer Berech­nung als Argu­ment stam­men sollten wie bspw bei dieser Fml: =VRank("10";DataSet(A2:A10;RUNDEN(MITTELWERT(A2:A10););;;1))

 STUVW
1[sekund Werte]gen Einordngplur MxFml ·> sep b.NV <· norm Fmlgen Einord b.NV
2[25]4444
3[13]7667
4[28]3333
5[40]2222
6[13]7667
7[22]6556
8[25]4444
9[41]1111
10[13]7667
11245-5-55
12S11:=RUNDEN(MITTELWERT(A2:A10);)
13T2:T11: {=VRank(;DataSet(A2:A10;S11;2;;1);;-2)}
14U2:U11: {=WENNFEHLER(VRank(DataSet(A2:A10;S11;2;;1);A2:A10;;-2);-VRank(;DataSet(A2:A10;S11;2;;1);;-2))}
15V2[:V11]:=WENNFEHLER(VRank(S2;A$2:A$10;;-2);-VRank(S2;DataSet(A$2:A$10;S2;2;;1);;-2))
16W2:W11: {=WENNFEHLER(VRank(S11;A2:A10;;-2);VRank(;DataSet(A2:A10;S11;2;;1);;-2))}

Es wäre also nicht erforderlich, diese Möglichkeit generell fest in VRank zu imple­men­tieren und damit die Flexi­bili­tät der UDF ein­zu­schränken. Hier würde mir dann eher eine kleine Erwei­te­rung von DataSet im Hin­blick auf ihr 4.Argu­ment NurUnikate vor­schweben, wobei evtl auch gleich ihr 2. optional wdn könnte. Aber das hat mit der Rang-Pro­ble­matik höch­stens indirekt zu tun.
Übrigens, falls tatsächlich einmal ganze Matrizen „berangt“ wdn sollen (obwohl ich Vektoren für praxis­kon­former halte), kann DataSet auch benutzt wdn, um sie in Vek­toren zu wandeln.
Gruß, Luc :-?