Trong một khoảng thời gian có bao nhiêu ngày thứ Bảy, Chủ Nhật,... ? (1 người xem)

  • Thread starter Thread starter BNTT
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,213
Nghề nghiệp
Dạy đàn piano
Nhân bài toán của Hoàng Danh, tôi mới chế ra một cái công thức để đếm xem trong một khoảng thời gian nào đó có bao nhiêu ngày thứ Bảy, bao nhiêu ngày Chủ Nhật.

Đây là công thức đếm ngày thứ Bảy của tôi:

=IF(OR(AND(WEEKDAY(Ngaydau)>4,WEEKDAY(Ngaycuoi)=7),AND(WEEKDAY(Ngaydau)>5,WEEKDAY(Ngaycuoi)<5)),INT((Ngaycuoi-Ngaydau+1)/7)+1,INT((Ngaycuoi-Ngaydau+1)/7))

Với NgaydauNgaycuối là hai ô chứa ngày đầu và ngày cuối trong khoảng thời gian cần tính.

Công thức này trên hơi dài, nhưng có thể dùng để "fill down" cho nhiều hàng, tôi đã dùng để kiểm tra số ngày thứ Bảy có trong mỗi tháng ở nhiều năm khác nhau.

Nếu như chỉ cần nhập 1 ô là Ngày Đầu, và 1 ô là Ngày cuối, thì đặt Name cho gọn hơn:
  • NgayDau = ô chứa giá trị ngày đầu của khoảng thời gian cần tính
  • NgayCuoi = ô chứa giá trị ngày cuối của khoảng thời gian cần tính
  • DAU = WEEKDAY(Ngaydau)
  • CUOI = WEEKDAY(Ngaycuoi)
  • TUAN = INT((Ngaycuoi-Ngaydau+1)/7)
Thì để đếm số ngày thứ Bảy có trong một khoảng thời gian, chỉ cần nhập ngắn như sau:
=IF(OR(AND(DAU>4, CUOI=7), AND(DAU>5, CUOI<5)), TUAN+1, TUAN)

Tương tự, công thức để đếm số ngày Chủ Nhật có trong một khoảng thời gian là:
=IF(OR(AND(DAU=1, CUOI<7), AND(DAU>5, CUOI<6)), TUAN+1, TUAN)

Nhờ các bạn góp ý thêm, bằng cách khác, hoặc làm cho nó ngắn hơn.
Dùng công thức hoàn toàn, không dùng VBA hoặc hàm UDF nha.
 
Anh ơi, nó đơn giãn lắm chứ có dài dòng thế đâu
Công thức tổng quát, đếm ngày nào cũng được:
Mã:
Tính số ngày thứ hai:   =INT((Y-X-WEEKDAY(Y,2)+8)/7)
Tính số ngày thứ ba:    =INT((Y-X-WEEKDAY(Y-1,2)+8)/7)
Tính số ngày thứ tư:     =INT((Y-X-WEEKDAY(Y-2,2)+8)/7)
Tính số ngày thứ năm: =INT((Y-X-WEEKDAY(Y-3,2)+8)/7)
Tính số ngày thứ sáu:   =INT((Y-X-WEEKDAY(Y-4,2)+8)/7)
Tính số ngày thứ bảy:   =INT((Y-X-WEEKDAY(Y-5,2)+8)/7)
Tính số ngày chủ nhật:  =INT((Y-X-WEEKDAY(Y-6,2)+8)/7)
Với:
X = ngày đầu
Y = Ngày cuối
Xem tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=2515&page=3
 
Nhân bài toán của Hoàng Danh, tôi mới chế ra một cái công thức để đếm xem trong một khoảng thời gian nào đó có bao nhiêu ngày thứ Bảy, bao nhiêu ngày Chủ Nhật.
.
Với bài của hoangdanh282vn thì anh nên dùng mãng hiệu quả hơn, vì anh không chỉ đếm Thứ 7, CN mà còn phải xét xem LỂ có nằm trong những ngày ấy không!
Ví dụ:
1> Tạo 1 name liệt kê các ngày từ đầu đến cuối:
Mã:
Ngay =Ngaycuoi-1+ROW(INDIRECT("1:"&Ngaycuoi-Ngaydau+1))
2> Định nghĩa ngày lể là những ngày nào:
Mã:
Le ={"0101","3004","0105","0209"}
Từ đây anh sẽ tính được rất nhiều thứ
1> Tính xem có bao nhiêu ngày lể trùng thứ 7, CN
Mã:
{=SUM((TEXT(IF(WEEKDAY(Ngay,2)<6,,Ngay),"ddmm")=Le)*1)}
2> Tính xem có bao nhiêu ngày từ thứ 2 đến thứ 6:
Mã:
{=COUNT(IF(WEEKDAY(Ngay,2)>5,"",Ngay))}
3> Tính xem có bao nhiêu ngày lể trùng vào những ngày từ thứ 2 đến thứ 6:
Mã:
{=SUM((TEXT(IF(WEEKDAY(Ngay,2)>5,"",Ngay),"ddmm")=Le)*1)}
Vân vân và vân vân
 
Mình có một bài toán:
Hôm nay là ngày 05/07/2008, Mình muốn biết sau 45 ngày nữa là là ngày nào?Nhưng phải trừ những ngày lễ và chủ nhật ra.
Theo bạn ndu96081631 thì phải dùng mảng nhưng mà kiến thức về mảng của mình không được vững lắm bạn nào giải giúp mình nhé.Có thể cho mình file ví dụ càng tốt. Thanks
 
Mình có một bài toán:
Hôm nay là ngày 05/07/2008, Mình muốn biết sau 45 ngày nữa là là ngày nào?Nhưng phải trừ những ngày lễ và chủ nhật ra.
Theo bạn ndu96081631 thì phải dùng mảng nhưng mà kiến thức về mảng của mình không được vững lắm bạn nào giải giúp mình nhé.Có thể cho mình file ví dụ càng tốt. Thanks
Câu hỏi này cũng rất hay!
Bạn tham khảo file đính kèm, chỉ cần sửa lại ngày bắt đầu là ổn
Cần tìm ngày thứ 45 thì =INDEX(DATE,45,1)
(Gợi ý thôi, bạn còn phải sửa lại đôi chút trong name nhé)
 

File đính kèm

Câu hỏi này cũng rất hay!
Bạn tham khảo file đính kèm, chỉ cần sửa lại ngày bắt đầu là ổn
Cần tìm ngày thứ 45 thì =INDEX(DATE,45,1)
(Gợi ý thôi, bạn còn phải sửa lại đôi chút trong name nhé)
Hôm nay là ngày 05/07/2008, Mình muốn biết sau 45 ngày nữa là là ngày nào?Nhưng phải trừ những ngày lễ và chủ nhật ra.
Thú thật là mình cũng chưa hiểu vậy endDate là ngày nào.
Bạn addIns thêm Analysis ToolPak, sau đó dùng hàm Workday(NgayDau,SoNgay,NL)
Còn không dùng 1 code đếm.
 
Ở Việt Nam không dùng hàm WORKDAY được đâu, vì Excel tính ngày làm việc từ thứ 2 đến thứ 6, nghĩ ngày thứ 7 và CN
 
Bác Thunghi ơi, bác chế ra một cái hàm UDF đi... Em gợi ý hướng thôi:
Tính từ một ngày, cho nó chạy tới bao nhiêu ngày đó, vửa chạy vừa đếm vừa xem chừng, nếu như mà gặp ngày thứ nghỉ lễ, Chủ Nhật gì đó thì bỏ qua không đếm. Chạy cho tới khi nào đủ số ngày cần có thì dừng lại ?
Cái khó là phải lập ra một danh sách mấy cái ngày nghỉ lễ, rồi đưa vào trong đó. Em thì dốt khoản này lắm.
Bác nghiên cứu thử nha.
 
Làm thử 1 UDF, các bạn góp ý nha:
PHP:
Function Ngaylamviec(Batdau As Date, SN As Integer, Le As Date) As Date
  Dim i, k As Integer
  For i = 1 To SN * 2
     If Weekday(Batdau + i) <> 1 And Batdau + i <> Le Then
        k = i
        If k >= SN Then Exit For
     End If
  Next
  Ngaylamviec = Batdau + k
End Function
(chưa hoàn hảo lắm)
 
Làm thử 1 UDF, các bạn góp ý nha:
PHP:
Function Ngaylamviec(Batdau As Date, SN As Integer, Le As Date) As Date
  Dim i, k As Integer
  For i = 1 To SN * 2
     If Weekday(Batdau + i) <> 1 And Batdau + i <> Le Then
        k = i
        If k >= SN Then Exit For
     End If
  Next
  Ngaylamviec = Batdau + k
End Function
(chưa hoàn hảo lắm)
Le phải là 1 range chớ không thể là date, lễ có hơn ngày. Bác Test lại thử
 
Le phải là 1 range chớ không thể là date, lễ có hơn ngày. Bác Test lại thử
Chính xác, nhưng nếu ngon hơn nữa Le là 1 mãng chứa các String thì càng tốt!
Ví dụ tôi gõ 30/4, 1/5 thì nó tự biết Le là 30 tháng 4 và 1 tháng 5 bất kể năm nào!
Ngoài ra còn vụ nghĩ lể âm lịch nữa, khá rắc rối!
Bởi vậy code trên chỉ là mở màn, các bạn hảy góp thêm cho hoàn chỉnh hơn
 
Cho em hỏi cái này:
DK=IF(((COUNTIF(NN,DATE))+(WEEKDAY(DATE)=1)),"",ROW(INDIRECT("1:"&Sheet1!$B$2*2)))​
Tại sao phải mở nhiều ngoặc đơn thế? Bớt đi 2 cái có ảnh hưởng gì không?
Do quá trình làm công thức này, tôi phải test từng công thức một, khi ráp vào nó dư
Bạn bỏ bớt đi, có sao đâu!
Thêm nữa: Do nghĩ Tết âm lịch liên tục trong 6 ngày, nên có lẻ cần phải sửa lại name, chổ nào *2 thì sửa lại *6
(đã sửa lại trong file đính kèm ở bài trên)
 
Bác Thunghi ơi, bác chế ra một cái hàm UDF đi... Em gợi ý hướng thôi:
Tính từ một ngày, cho nó chạy tới bao nhiêu ngày đó, vửa chạy vừa đếm vừa xem chừng, nếu như mà gặp ngày thứ nghỉ lễ, Chủ Nhật gì đó thì bỏ qua không đếm. Chạy cho tới khi nào đủ số ngày cần có thì dừng lại ?
Cái khó là phải lập ra một danh sách mấy cái ngày nghỉ lễ, rồi đưa vào trong đó. Em thì dốt khoản này lắm.
Bác nghiên cứu thử nha.

Việc chạy như vậy thì giống như quá trình brute force quá. Tuy nhiên được cái bao giờ cũng đúng.--=0

Nếu ngày không xa nhau lắm (khoảng 100 ngày gì đó - nghe ghê quá) thì dùng nó, còn nếu cách xa nhau quá thì nên dùng các thuật toán rút gọn đi bác ạ.

Thân!
 
Thú thật là mình cũng chưa hiểu vậy endDate là ngày nào.

45 ngày sau là ngày 27/08/2008, có nghĩa là mình bắt đầu đếm từ 05/07/2008 là ngày thứ 1, 06/07 là 2 .... 27/08/2008 là ngày thứ 45, trong đó mình đã trừ ra các ngày chủ nhật và ngày lễ (30/04 or 02/09 ....nói chung là các ngày lễ được nghỉ làm theo luật qui định)
 
Thử thêm 1 chiêu nữa:
PHP:
Option Explicit
Function Ngaycuoi(Ngaydau As Date, SN As Integer, Le As Range) As Date
   Dim TextN As String
   Dim i, K, DK As Integer
   For i = 1 To SN * 6
      TextN = Day(Ngaydau + i) & "/" & Month(Ngaydau + i)
      DK = Application.WorksheetFunction.CountIf(Le, TextN)
      If DK = 0 And Weekday(Ngaydau + i) <> 1 Then K = K + 1
      If K = SN Then K = i: Exit For
   Next
   Ngaycuoi = Ngaydau + K
End Function
Code này thử sơ qua chưa phát hiện lổi (nhờ các bạn test lại)
Tuy nhiên tôi vẩn còn gặp khó khăn trong chuyện ngày Lể là âm lịch
Điểm dở trong code này là: không biết phải quét i = 1 đến bao nhiêu là vừa đủ
--------------------------------------
Nhân đây cho tôi hỏi thêm 1 chút:
Nhờ các bạn chỉ hộ tôi hàm nào trong VBA tương đương với hàm TEXT của công thức Excel?
Tôi muốn chuyển đổi dử liệu theo cách sau:
=TEXT(ngày tháng năm, "dd/mm")
Nhưng trong VBA lại không biết dùng hàm nào?
 

File đính kèm

Lần chỉnh sửa cuối:
Format(DateSerial(2008, 1, 1), "mmm dd,yyyy") = "jan 01, 2008"

=TEXT(Ngày tháng năm, "dd/mm") ~ format(ngày tháng năm, "dd/mm")
 
Lần chỉnh sửa cuối:
Nhân đây cho tôi hỏi thêm 1 chút:
Nhờ các bạn chỉ hộ tôi hàm nào trong VBA tương đương với hàm TEXT của công thức Excel?
Tôi muốn chuyển đổi dử liệu theo cách sau:
=TEXT(ngày tháng năm, "dd/mm")
Nhưng trong VBA lại không biết dùng hàm nào?
Bạn dùng hàm Format
ngay=Format(ngaythang,"đ/mm")

Function Ngaycuoi(Ngaydau As Date, SN As Integer, Le As Range) As Date
Nếu ngày đầu=07/07/2008, số ngày làm việc=3, không có ngày lễ thì hàm Ngaycuoi cho kết quả là 10/07/2008.
Đúng phải là ngày 09/07/2008 vì ngày 07/07 là ngày làm việc thứ nhất (hay ngày đầu không tính ?)
 
Bạn dùng hàm Format
ngay=Format(ngaythang,"dd/mm")

Function Ngaycuoi(Ngaydau As Date, SN As Integer, Le As Range) As Date
Nếu ngày đầu=07/07/2008, số ngày làm việc=3, không có ngày lễ thì hàm Ngaycuoi cho kết quả là 10/07/2008.
Đúng phải là ngày 09/07/2008 vì ngày 07/07 là ngày làm việc thứ nhất (hay ngày đầu không tính ?)
Cái đó cũng không quan trọng lắm anh ơi! Việc tính ngày nào là ngày thứ nhất là tùy quan điểm của mổi người... Trong file của em không xem ngày bắt đầu là ngày 1
Nhân đây lại hỏi thêm vấn đề nữa:
Tôi phát triển thêm hàm để tính được cả âm lịch. Tôi quy định rằng trong vùng LỂ nếu gõ theo dạng TEXT thì đó là lể dương lịch, nếu gõ theo dạng DATE thì đó là lể âm lịch!
Thế nhưng kết quả lại chưa chính xác! Ví dụ ngày 6/2/2008, 7/2/20088/2/2008lể âm lịch, vậy nếu ngày bắt đầu là ngày 5/2/2008, số ngày là 1 thì ngày kết thúc lý ra phải là ngày 9/2/2008.
Thế mà nó lại cho kết quả = 11/2/2008
Code của nó như sau:
PHP:
Option Explicit
Function Ngaycuoi(Ngaydau As Date, SN As Integer, Le As Range) As Date
   Dim TextN As String
   Dim iNgay As Date
   Dim i, K, DK1, DK2 As Integer
   For i = 1 To SN * 6
      iNgay = Ngaydau + i
      TextN = Format(iNgay, "d/m")
      DK1 = Application.WorksheetFunction.CountIf(Le, TextN)
      DK2 = Application.WorksheetFunction.CountIf(Le, iNgay)
      If DK1 = 0 And DK2 = 0 And Weekday(iNgay) <> 1 Then K = K + 1
      If K = SN Then K = i: Exit For
   Next
   Ngaycuoi = Ngaydau + K
End Function
Nhờ các bạn xem file đính kèm và cho biết tại sao lại có sai sót này!
 

File đính kèm

Tôi dùng vòng lập thay thế cho hàm COUNTIF như sau:
PHP:
Option Explicit
Function Ngaylamcuoi(Ngaydau As Date, SN As Integer, Le As Range) As Date
   Dim TextN As String
   Dim iNgay As Date
   Dim Dk, i, j, K As Integer
   For i = 1 To SN * 6
      iNgay = Ngaydau + i
      TextN = Format(iNgay, "d/m")
         Dk = 0
         For j = 1 To Le.Cells.Count
           If iNgay = Le(j) Or TextN = Le(j) Then Dk = 1
         Next j
      If Dk = 0 And Weekday(iNgay) <> 1 Then K = K + 1
      If K = SN Then K = i: Exit For
   Next
   Ngaylamcuoi = Ngaydau + K
End Function
thì code lại chạy đúng! Vậy hàm COUNTIF ở bài trên có vấn đề gì sao?
Nhờ các cao thủ giải thích hộ!
 

File đính kèm

Hình như có vấn đề với công thức của anhtuan và ndu. đó. Bạn thử test ngày 14/07/2008 thử xem. 30 ngày sau là ngày 16/08/2008 chứ không phải là ngày 18/08/2008 như công thức. Mình không tìm được lý do, bạn nào giải thích dùm mình nhé
 
Hình như có vấn đề với công thức của anhtuan và ndu. đó. Bạn thử test ngày 14/07/2008 thử xem. 30 ngày sau là ngày 16/08/2008 chứ không phải là ngày 18/08/2008 như công thức. Mình không tìm được lý do, bạn nào giải thích dùm mình nhé
18/8/2008 là đúng rồi chứ! Công thức này bỏ qua ngày lể và CN mà bạn...
(Chú ý: công thức này tính ngày đầu tiên là ngày hôm sau nha. Ví dụ hôm nay là ngày bắt đầu thì sau 1 ngày là ngày mai)
Bạn xem lại, tôi kiểm tra rồi, kết quả 18/8/2008 là hoàn toàn chính xác
(xem file tôi test đây)
 

File đính kèm

Lần chỉnh sửa cuối:
Các bạn xem lại nghen, mình tao bang nhung khong hien thi duoc.
Vd:
Thu ngày bắt đầu ngày kết thúc tổng số ngày
T2 7/13/08 9/30/10 116
T3 7/13/08 9/30/10 116
T4 7/13/08 9/30/10 116
T5 7/13/08 9/30/10 116
T6 7/13/08 9/30/10 115
T7 7/13/08 9/30/10 115
CN 7/13/08 9/30/10 116

Tổng ngày 810
ngày 20 ?

Với khoảng thời gian đó, ngày 20 là bao nhiêu ngày?
 
Lần chỉnh sửa cuối:
Có khi nào bạn chưa hiểu được cách dùng hàm này không?
Nó là:
- Biết được ngày bắt đầu
- Biết được tổng số ngày
- Biết được các ngày nghĩ lể
===> Tính ngày kết thức là ngày mấy
 
Mình muốn hỏi trong khoảng thời gian từ ngày 7/13/08 đến ngày 9/30/10 là tổng số được 810 ngày.
Từ công thức tính thứ của bạn ndu 96081631 mình tìm tổng số ngày, nhưng mình muốn biết trong khoảng thời gian đó có bao nhiêu ngày là ngày 20.
Tính số ngày thứ hai: =INT((Y-X-WEEKDAY(Y,2)+8)/7)
Tính số ngày thứ ba: =INT((Y-X-WEEKDAY(Y-1,2)+8)/7)
Tính số ngày thứ tư: =INT((Y-X-WEEKDAY(Y-2,2)+8)/7)
Tính số ngày thứ năm: =INT((Y-X-WEEKDAY(Y-3,2)+8)/7)
Tính số ngày thứ sáu: =INT((Y-X-WEEKDAY(Y-4,2)+8)/7)
Tính số ngày thứ bảy: =INT((Y-X-WEEKDAY(Y-5,2)+8)/7)
Tính số ngày chủ nhật =INT((Y-X-WEEKDAY(Y-6,2)+8)/7)

Các bạn xem lại dùm nhé do bài trước đã bị xóa mình không biết nên khi mình viết bổ sung mới ngắn gọn, các bạn thông cảm nhe!
 
Lần chỉnh sửa cuối:
Mình muốn hỏi trong khoảng thời gian từ ngày 7/13/08 đến ngày 9/30/10 là tổng số được 810 ngày.
Vậy với khoảng thời gian đó ngày 20 là bao nhiêu ngày?
A1: 13/07/2008
B1: 30/09/2010
C1=SUMPRODUCT(--(DAY(ROW(INDIRECT(VALUE(A1)&":"&VALUE(B1))))=20))
 
Ví dụ thế này:
Nếu nghỉ từ ngày 14/7/2008 đến ngày 25/7/2008.tổng số ngày nghỉ là 11 ngày bao gồm ngày chủ nhật.em muốn tạo công thức trừ ra các ngày lễ và chủ nhật có trong tháng để tính số ngày công nhân đó được hưởng tính Bảo hiểm.anh chị giúp em với.
Thanks!
 
Tính số ngày làm việc trong một khoảng thời gian bằng công thức có thể anh em trên GPE giải quyết được. Nhưng công thức quá phức tạp, viết đúng rồi, viết lại chưa chắc đúng !.
Tôi chỉ có thể làm bằng VBA chứ công thức thì chịu ! Để tiện cho anh em sử dụng, tôi viết 2 hàm:

NgayLamViec(NgayDau, NgayCuoi, BayCn, rLe)
Đếm số ngày làm việc tính từ ngày đầu đến ngày cuối, trừ các ngày chủ nhật (thứ bảy) và các ngày nghỉ lễ.
NgayDau, NgayCuoi: ngày đầu tiên và ngày cuối cùng (tính luôn 2 ngày này). Có thể nhập ngày nào trước cũng được.
BayCn: quy định số ngày nghỉ trong tuần.
- 1 : tuần nghỉ 1 ngày chủ nhật
- 2 : tuần nghỉ 2 ngày thứ bảy và chủ nhật
(không bắt buộc nhập, ngầm định là 1)
rLe: vùng ô chứa ngày nghỉ lễ. Có 2 loại ngày nghỉ lễ:
- Ngày nghỉ cố định hàng năm (30/4, 1/5, …): nhập dạng chuỗi ‘30/4, ‘1/5
- Ngày nghỉ chỉ có giá trị trong năm (thường là ngày âm lịch như Tết âm lịch, Giỗ tổ Hùng Vương, …) nhập theo dạng ngày tháng năm.
(không bắt buộc nhập)

SoNgay(NgayDau, NgayCuoi, NgayTim)
Đếm số ngày trong tháng (hoặc thứ) tính từ ngày đầu đến ngày cuối
NgayDau, NgayCuoi: ngày đầu tiên và ngày cuối cùng (tính luôn 2 ngày này). Có thể nhập ngày nào trước cũng được.
NgayTim: ngày cần tìm nhập theo quy định:
- Thứ trong tuần: nhập dạng chuỗi “t2”, “t3”, “t4”, “t5”, “t6”, “t7”, “cn” cho các ngày thứ hai > chủ nhật.
- Ngày trong tháng: các số từ 1 đến 31.

Nhờ anh em kiểm tra lại.
 

File đính kèm

Câu hỏi này cũng rất hay!
Bạn tham khảo file đính kèm, chỉ cần sửa lại ngày bắt đầu là ổn
Cần tìm ngày thứ 45 thì =INDEX(DATE,45,1)
(Gợi ý thôi, bạn còn phải sửa lại đôi chút trong name nhé)


Chào bạn ! Bạn có thể cho mình xin file tương tự nhưng tính ngày làm việc trừ đi các ngày thứ 7, chủ nhật và ngày nghỉ lễ ? Cảm ơn bạn nhiều
 
Chào bạn ! Bạn có thể cho mình xin file tương tự nhưng tính ngày làm việc trừ đi các ngày thứ 7, chủ nhật và ngày nghỉ lễ ? Cảm ơn bạn nhiều

Bạn dùng hàm NETWORKDAYS nhé! Cú pháp:
Mã:
=NETWORKDAYS(start_date,end_date,holidays)
 
Nhân bài toán của Hoàng Danh, tôi mới chế ra một cái công thức để đếm xem trong một khoảng thời gian nào đó có bao nhiêu ngày thứ Bảy, bao nhiêu ngày Chủ Nhật.

Đây là công thức đếm ngày thứ Bảy của tôi:

=IF(OR(AND(WEEKDAY(Ngaydau)>4,WEEKDAY(Ngaycuoi)=7),AND(WEEKDAY(Ngaydau)>5,WEEKDAY(Ngaycuoi)<5)),INT((Ngaycuoi-Ngaydau+1)/7)+1,INT((Ngaycuoi-Ngaydau+1)/7))


Với NgaydauNgaycuối là hai ô chứa ngày đầu và ngày cuối trong khoảng thời gian cần tính.

Công thức này trên hơi dài, nhưng có thể dùng để "fill down" cho nhiều hàng, tôi đã dùng để kiểm tra số ngày thứ Bảy có trong mỗi tháng ở nhiều năm khác nhau.

Nếu như chỉ cần nhập 1 ô là Ngày Đầu, và 1 ô là Ngày cuối, thì đặt Name cho gọn hơn:

  • NgayDau = ô chứa giá trị ngày đầu của khoảng thời gian cần tính
  • NgayCuoi = ô chứa giá trị ngày cuối của khoảng thời gian cần tính
  • DAU = WEEKDAY(Ngaydau)
  • CUOI = WEEKDAY(Ngaycuoi)
  • TUAN = INT((Ngaycuoi-Ngaydau+1)/7)
Thì để đếm số ngày thứ Bảy có trong một khoảng thời gian, chỉ cần nhập ngắn như sau:
=IF(OR(AND(DAU>4, CUOI=7), AND(DAU>5, CUOI<5)), TUAN+1, TUAN)

Tương tự, công thức để đếm số ngày Chủ Nhật có trong một khoảng thời gian là:
=IF(OR(AND(DAU=1, CUOI<7), AND(DAU>5, CUOI<6)), TUAN+1, TUAN)

Nhờ các bạn góp ý thêm, bằng cách khác, hoặc làm cho nó ngắn hơn.
Dùng công thức hoàn toàn, không dùng VBA hoặc hàm UDF nha.
Hay... mình đánh giá cáo về độ chế công thức ý... dài cũng ok. cảm ơn ban
 

Bài viết mới nhất

Back
Top Bottom