Business computations always involve the computation of Net-Work days, and if you are using Excel, you immediately find a solution in `NetworkDays` function. I have myself used it extensively in my computational work. But, for reasons best known to Microsoft, they have kept this function as part of Analysis Toolpack add-in. Well, to makes obviously no difference as the addin is a part of standard Office shipment. But, when you are developing a spreadsheet to be used by many, you are not very sure whether they have the addin installed/active.

Adding a check for its presence is definitely a good idea, but depending on the `Analysis ToolPack` just for `NetworkDays` functionality is not worth it, atleast in my purview. Here is the code of a custom function that does the same for you, and in cases, can remove your dependency on ATP.

``````Public Function MyNetWorkDays(ByVal startDate As Date, ByVal endDate As Date, Optional ByVal holidays As range = Nothing) As Integer

Dim diff As Integer, weeks As Integer, ed As Integer, sd As Integer, delta As Integer

Dim swap As Boolean

swap = False

MyNetWorkDays = 0: delta = 0

If endDate < startDate Then
'swap the dates
Dim temp As Date
temp = endDate
endDate = startDate
startDate = temp
swap = True
End If

diff = endDate - startDate
ed = Weekday(endDate)
sd = Weekday(startDate)
weeks = diff \ 7

If ed = sd Then
If Not (ed = 1 Or ed = 7) Then
delta = 1
End If
ElseIf ed > sd Then
If ed = 7 Then ed = 6
If sd = 1 Then sd = 2
delta = ed - sd + 1
Else
delta = 7 - (sd - ed) - 1
End If

MyNetWorkDays = (weeks * 5) + delta

' check for holidays
If Not holidays Is Nothing Then
For Each holiday In holidays
wh = Weekday(holiday)
If wh = 1 Or wh = 7 Then

Else
If startDate <= holiday And holiday <= endDate Then
MyNetWorkDays = MyNetWorkDays - 1
End If
End If
Next
End If

If swap Then
MyNetWorkDays = 0 - MyNetWorkDays
End If

End Function
``````

Hope this helps!