Home » Workday Count Between Dates

Workday Count Between Dates

Find the number of workdays between two dates (From & To) for Weekends given in column E. Blank in To field means Current Date. Blank in Weekend field means Sat, Sun. The answers shown where To dates are blanks are for 23-Mar-2023. Hence, your answer for these rows may differ. The dates are in US format, so depending upon your locale, you may need to convert column C and D in your locale’s date format before making the formula.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 157
Challenge Difficulty: ⭐️⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Workday Count Between Dates with Power Query

Power Query solution 1 for Workday Count Between Dates, proposed by Bo Rydobon 🇹🇭:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  NWD = Table.AddColumn(
    Source, 
    "Custom", 
    each 
      let
        D = List.Transform(
          List.Generate(
            () => [From], 
            (d) => d <= ([To] ?? DateTime.LocalNow()), 
            each Date.AddDays(_, 1)
          ), 
          each DateTime.ToText(_, "ddd")
        )
      in
        List.Count(List.RemoveMatchingItems(D, Text.Split([Weekend] ?? "Sat, Sun", ", ")))
  )
in
  NWD
Power Query solution 2 for Workday Count Between Dates, proposed by Zoran Milokanović:
let
 Source = Excel.CurrentWorkbook(){[Name="Input"]}[Content],
 ReplacedCurrentDate = Table.ReplaceValue(Source,null,DateTime.LocalNow(),Replacer.ReplaceValue,{"To"}),
 ReplacedSatSun = Table.ReplaceValue(ReplacedCurrentDate,null,"Sat, Sun",Replacer.ReplaceValue,{"Weekend"}),
 FomatFromToAsDate = Table.TransformColumnTypes(ReplacedSatSun,{{"To", type date}, {"From", type date}}),
 AddedWorkdays = Table.AddColumn(FomatFromToAsDate, "Workdays", each List.Accumulate(
 List.Transform(List.Dates([From], Duration.Days([To] - [From]) + 1, hashtag#duration(1, 0, 0, 0)), each Text.Start(Date.DayOfWeekName(_, "en-US"), 3)),
 0,
 (s, d) => s + (if List.Contains(Text.Split([Weekend], ", "), d) then 0 else 1))),
 Solution = AddedWorkdays[[Workdays]]
in
 Solution


                    
                  
          
Power Query solution 3 for Workday Count Between Dates, proposed by Aditya Kumar Darak 🇮🇳:
let
 NetWorkDays = ( start_date, end_date, weekend ) =>
 let
 From  = Date.From ( start_date ),
 To   = Date.From ( end_date ?? DateTimeZone.UtcNow() ),
 Wknd  = weekend ?? "Sat, Sun",
 Dates = List.Dates ( From, Number.From ( To - From ) + 1, hashtag#duration ( 1, 0, 0, 0 ) ),
 Filter = List.Select (
 Dates,
 ( f ) => not Text.Contains ( Wknd, Date.ToText ( f, "ddd" ) )
 ),
 Cnt  = List.Count ( Filter )
 in
 Cnt,
 Source   = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
 Return   = Table.AddColumn (
 Source,
 "Workdays",
 each NetWorkDays ( [From], [To], [Weekend] )
 )
in
 Return


                    
                  
          
Power Query solution 4 for Workday Count Between Dates, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 #"Changed Type" = Table.TransformColumnTypes(Source,{{"To", type date}, {"From", type date}}),
 NoNull = Table.TransformColumns(#"Changed Type", {{"To", each if _ = null then hashtag#date(2023,3,23) else _}, {"Weekend", each if _ = null then "Sat, Sun" else _}}),
 Days = Table.AddColumn(NoNull, "Days", each 
let
b = Text.Split([Weekend], ", "),
c =List.Transform({Number.From([From])..Number.From([To])}, each Text.Start(Date.DayOfWeekName(Date.From(_), "en-US"),3)),
d = List.Count(List.RemoveMatchingItems(c,b))
in d) [[Days]]
in
 Days


                    
                  
          
Power Query solution 5 for Workday Count Between Dates, proposed by Jan Willem Van Holst:
let
 Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XZDNCsIwEIRfpeScQJJa7bUHPfTHSxQPpYdFCw1oWmqL+PZuVmJVCJtJ+Gaym7pmFYxPxpkZwDrclVBCS61R6kQkQe9GyyMDE5bZsYbXbA9TB95xzLZYkQwsrkM38wg9RJZt7zGT+Uy95MdSrIPGVB5V/Tu6tHfAuxwGekDLn2xCDFztDQ/F/AA7+TAl4gCpVKT/jZMr7zvquKBBVx9eKPnVCKGZcy3ZwZ292Cx/gevUXniEQ7KmeQE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Emp = _t, Country = _t, From = _t, To = _t, Weekend = _t]),
 Replace1 = Table.ReplaceValue(Source,"",DateTime.Date(DateTime.LocalNow()) ,Replacer.ReplaceValue,{"To"}),
 Replace2 = Table.ReplaceValue(Replace1,"","Sat, Sun",Replacer.ReplaceValue,{"Weekend"}),
 Changed = Table.TransformColumnTypes(Replace2,{{"From", type date}, {"To", type date}}),
 Result = Table.AddColumn(Changed, "Answer", (x)=>
 let
 Dates = List.Dates(x[From], Duration.Days(x[To]-x[From])+1, hashtag#duration(1,0,0,0)),
 transform = List.Transform(Dates, each Text.Start(Date.DayOfWeekName(_),3 )),
 Remove = Text.Split(x[Weekend], ", "),
 removeWeekend = List.RemoveItems(transform, Remove)
 in
 List.Count(removeWeekend)
 )
in
 Result


                    
                  
          

Solving the challenge of Workday Count Between Dates with Excel

Excel solution 1 for Workday Count Between Dates, proposed by Bo Rydobon 🇹🇭:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(f,t,w,NETWORKDAYS.INTL(f,IF(t,t,TODAY()),CONCAT(COUNTIF(w,"*"&TEXT(SEQUENCE(7)+1,"ddd")&"*")))))
Excel solution 2 for Workday Count Between Dates, proposed by Bo Rydobon 🇹🇭:
=NETWORKDAYS.INTL(+C2:C8,IF(D2:D8,D2:D8,TODAY()),MAP(E2:E8,LAMBDA(w,IF(w>0,CONCAT(COUNTIF(w,"*"&TEXT(SEQUENCE(7)+1,"ddd")&"*")),))))
Excel solution 3 for Workday Count Between Dates, proposed by John V.:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(f,t,w,NETWORKDAYS.INTL(f,IF(t,t,NOW()),IF(w>0,CONCAT(COUNTIF(w,TEXT(ROW(2:8),"*ddd*"))),))))
Excel solution 4 for Workday Count Between Dates, proposed by محمد حلمي:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(a,b,c,
NETWORKDAYS.INTL(
a,
MIN(b,TODAY()),
CONCAT(--ISNUMBER(FIND(TEXT(
SEQUENCE(7,,2),"ddd"),IF(c>0,c,"Sat Sun")))))))
Excel solution 5 for Workday Count Between Dates, proposed by محمد حلمي:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(a,b,c,
NETWORKDAYS.INTL(a,IF(b,b,TODAY()),
CONCAT(--ISNUMBER(
FIND(TEXT(SEQUENCE(7,,2),"ddd"),
IF(LEN(c),c,"Sat, Sun")))))))
Excel solution 6 for Workday Count Between Dates, proposed by 🇰🇷 Taeyong Shin:
=MAP(C2:C8, D2:D8, E2:E8,
 LAMBDA(f,t,w,
 LET(
 d, TEXT(SEQUENCE(7) + 1, "ddd"),
 week, CONCAT(COUNTIF(w, "*" & d & "*")),
 NETWORKDAYS.INTL(f, MIN(TODAY(), t), IF(w > 0, week, 1))
 )
))
Excel solution 7 for Workday Count Between Dates, proposed by Aditya Kumar Darak 🇮🇳:
=MAP(
 C2:C8,
 D2:D8,
 E2:E8,
 LAMBDA(a, b, c,
 LET(
 _fto, IF(b = "", TODAY(), b),
 _dys, TEXT(SEQUENCE(7, , 2), "ddd"),
 _cfg, CONCAT(COUNTIFS(c, "*" & _dys & "*")),
 _fcfg, IF(c = "", 1, _cfg),
 _r, NETWORKDAYS.INTL(a, _fto, _fcfg),
 _r
 )
 )
)
Excel solution 8 for Workday Count Between Dates, proposed by Hussein SATOUR:
=MAP(C2:C8,D2:D8,E2:E8, LAMBDA(x,y,z, SUM(LET(a, SEQUENCE(IF(ISBLANK(y), TODAY(), y)-x+1,,x), IF(ISERR(FIND(TEXT(a, "ddd"), IF(ISBLANK(z), "Sat, Sun",z))), 1, 0)))))
Excel solution 9 for Workday Count Between Dates, proposed by Md. Zohurul Islam:
=LET(u,A2:B8,v,C2:C8,w,D2:D8,z,E2:E8,
p,IF(w="",TODAY(),w),
q,IF(z="","Sat "&"Sun",z),
s,MAP(p,v,q,LAMBDA(x,y,z,LET(
 a,TEXT(SEQUENCE(x-y+1,,y),"ddd"),
 b,TEXTSPLIT(z,", "),
 c,SUM(BYROW(ABS(a=b),SUM)),
 d,COUNTA(a)-c,
 d))),
s)
Excel solution 10 for Workday Count Between Dates, proposed by Charles Roldan:
=LET(_WEEKEND,LAMBDA(String,
CONCAT(--ISNUMBER(FIND(TEXT(SEQUENCE(,7,2),"Ddd"),String)))),
MAP(C2:C8,D2:D8,E2:E8,LAMBDA(From,To,Weekend,
NETWORKDAYS.INTL(From,IF(To,To,TODAY()),_WEEKEND(Weekend)))))
Excel solution 11 for Workday Count Between Dates, proposed by Tolga Demirci, PMP, PMI-ACP, MOS-Expert:
=>Cmt,
Sun=>Paz,
"ddd"=>"ggg"
=MAP(C2:C8;D2:D8;E2:E8;LAMBDA(x;y;z;IF(AND(y<>"";z<>"");DAYS(y;x)+1-SUM(IFERROR(FIND(TRANSPOSE(TEXTSPLIT(z;", "));TEXT(SEQUENCE(;y-x+1;x;1);"ggg");1);""));IF(AND(y="";z<>"");DAYS(TODAY();x)+1-SUM(IFERROR(FIND(TRANSPOSE(TEXTSPLIT(z;", "));TEXT(SEQUENCE(;TODAY()-x+1;x;1);"ggg");1);""));IF(AND(y="";z="");DAYS(TODAY();x)+1-SUM(IFERROR(FIND(TRANSPOSE(TEXTSPLIT(("Cmt, Paz");", "));TEXT(SEQUENCE(;TODAY()-x+1;x;1);"ggg");1);""));"")))))
Excel solution 12 for Workday Count Between Dates, proposed by Guillermo Arroyo:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(c,d,e,LET(w,IF(e="",{"Sat","Sun"},TEXTSPLIT(e,", ")),SUM(1-MMULT(--(WEEKDAY(SEQUENCE(IF(d="",TODAY(),d)-c+1,,c))=TRANSPOSE(MMULT(--(TEXT(SEQUENCE(7),"ddd")=w),SEQUENCE(COUNTA(w),,1,0))*SEQUENCE(7))),SEQUENCE(7,,,0))))))
More simple
=NETWORKDAYS.INTL(C2:C8*1,IF(D2:D8,D2:D8,TODAY()),MAP(G2:G8,LAMBDA(a,IF(a<>"",CONCAT(--ISNUMBER(SEARCH(TEXT(ROW(2:8),"ddd"),a))),"0000011"))))
Excel solution 13 for Workday Count Between Dates, proposed by Anup Kumar:
=LET(
fromDate, C2,
toDate, IF(D2>1,D2,TODAY()),
days, TEXT(SEQUENCE(7,,45005,1),"ddd"),
offDays, IF(ISBLANK(E2),{"Sat";"Sun"},TEXTSPLIT(E2,,", ")),
weekstr, CONCAT(--ISNUMBER(XMATCH(days,offDays,0))),
NETWORKDAYS.INTL(fromDate,toDate,weekstr)
)
Excel solution 14 for Workday Count Between Dates, proposed by Gabriel Raigosa:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(f,t,w,NETWORKDAYS.INTL(f,IF(t,t,TODAY()),TEXTJOIN(,,1*ISNUMBER(XMATCH({"Mon","Tue","Wed","Thu","Fri","Sat","Sun"},IF(w>0,TEXTSPLIT(w,", "),{"Sat","Sun"}))))))) 

▶️ ES:
=MAP(C2:C8,D2:D8,E2:E8,LAMBDA(f,t,w,DIAS.LAB.INTL(f,SI(t,t,HOY()),UNIRCADENAS(,,1*ESNUMERO(COINCIDIRX({"Mon","Tue","Wed","Thu","Fri","Sat","Sun"},SI(w>0,DIVIDIRTEXTO(w,", "),{"Sat","Sun"})))))))
Excel solution 15 for Workday Count Between Dates, proposed by roberto mensa:
=NETWORKDAYS.INTL(INDEX(C2:C8,SEQUENCE(7)),INDEX(IF(ISBLANK(D2:D8),TODAY(),D2:D8),SEQUENCE(7)),MID(CONCAT(--ISNUMBER(FIND(TEXT(SEQUENCE(,7,2),"ddd"),IF(ISBLANK(E2:E8),"Sat, Sun",E2:E8)))),SEQUENCE(ROWS(C2:C8),,1,7),7))
Excel solution 16 for Workday Count Between Dates, proposed by roberto mensa:
=NETWORKDAYS.INTL(INDEX(C2:C8,SEQUENCE(7)),INDEX(IF(ISBLANK(D2:D8),TODAY(),D2:D8),SEQUENCE(7)),MID(CONCAT(--ISNUMBER(FIND(MID("MonTueWedThuFriSatSun",SEQUENCE(,7,,3),3),IF(ISBLANK(E2:E8),"Sat, Sun",E2:E8)))),SEQUENCE(ROWS(C2:C8),,1,7),7))

&&&

Leave a Reply