Trong bài viết này, chúng tôi sẽ tạo một Hàm do Người dùng Xác định (UDF) để đếm số ngày làm việc giữa các ngày được chỉ định, bao gồm hoặc không bao gồm các ngày Thứ Bảy và Chủ Nhật là ngày nghỉ trong tuần.

Dữ liệu thô cho ví dụ này bao gồm ngày bắt đầu và ngày kết thúc. Chúng tôi muốn đếm số ngày làm việc giữa những ngày này.

ArrowMain

Chúng tôi đã chỉ định ngày nghỉ trong cột A trong trang tính “Ngày lễ”.

ArrowHolidayList

Excel có sẵn hàm NETWORKDAYS để đếm số ngày làm việc giữa các khoảng thời gian.

Cú pháp của hàm NETWORKDAYS NETWORKDAYS (Ngày bắt đầu, Ngày kết thúc, [Ngày lễ])

Chức năng này sẽ loại trừ ngày được chỉ định trong danh sách Ngày nghỉ, đồng thời đếm số ngày làm việc.

Hàm này mặc định coi Thứ Bảy và Chủ Nhật là Tuần nghỉ, vì vậy chúng tôi không thể đếm số ngày làm việc, trong trường hợp chúng tôi chỉ có một Tuần nghỉ.

Chúng tôi đã tạo chức năng tùy chỉnh “CountWorkingDays” để đếm số ngày làm việc giữa khoảng thời gian. Hàm tùy chỉnh này xử lý sự cố của hàm NETWORKDAYS. Trong chức năng này, chúng ta có thể đếm số ngày làm việc ngay cả khi chỉ có một Tuần nghỉ vào Thứ Bảy hoặc Chủ Nhật.

Cú pháp của hàm tùy chỉnh

CountWorkingDays (StartDate, EndDate, InclSaturdays, InclSundays)

InclSaturdays và InclSundays là các tham số tùy chọn. Theo mặc định, cả hai đều có giá trị TRUE. Để thay đổi các ngày Thứ Bảy và Chủ Nhật thành ngày làm việc, hãy thay đổi giá trị của tham số tương ứng thành FALSE.

Microsoft đã giới thiệu hàm NETWORKDAYS.INTL với Excel 2010. Hàm này xử lý sự cố của hàm NETWORKDAYS. Trong chức năng này, chúng ta có thể chỉ định các ngày nghỉ trong tuần. Chúng tôi có thể chỉ định một hoặc hai ngày là Tuần nghỉ.

Cú pháp của hàm NETWORKDAYS.INTL

NETWORKDAYS.INTL (Ngày bắt đầu, Ngày kết thúc, [Cuối tuần], [Ngày lễ])

Trong tham số cuối tuần, chúng tôi có thể chỉ định Ngày nghỉ trong tuần.

Trong ví dụ này, chúng ta sẽ sử dụng tất cả ba hàm trên để đếm số ngày làm việc.

ArrowOutput

Giải thích logic

Trong hàm “CountWorkingDays”, trước tiên chúng ta kiểm tra xem ngày đã cho trong tham số có tồn tại trong danh sách ngày nghỉ được chỉ định hay không. Nếu ngày đó tồn tại trong danh sách ngày nghỉ thì ngày đó không được tính vào số ngày làm việc. Nếu ngày không tồn tại trong danh sách ngày lễ, hãy kiểm tra xem ngày đã cho là thứ Bảy hay Chủ nhật. Dựa trên tham số đầu vào được cung cấp, hãy kiểm tra xem nên bao gồm hay loại trừ Thứ Bảy hoặc Chủ Nhật là ngày lễ.

Giải thích mã

Đặt RngFind = Worksheets (“Ngày lễ”). Cột (1) .Find (i)

Đoạn mã trên được sử dụng để tìm vị trí có ngày được chỉ định trong danh sách ngày lễ.

If Not RngFind Is Nothing then GoTo ForLast End If Trên mã được sử dụng để kiểm tra xem ngày cụ thể có tồn tại trong danh sách ngày lễ hay không. Nếu điều kiện trả về TRUE, thì ngày đó không được tính vào số ngày làm việc.

Vui lòng theo dõi bên dưới để biết mã

Option Explicit

Function CountWorkingDays(StartDate As Long, EndDate As Long, Optional InclSaturdays As Boolean = True, _

Optional InclSundays As Boolean = True)

'Declaring variables

Dim RngFind As Range

Dim i As Long

For i = StartDate To EndDate



On Error Resume Next



'Finding the location where the specified date exist in the Holidays sheet

Set RngFind = Worksheets("Holidays").Columns(1).Find(i)



On Error GoTo 0



'Checking whether it is holiday on the given date

If Not RngFind Is Nothing Then

GoTo ForLast

End If



'Checking whether it is Saturday on given date

If InclSaturdays Then

If Weekday(i, 2) = 6 Then

GoTo ForLast

End If

End If



'Checking whether it is Sunday on given date

If InclSundays Then

If Weekday(i, 2) = 7 Then

GoTo ForLast

End If

End If



CountWorkingDays = CountWorkingDays + 1



ForLast:

Next

End Function

Nếu bạn thích blog này, hãy chia sẻ nó với bạn bè của bạn trên Facebook và Facebook.

Chúng tôi rất muốn nghe ý kiến ​​từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi [email protected]