I think WORKDAY()'s second parameter being zero is undefined.
Indeed, the help states:
> work-days: A number value representing the number of working days. work-days is a positive value if the desired date is after date and a negative value if the desired date is before date.
It has no provision for 0, which seems to be interpreted as 'return the exact date', which kind of makes sense since you're not asking for the next (or previous) workday.
Given your desire to return '... the closest workday', you may have to jump through some additional hoops to work out whether you want the next or the previous day.
For example, here's one solution that uses LET() to break out the individual hoops:
=LET(dayofweek,DAYNAME(WORKDAY(EDATE(TODAY(),−24),0,NYSE Market Holidays::B2:B11)),
dateOffset,IFS(dayofweek="Sunday",1,dayofweek="Saturday",−1,TRUE,0),
WORKDAY(EDATE(TODAY(),−24),dateOffset,NYSE Market Holidays::B2:B11))
I'll break out the steps:
dayofweek, DAYNAME(WORKDAY(EDATE(TODAY(),−24),0,NYSE Market Holidays::B2:B11))
Calculates the day name for the dates 24 months ago. This is stored in the variable dayofWeek.
dateOffset,IFS(dayofweek="Sunday",1,dayofweek="Saturday",−1,TRUE,0),
This uses the IFS() statement to check a series of TRUE/FALSE values and returns the corresponding first match.
It checks if dayofweek (as just defined in the previous line) is Sunday (in which case dateOffset is set to 1) or if dayofweek is set to "Saturday" (in which case dateOffset is set to -1). Any other value sets dateOffset to 0).
Now we know if we want to add a day or subtract a day (or keep the day as-is), so we can re-run the WORKDAY() function with the appropriate offset:
WORKDAY(EDATE(TODAY(),−24),dateOffset,NYSE Market Holidays::B2:B11)
LET() is included in Numbers 14.4 and later. if you have an older version, the same thing can be achieved, it's just that LET() makes it a lot more readable.