dynamiczny zakres

tworzymy dynamiczny zakres dla listy:
=OFFSET(S14;0;0;COUNTA($S$14:$S$50);1)

dodajemy listę (nazwę) do Data Validation

YT - new cool functions
function link
DO NOT USE PIECHARTS [link](https://www.youtube.com/watch?v=4S8ljn8Pawkhttps://www.youtube.com/watch?v=4S8ljn8Pawk
REGEX https://www.youtube.com/watch?v=YFnXV2be9eg
LAMBDA https://www.youtube.com/watch?v=Rm4y5UqauRw
TAKE https://www.youtube.com/watch?v=z66-6WVZSFY
more functions https://www.youtube.com/watch?v=VWcLM6_Q_00
PYTHON https://www.youtube.com/watch?v=FbBXtqtRnWU
NEW Checkboxes https://www.youtube.com/watch?v=DNl9DzNwjv8
important Settings https://www.youtube.com/watch?v=jLHqGRpGOPk
GROUPBY & PIVOTBY https://www.youtube.com/watch?v=mCJzhCxEQlM
"dot" trick https://www.youtube.com/watch?v=5h4wRTbmsSw
XLOOKUP "x-ref" https://www.youtube.com/watch?v=y0L-QzTkwcA
new functions to investigate

=MAP
SCAN() usecase: DFC
=SCAN
=REDUCE
=LAMBDA
=TOCOL
=TOROW
=TEXTSPLIT
=TEXTBEFORE
=TEXTAFTER
=VSTACK
=HSTACK
=WRAPROWS
=TAKE
=DROP
=CHOOSECOLS
=CHOOSEROWS
=EXPAND

IBPi attribute for multiple rows

=IF(SUMIFS(C:C;A:A;A2;B:B;"kf4")=0;TRUE;FALSE)
C:C = values to check
B:B - keyfigure to match for value check
A:A - fp_code
A2 - top level col A reference

extract FULL URL from hyperlink
Function GetFullURL(rg As Range) As String
    On Error Resume Next
    If rg.Hyperlinks.Count > 0 Then
        If rg.Hyperlinks(1).SubAddress <> "" Then
            GetFullURL = rg.Hyperlinks(1).Address & "#" & rg.Hyperlinks(1).SubAddress
        Else
            GetFullURL = rg.Hyperlinks(1).Address
        End If
    Else
        GetFullURL = ""
    End If
End Function

Sub extractURLs()
With ActiveSheet
  For r = 2 To 20
    .Cells(r, 7).Value = GetFullURL(.Cells(r, 3))
  Next r
End With
End Sub
IBPi date to date (yyyymmmdd)

=DATEVALUE(LEFT(A1;4) & " " & MID(A1;5;3) & " " & MID(A1;8;LEN(A1)-7))

date from YYYYMMMDD (dynamic row below)
=LET(
period;OFFSET(INDIRECT(ADDRESS(ROW();COLUMN()));1;0);
DATE(
  LEFT(period;4);
  MONTH(1&MID(period;5;3));
  MID(period;8;2)
 ))
DFC

data range: K:BV
target cell: K14

=LET(
   ss;   K13;
   ofs;  K10-K9;
   cum;  K10:$BJ$10 - ofs;
   wf;   K9:$BJ$9;
   n;    MATCH(1;(cum>=ss)*1;0);
   prev; IF(n=1; 0; INDEX(cum;1;n-1));
   rem;  ss - prev;
   wd;   INDEX(wf;1;n);
   part; IF(wd=0; 7; rem/wd*7);
   IF(ISNUMBER(n); (n-1)*7 + part; COLUMNS(wf)*7)
 )
Step Logic
ofs = K10-K9 Strips prior cumulative so cum is always "from this week forward"
cum Adjusted forward-looking cumulative demand
n = MATCH(...) Finds first week where cumulative ≥ safety stock
(n-1)*7 Full covered weeks → days
rem/wd*7 Interpolates remaining stock into partial-week days
COLUMNS(wf)*7 Fallback if stock covers the entire horizon