Tính ngày bắt đầu một tuần bằng VBA trong Microsoft Excel
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.
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.
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]