Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

[Lambda] COMBIN.LIST: Liste der KOMBINATIONEN()
#1
COMBIN.LIST(Vektor;k-Zugriffe;Wiederholer)

Beschreibung:
Gibt die Liste der Excel-Funktion =KOMBINATIONEN(n;k) aus. Holt sich anstelle der Zuweisung der Zahl n entsprechend alphanum. Elemente aus einem Vektor, um sie darstellen zu können.

Argumente:
Vektor: Ein Bereich vom Umfang n in einer Zeile oder Spalte, der die zu kombinierenden Elemente enthält
k-Zugriffe: Auswahlanzahl der Kombination, also z.B. eine 2er oder eine 5er
Wiederholer: Falls 1, können Elemente wiederholt gezogen werden. Dann n^k Zeilen. Bei 0 (ohne Wiederholer) oder leer: n!/(n-k)!/(k!) oder gesprochen "n über k" Zeilen

Beispiele:

=COMBIN.LIST({1.2.3."q".5};3;)
Code:
1    2    3
1    2    q
1    2    5
1    3    q
1    3    5
1    5    q
2    3    q
2    3    5
2    5    q
3    5    q

=COMBIN.LIST({-2.-1.1.9.3.4.7};4;)
Code:
0    0    1    9
0    0    1    3
0    0    1    4
0    0    1    7
0    0    3    9
0    0    3    4
0    0    3    7
0    0    4    9
0    0    4    7
0    0    7    9
0    1    3    9
0    1    3    4
0    1    3    7
0    1    4    9
0    1    4    7
0    1    7    9
0    3    4    9
0    3    4    7
0    3    7    9
0    4    7    9
1    3    4    9
1    3    4    7
1    3    7    9
1    4    7    9
3    4    7    9
Besonderheit: Die -2 und die -1 im Vektor steuern die Liste so, dass sie nicht nur die
(5 über 4 = 05) 4er-Kombis ausgibt, sondern auch die beiden vorherigen (daher -2 und -1), nämlich
(5 über 3 = 10) 3er und die
(5 über 2 = 10) 2er aus der Menge von n=5 (nicht etwa: n=7!); somit also 25 Einträge. Die Nullen können über die benutzerdefinierte Formatierung ausgeblendet werden.

Code:
=LAMBDA(Arr;k;Repeat;LET(
n;ANZAHL2(Arr);
y;SEQUENZ(n^k);
u;INDEX(Arr;REST((y-1)/n^(k-SEQUENZ(;k));n)+1);
q;WENN(ISTZAHL(u);WENNFEHLER(EXP(LN(u)););u);
EINDEUTIG(WENN(Repeat;q;FILTER(q;
WENNFEHLER(INDEX(u;y;1)<INDEX(u;y;2);1)*
WENNFEHLER(INDEX(u;y;2)<INDEX(u;y;3);1)*
WENNFEHLER(INDEX(u;y;3)<INDEX(u;y;4);1)*
WENNFEHLER(INDEX(u;y;4)<INDEX(u;y;5);1)*
WENNFEHLER(INDEX(u;y;5)<INDEX(u;y;6);1)*
WENNFEHLER(INDEX(u;y;6)<INDEX(u;y;7);1)*
WENNFEHLER(INDEX(u;y;7)<INDEX(u;y;8);1)*
WENNFEHLER(INDEX(u;y;8)<INDEX(u;y;9);1))))))


Anmerkungen:
Wie schon bei SORTBY.KEYRANGE und UNIQUE.PARTIAL werden maximal 9 Keys (hier sind es 9er-Kombinationen) zugelassen. Excel lässt im Arbeitsblatt nur 2 Dimensionen zu, so dass die obigen 8 Vergleiche zwischen den 9 Spalten nicht zusammengefasst werden können. Wer noch mehr als 9 benötigt, kann natürlich entsprechend verlängern.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#2
Korrektur wegen Mengenbetrachtung im Excel-Arbeitsblatt:

Code:
=LAMBDA(Arr;k;Repeat;LET(
n;ANZAHL2(Arr);
y;SEQUENZ(n^k);
u;INDEX(Arr;REST((y-1)/n^(k-SEQUENZ(;k));n)+1);
q;WENN(ISTZAHL(u);WENNFEHLER(EXP(LN(u)););u);
EINDEUTIG(WENN(Repeat;q;FILTER(q;
WENNFEHLER(INDEX(u;y;1)<INDEX(u;y;2);1)*
WENNFEHLER(INDEX(u;y;2)<INDEX(u;y;3);1)*
WENNFEHLER(INDEX(u;y;3)<INDEX(u;y;4);1)*
WENNFEHLER(INDEX(u;y;4)<INDEX(u;y;5);1)*
WENNFEHLER(INDEX(u;y;5)<INDEX(u;y;6);1))))))


Anmerkungen:
Wie schon bei SORTBY.KEYRANGE und UNIQUE.PARTIAL (dort 9) werden maximal 6 Keys (hier sind es 6er-Kombinationen) zugelassen. Excel lässt im Arbeitsblatt nur 2 Dimensionen zu, so dass die obigen 5 Vergleiche zwischen den 6 Spalten nicht in einer Formel zusammengefasst werden können. Wer mehr als k=6 benötigt, muss VBA verwenden: k=6 ist die höchste Anzahl von Spalten, wenn aus bis zu 10 Einträgen (n) kombiniert können werden muss, denn Excel hat nur etwa 10^6 Zeilen. 7^7 geht zwar auch noch, aber das ist ziemlich sinnlos.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#3
Moin,

sehr schön. So nebenbei, stellst Du auch Abstürze von Excel fest, wenn LAMBDA-Funktionen verwendet werden?

Ich habe das öfter mal beim Kopieren von Blättern, wo LAMBDAs drin sind oder auch einfach mal so, mit dem
Hinweis "nimm die 64 Bit Version, nicht genug RAM" oder "Formel übersteigt 8xxxx Zeichen", was definitiv
nicht Fall ist.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#4
Hallo!

Ja, da war irgendwas. Ich glaube, beim Umkopieren von Lambda-Code in einen neuen Namen - oder beim Umkopieren von Lambda-Code von der einen in eine andere Datei. Ist aber länger her ... habs mir nicht so gemerkt, da zum Glück das neuere Excel den (halbwegs) letzten Stand der Datei bewahrt.

Komischerweise ist von meinem neueren PC das LAMBDA verschwunden (auf den vorigen Stand). Auch die Version (Beta- oder nicht) hat sich irgendwie einfach verändert. Aber zum Glück habe ich noch einen PC.

Seltsam: Es betrift den PC, mit dem ich bei Bill Jelen zwei Vorschläge gemacht habe. Die Seite MrExcel ist aber so schrecklich spießig, dass ich dort gemeckert habe, sie sollten doch froh sein, Content zu bekommen, statt die Leute in ein Schema zu pressen, mit welcher Schriftart und Doku man zu antworten habe. Seitdem bin ich dort "verbannt" (und meine beiden Vorschläge entfernt). Und den PC erkennen sie anhand eines Cookies. Hoffentlich hat die Seite MrExcel (als durchaus von Microsoft respektiert!) nicht irgendwelche Beeinflussungsmöglichkeiten.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#5
Hallo,

ach so, deswegen waren Deine Beiträge bei MrExcel weg. Hatte mich schon gewundert. Das mal neue Features "verschwinden" kann vorkommen. 
Ist mir z.B. mit BÖRSENHISTORIE passiert. MrExcel hat definitiv keinerlei Einflussmöglichkeiten auf sowas. Das kann ich Dir versichern.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Top
#6
Hier geht es weiter mit einem anderen COMBIN_LIST-Ansatz.
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste