HERBERS Excel-Forum - das Archiv

Thema: NACHZEILE vs. MAP (Primzahlen)

NACHZEILE vs. MAP (Primzahlen)
{Boris}
Hallo zusammen,

diese Formel listet Primzahlen auf - in diesem Fall von 7 bis 71:

=LET(x;SEQUENZ(65;;7);y;MAP(x;LAMBDA(a;UND(REST(a;SEQUENZ(a-2;;2)))));FILTER(x;y))

Jetzt dachte ich, dass das mit NACHZEILE genau so funktioniert - aber mit NACHZEILE statt MAP werden alle ungeraden Zahlen ab 7 aufgelistet (also 7,9,11,13,15 usw.) und nicht bloß die Primzahlen:

=LET(x;SEQUENZ(65;;7);y;NACHZEILE(x;LAMBDA(a;UND(REST(a;SEQUENZ(a-2;;2)))));FILTER(x;y))

Lagert man SEQUENZ(65;;7) jedoch in eine Zelle (im Beispiel A2) aus, dann funktioniert es auch mit NACHZEILE:

=LET(x;A2#;y;NACHZEILE(x;LAMBDA(a;UND(REST(a;SEQUENZ(a-2;;2)))));FILTER(x;y))

Wieso verlangt NACHZEILE hier einen Bezug (A2#), um "zu funktionieren"? Bislang dachte ich, dass auch ein Array möglich ist.

Beispielmappe: https://www.herber.de/bbs/user/174703.xlsx

Vielleicht hab ich grad aber auch nur nen Knoten im Hirn...? ;-)

VG, Boris
AW: NACHZEILE vs. MAP (Primzahlen)
Onur
Vielleicht hilft das ja :
https://www.herber.de/bbs/user/174708.xlsx
AW: NACHZEILE vs. MAP (Primzahlen)
{Boris}
Hi Onur,

danke erst mal - aber das war nicht die Frage.
Es geht mir einzig und allein darum zu verstehen, weshalb die Formel mit NACHZEILE offensichtlich einen Bereich (A2#) braucht und mit der bereichserzeugenden Formel =SEQUENZ(65;;7) als Array nicht klarkommt. Mit MAP funktioniert das ja einwandfrei.

Hast Du dafür ne Erklärung?

VG, Boris
AW: NACHZEILE vs. MAP (Primzahlen)
Onur
Hi Boris,

Du müsstest ja eigentlich wissen, dass einige der (neuen) Funktionen ECHTE Bereiche brauchen und mit Arrays nicht klar kommen, da sie ja nicht wirklich ZEILEN (bzw Spalten) haben.. :)
Es würde ja auch mit Zeile(Array) nicht klappen.

Gruß
Onur
Na klar weiß ich das...
{Boris}
Hi Onur,

...aber zu NACHZEILE gibt es überhaupt keinen Hinweis, dass die Funktion einen Bereich benötigt.

Das hier

=LET(x;SEQUENZ(10);NACHZEILE(x;LAMBDA(x;x>5)))

funktioniert z.B. einwandfrei. Warum geht das Primzahlbeispiel nicht?

VG, Boris
AW: Na klar weiß ich das...
Onur
Jetzt habe ich verstande, was du meinst...
Das Problem ist:
SEQUENZ()
Wenn du eine Sequenz von 1 bis 10 und eine mit 1 bis 5 hast, musst du Sequenz(50) nehmen und diese in X und Y splitten, da es, im Gegensatz zu FOR-NEXT-Schleifen nicht 2 sondern nur eine Schleife wird.
Die beiden laufen NICHT UNABHÄNGIG voneinander.
Guckst du hier:

https://www.herber.de/bbs/user/174711.xlsx
Wir kommen der Sache offensichtlich näher...
{Boris}
Hi Onur,

vielen Dank!

Weshalb funktioniert denn aber

=LET(x;A2#;y;NACHZEILE(x;LAMBDA(a;UND(REST(a;SEQUENZ(a-2;;2)))));FILTER(x;y))

wenn in A2 steht:
=SEQUENZ(65;;7)

?

Vielleicht hab ich es ja noch nicht ganz kapiert ;-)

VG, Boris
AW: Wir kommen der Sache offensichtlich näher...
Onur
Spielt keine Rolle, solange nicht mehrere Sequenz() in der selben Formel stehen.
Du brauchst übrigens nicht bis a-2 prüfen - Wurzel(a) reicht und ist vieeeeel kürzer (in der Arraygröße).
AW: Wir kommen der Sache offensichtlich näher...
Onur
Deswegen schrieb ich dir ja damals, dass es endlich Zeit wurde, dass MAP kommt, da dieser Funktion offensichtlich solche Probleme egal sind.
Dass es mit MAP funktioniert....
{Boris}
...hatte ich ja bereits festgestellt.
Das NACHZEILE-Verhalten bleibt für mich somit irritierend.

VG, Boris
AW: Dass es mit MAP funktioniert....
Onur
Es liegt wohl eher an UND, glaube ich...
Und voneinander abhängige Sequenz() mag Excel auch nicht.
Wenn man sie nicht abhängig macht und einmal Zeile und einmal Spalte nimmt, klappt es:
https://www.herber.de/bbs/user/174713.xlsx
MAP zwingt die Formel dazu, alles zeilenweise zu berechnen, während UND ohne MAP nur den ersten Wert nimmt.
Du hast ja die selben Probleme mit Summe, Produkt und UND. Dann wird z.B. die Summe NICHT ZEILENWEISE berechnet, sondern vom ganzen Array. NUR mit MAP geht es. Versuch mal, von einem 2-dimensionalen Array zeilenweise die Summen zu berechnen.
AW: Dass es mit MAP funktioniert....
{Boris}
Hi Onur,

Versuch mal, von einem 2-dimensionalen Array zeilenweise die Summen zu berechnen.

Genau dafür gibt es ja u.a. NACHZEILE:

=LET(x;SEQUENZ(5;4;1);NACHZEILE(x;SUMME))

Oder in der "Alt-Version":

=LET(x;SEQUENZ(5;4;1);NACHZEILE(x;LAMBDA(a;SUMME(a))))

Dass auch UND ein Ergebnis kumuliert (und kein Ergebnisarray zurückgeben kann), ist mir klar - aber auch hierfür gibt es ja NACHZEILE, um eben ein kumuliertes Ergebnis je Zeile zu erhalten.

VG, Boris

AW: Dass es mit MAP funktioniert....
{Boris}
Hi Onur,

nicht wundern - ich stell die Frage auch nochmal im CEF. Da tummeln sich noch ein paar mehr Formelfreaks. Lässt mir grad keine Ruhe ;-)

VG, Boris
AW: Dass es mit MAP funktioniert....
Onur
Mach mal ein @ vor a:
=LET(x;SEQUENZ(65;;7);y;NACHZEILE(x;LAMBDA(a;UND(REST(a;SEQUENZ(@a-2;;2)))));FILTER(x;y))
AW: Dass es mit MAP funktioniert....
Onur
NACHZEILE übergibt, im Gegenstatz zu MAP, das ganze Array auf einmal an das Lambda.
Das @ zwingt NACHZEILE dazu, nur einzelne Werte zu übergeben.
Jetzt könnte ein Schuh draus werden...
{Boris}
Hi Onur,

...das klingt für mich im Prinzip nachvollziehbar, wenngleich ich das so aus dem Hilfetext nicht herauslesen kann.
Und es erklärt auch nicht, weshalb dieser Dummy auch ohne @ funktioniert:

=LET(x;SEQUENZ(5;4);NACHZEILE(x;LAMBDA(a;SUMME(a))))

Und ganz im Gegenteil kann ich hier nicht @a schreiben - dann gibt`s Mecker und das @ wird automatisch der Formel vorangestellt.

Aber das scheint der richtige Weg zu sein!

VG, Boris
AW: Jetzt könnte ein Schuh draus werden...
Onur
Das Problem ist, dass deine Formel aus 2 Arrays (Sequenz) besteht, das Dummy aber nicht.
AW: Jetzt könnte ein Schuh draus werden...
{Boris}
Ja, das kann gut sein. Dennoch sollte es mMn eben nicht so sein ;-)
Aber Du bist hier sicherlich bereits auf dem richtigen Dampfer!

VG, Boris
AW: Jetzt könnte ein Schuh draus werden...
Onur
Das behandelt in der Tat....
{Boris}
....das selbe Thema.
Scheint also wirklich in diese Richtung zu gehen.

Danke, dass Du am Ball geblieben bist!

VG, Boris
AW: Das behandelt in der Tat....
Onur
Kein Ding.
Du weisst doch genau, dass ich mich in sowas gerne festbeisse... 😊

Gruß
Onur