Perhaps:
The above simply validates if the date is a weekday, if it is whether or not it is a public holiday, if it is not it then calculates how many working days have occurred to that point in the month (inclusive)
The use of INDEX with Holidays Range is used to identify the appropriate column of your public holiday range based on year of date.
If you can, try to avoid using SUMPRODUCT in large quantity esp. where Volatile (as was the case here c/o INDIRECT)
edit:
If preferred you could replace the first NETWORKDAYS call (with INDEX) with a standard COUNTIF... whichever seems more intuitive to you:
Bookmarks