Sequenz spillen
#1
Hallo zusammen,

ich habe in einem Urlaubskalender mehrere Zeiträume, die ich untereinander auflisten möchte. Wie bewerkstellige ich das mit einer Lambda-Funktion in 365?
Mustertabelle mit vorhanden Daten (A:C) und Wunschlösung (E):


.xlsx   Sequenz spillen.xlsx (Größe: 10,09 KB / Downloads: 24)
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#2
Hallo Edgar,

wenn es nicht dynamisch in den Vorgabespaltenbereich sein soll reicht das:
Code:
=LET(xA;SEQUENZ(2;;A1;1);xB;SEQUENZ(B2-B1+1;;B1;1);xC;SEQUENZ(C2-C1+1;;C1;1);VSTAPELN(xA;xB;xC))

Gruß Uwe
Antworten Top
#3
Hallo Uwe,

da es sich am Ende um mehr Spalten handelt, ist es mir schon wichtig, das Ganze mit einer LAMBDA zu lösen, da die Formel sonst ausufert.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
Hallo Edgar,


mit NAMEN im Namensmanager.  (s. Mappe)
Einfach Formel eingeben: = Datu...  , dann dem MS-Assistent bei der Eingabe der Parameter folgen.


Gruß Sigi


Angehängte Dateien
.xlsx   Datum3Bereiche.xlsx (Größe: 11,4 KB / Downloads: 5)
Antworten Top
#5
Hallöchen,

ein unausufernder Ansatz wäre vielleicht auch anders herum, also aus einer Liste der Tage eines Jahres die rausfiltern, die man (nicht) benötigt.
Die Liste ist ja noch einfach ...

SEQUENZ(365;1;"01.01.2026")

Aber wie bekomme ich die gefiltert? Das Prinzip wäre doch

=FILTER(SEQUENZ(365;1;"01.01.2026");SUMMENPRODUKT(SEQUENZ(365;1;"01.01.2026")>=($A$1:$C$1))*(SEQUENZ(365;1;"01.01.2026")<=($A$2:$C$2)))

Allerdings bringt das erst mal #Wert
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hallo,

ich habe dir in Zelle I1 die Funktion =Perioden(A1:C2) eingefügt.
Die Funktion ist als LAMBDA-Funktion im Namensmanager unter dem Namen Perioden enthalten.
PHP-Code:
Perioden = LAMBDA(m;  LET(
    r; REDUCE(
        0;
        SEQUENZ(1; SPALTEN(m));
        LAMBDA(Akk; i; LET(
            AnfI; INDEX(m; 1; i);
            EndI; INDEX(m; 2; i);
            idvb; SEQUENZ(EndI - AnfI + 1; 1; AnfI);
            VSTAPELN(Akk; idvb)
        ))
    );
    WEGLASSEN(r; 1)
));;


Angehängte Dateien
.xlsx   BoskoBiati_Sequenz spillen (2).xlsx (Größe: 13,97 KB / Downloads: 5)
Gruß Anton.

Windows 11 64bit
Microsoft365 Insider 64bit
Antworten Top
#7
Hallo Edgar,

ich habe etwas gebraucht um den Wert 0 in der 1. Ausgabezelle rauszubekommen.

Nun wäre die Lösung so:
Code:
=LET(
  xZ; 1:2;
  xZa; INDEX(xZ;1;);
  xLs; MAX(WENN(ISTZAHL(xZa);SPALTE(xZa);0));
  xSp; SEQUENZ(xLs;1;1);
  xInit; 0;
  xVst; REDUCE(
    xInit;
    xSp;
    LAMBDA(pS;pL;
      LET(
        Start; INDEX(xZ;1;pL);
        Ende; INDEX(xZ;2;pL);
        xBer; WENN(UND(ISTZAHL(Start); ISTZAHL(Ende); Ende >= Start);
          SEQUENZ(Ende - Start + 1; ; Start; 1);
          SEQUENZ(0;1)
        );
        VSTAPELN(pS; xBer)
      )
    )
  );
  FILTER(xVst; ISTZAHL(xVst)*(xVst<>0))
)
Das klappt natürlich dynamisch. 

Gruß Uwe

Ich habe jetzt eben nach weiteren Tests mal noch vorsorglich Sortieren mit eingebaut, wenn die Datumsbereiche willkürlich in den Spalten stehen sollten.

Also dann so:
Code:
=LET(
  xZ; 1:2;
  xZa; INDEX(xZ;1;);
  xLs; MAX(WENN(ISTZAHL(xZa);SPALTE(xZa);0));
  xSp; SEQUENZ(xLs;1;1);
  xInit; 0;
  xVst; REDUCE(
    xInit;
    xSp;
    LAMBDA(pS;pL;
      LET(
        Start; INDEX(xZ;1;pL);
        Ende; INDEX(xZ;2;pL);
        xBer; WENN(UND(ISTZAHL(Start); ISTZAHL(Ende); Ende >= Start);
          SEQUENZ(Ende - Start + 1; ; Start; 1);
          SEQUENZ(0;1)
        );
       SORTIEREN(VSTAPELN(pS; xBer);;1)
      )
    )
  );
  FILTER(xVst; ISTZAHL(xVst)*(xVst<>0))
)

Gruß Uwe
Antworten Top
#8
Hi

ist zwar ohne Lambda, sollte aber trotzdem beliebig viele Spalten beherrschen:

PHP-Code:
=LET(a;$A$1:$C$2;b;SEQUENZ(MAX(a)-MIN(a)+1;;MIN(a));FILTER(b;b<=WVERWEIS(b;a;2;1)))

hier wird im ersten Schritt (b) die gesamtsequenz über alle Datumswerte erstellt, dann werden im zweiten Schritt die nicht benötigen wieder entfernt.

Gruß Daniel
Antworten Top
#9
@Daniel,

schöne Lösung, Wink

Ansonsten, ohne LET, aber wieder nur per Formelerweiterung skalierbar, geht's auch:

=--TEXTTEILEN((TEXTVERKETTEN(";";;SEQUENZ(2;;A1;1);SEQUENZ(B2-B1+1;;B1;1);SEQUENZ(C2-C1+1;;C1;1)));;";")
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Ich möchte mich kurz anschließen.
@Daniel:
Top!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


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