Bạn đã bao giờ tự hỏi có bao nhiêu ngày trong tuần cụ thể xảy ra trong một tháng nhất định? Đối với một số người, điều quan trọng là phải biết có bao nhiêu ngày thứ Ba trong một tháng. Và ai lại không muốn biết liệu một tháng cụ thể sẽ có bốn hay năm ngày thứ Bảy?

Excel không bao gồm một hàm nội tại mà bạn có thể sử dụng để xác định số lần một ngày trong tuần cụ thể xảy ra trong một tháng nhất định. Tuy nhiên, bạn có thể tạo công thức và hàm của riêng mình để hoàn thành nhiệm vụ.

Đầu tiên, hãy xem xét công thức sau.

=4+N((WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)))



(DAY(DATE(YEAR($A$1),MONTH($A$1)+1,0))-28)>(7*(( WEEKDAY(DATE(YEAR($A$1),MONTH($A$1),1)))>(1+ROW()- ROW($A$2)))+(1+ROW()-ROW($A$2))))

Công thức dựa trên một ngày trong A1. Ngày này phải từ tháng bạn muốn “kiểm tra”. Công thức có nghĩa là được sao chép vào một ô ở hàng 2, và sau đó được sao chép vào sáu ô ngay bên dưới ô đó. Ví dụ: bạn có thể sao chép công thức này vào phạm vi ô B2: B8. Phản hồi đầu tiên (B2) là số ngày Chủ nhật trong tháng, câu trả lời thứ hai (B3) là số thứ Hai, v.v.

Hạn chế của công thức này là nó sử dụng vị trí của ô chứa công thức như một phần của công thức. Điều này có nghĩa là công thức phải được đặt ở đâu đó bắt đầu từ hàng thứ hai.

Một nhược điểm nữa là công thức khá dài và phức tạp. Nếu bạn muốn một công thức ngắn hơn, thì bạn cần chuyển sang công thức mảng. Một công thức hữu ích mà bạn có thể sử dụng, giả định rằng bạn cung cấp ba đối số: năm (ô C2), tháng (ô D2) và một ngày trong tuần (ô E2). Với ba mục này, công thức sau hoạt động tuyệt vời:

=SUM(IF(WEEKDAY(DATE(C2, D2, ROW(INDIRECT("1:" & DAY(DATE(C2, D2+1, 0))))))=E2, 1, 0))

Hãy nhớ rằng đây là một công thức mảng, có nghĩa là bạn phải nhập nó bằng cách nhấn Shift + Ctrl + Enter. Ngoài ra, giá trị ngày trong tuần bạn nhập vào ô E2 phải nằm trong khoảng từ 1 đến 7, trong đó 1 là Chủ Nhật, 2 là Thứ Hai, v.v.

Một công thức tuyệt vời khác mà bạn có thể sử dụng như sau:

=NETWORKDAYS.INTL(DATE(YEAR(A1),MONTH(A1),1),EOMONTH(A1,0), REPT("1",B1-1) & "0" & REPT("1",7-B1))

Công thức tổng quát này chỉ cần hai giá trị để hoạt động đúng. Đầu tiên là một ngày trong tháng bạn muốn phân tích; điều này đi vào ô A1. Trong ô B1, bạn nên đặt một chỉ báo của ngày trong tuần mà bạn muốn đếm. Giá trị này khác với trong công thức trước — trong khi nó vẫn phải nằm trong phạm vi từ 1 đến 7, 1 là Thứ Hai, 2 là Thứ Ba, v.v.

Nếu thiết kế trang tính của bạn không cho phép bạn nhập năm, tháng và ngày trong tuần vào các ô khác nhau, một giải pháp tốt là tạo một hàm do người dùng xác định để trả về số lượng. Macro sau đây là một ví dụ về loại chức năng này.

Function MonthWeekDays(dDate As Date, iWeekDay As Integer)

Dim dLoop As Date

If iWeekDay < 1 Or iWeekDay > 7 Then         MonthWeekDays = CVErr(xlErrNum)

Exit Function     End If     MonthWeekDays = 0     dLoop = DateSerial(Year(dDate), Month(dDate), 1)

Do While Month(dLoop) = Month(dDate)

If WeekDay(dLoop) = iWeekDay Then _           MonthWeekDays = MonthWeekDays + 1         dLoop = dLoop + 1     Loop End Function

Bạn sử dụng hàm bằng cách nhập nội dung sau vào ô:

=MonthWeekDays(A1,4)

Trong cách sử dụng này, đối số đầu tiên (ô A1) chứa một ngày trong tháng được đánh giá. Đối số thứ hai là một giá trị số đại diện cho ngày trong tuần mà bạn muốn đếm. Giá trị này phải nằm trong khoảng từ 1 đến 7, trong đó 1 là Chủ nhật, 2 là Thứ hai, v.v.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (5684) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: