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) hoặc hàm tùy chỉnh để tìm ngày đầu tiên cho bất kỳ tuần nhất định nào, coi Thứ Hai là ngày đầu tiên trong tuần. Chúng tôi sẽ tạo một hàm tùy chỉnh sẽ trả về ngày đầu tiên của tuần sau số tuần được chỉ định từ năm, tháng hoặc ngày nhất định.

Trong bài viết này, dữ liệu thô bao gồm số tuần, ngày, tháng và năm.

Chức năng tùy chỉnh sẽ có số ngày, tháng, năm và tuần làm thông số đầu vào. Dựa trên các giá trị đầu vào này, hàm sẽ trả về ngày đầu tiên trong tuần.

ArrowRawData

Cú pháp cho hàm tùy chỉnh “WeekStartDate” là WeekStartDate (WeekNumber, Year, Month, Day)

Tháng và Ngày là các tham số tùy chọn.

Hàm này giả định thứ Hai là ngày đầu tiên trong tuần.

Hàm WeekStartDate trả về ngày đầu tiên của tuần sau số tuần được chỉ định kể từ ngày được chỉ định bởi tham số Ngày, Tháng và Năm. Nếu tham số Ngày không được chỉ định thì nó sẽ trả về ngày đầu tiên của tuần sau số tuần được chỉ định trong tháng được chỉ định bởi tham số Tháng của năm được chỉ định. Nếu cả tham số Tháng và Ngày không được chỉ định thì nó sẽ trả về ngày đầu tiên của tuần được chỉ định trong năm.

ArrowOutput

Giải thích logic

Chúng tôi đã tạo chức năng tùy chỉnh “WeekStartDate” để tìm ngày đầu tiên trong tuần. Logic được sử dụng cho hàm này là nếu ngày trong tuần của ngày đã cho nhỏ hơn 4, thì tuần hiện tại sẽ được coi là tuần đầu tiên. Ngược lại, nếu ngày trong tuần của ngày nhất định lớn hơn 4 thì tuần sau sẽ được coi là tuần đầu tiên.

Giải thích mã

DateSerial (intYear, intMonth, intDay)

Hàm DateSerial được sử dụng để lấy ngày từ giá trị ngày, tháng và năm.

Ngày trong tuần (FromDate, vbMonday)

Hàm Weekday được sử dụng để lấy ngày trong tuần, coi thứ Hai là ngày đầu tiên của tuần.

If WKDay> 4 Then WDays = (7 intWeek) – WKDay + 1 Else WDays = (7 (intWeek – 1)) – WKDay + 1 End If Trên mã được sử dụng để tìm số ngày được đưa vào để tìm ngày đầu tiên trong tuần. Nếu giá trị ngày trong tuần nhỏ hơn 4, thì tuần hiện tại được coi là tuần đầu tiên. Đó là lý do tại sao chúng tôi đã trừ đi 1 tức là

(intWeek – 1). 1 được thêm vào khi chúng tôi muốn tìm ngày đầu tiên trong tuần.

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

Option Explicit

Function WeekStartDate(intWeek As Integer, intYear As Integer, Optional intMonth As Integer = 1, Optional intDay As Integer = 1)

'Declaring variables

Dim FromDate As Date, lngAdd As Long

Dim WKDay, WDays As Integer

WDays = 0

'Checking that year should not have negative value

If intYear < 1 Then

WeekStartDate = "Year cann't have negative value"

Exit Function

End If

'Calculating the date

FromDate = DateSerial(intYear, intMonth, intDay)

'Getting the week day of the specified date considering monday as first day

WKDay = Weekday(FromDate, vbMonday)

'If value of week day is less than 4 then subtracting 1 from the week number

If WKDay > 4 Then

WDays = (7 * intWeek) - WKDay + 1

Else

WDays = (7 * (intWeek - 1)) - WKDay + 1

End If

'Return the first day of the week

WeekStartDate = FromDate + WDays



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]