Có bao nhiêu ngày 15 (tây) ở giữa 2 thời điểm? (4 người xem)

Liên hệ QC

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

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,912
Tôi có bài toán thế này:
- Cột A là ngày bắt đầu
- Cột B là ngày kết thúc
(đương nhiên ngày bắt đầu <= ngày kết thúc)
Yêu câu:
- Không được dùng công thức mãng, hãy tính xem giữa 2 thời điểm trên có bao nhiêu ngày 15? (15 tây)
Lấy ví dụ:
- Ngày bắt đầu = 13/6/2008
- Ngày kết thức = 2/11/2008
Vậy số ngày 15 sẽ bao gồm: 15/6/2009, 15/7/2009, 15/8/2009, 15/9/200915/10/2009... Tổng cộng là 5 ngày (kết quả)
 

File đính kèm

Tôi có bài toán thế này:
- Cột A là ngày bắt đầu
- Cột B là ngày kết thúc
(đương nhiên ngày bắt đầu <= ngày kết thúc)
Yêu câu:
- Không được dùng công thức mãng, hãy tính xem giữa 2 thời điểm trên có bao nhiêu ngày 15? (15 tây)
Lấy ví dụ:
- Ngày bắt đầu = 13/6/2008
- Ngày kết thức = 2/11/2008
Vậy số ngày 15 sẽ bao gồm: 15/6/2009, 15/7/2009, 15/8/2009, 15/9/200915/10/2009... Tổng cộng là 5 ngày (kết quả)
Tạm thời em dùng ct thức dưới, hơi bị dài Bác đừng chê nhé.
Mã:
=DATEDIF(A2;B2;"m")+IF(AND(DAY(A2)<=15;DAY(B2)>15);1;IF(AND(DAY(A2)<=15;DAY(A2)>DAY(B2);DAY(B2)<=15);1;0))
 

File đính kèm

Lần chỉnh sửa cuối:
Tạm thời em dùng ct thức dưới, hơi bị dài Bác đừng chê nhé.
Mã:
=DATEDIF(A2;B2;"ym")+IF(AND(DAY(A2)<=15;DAY(B2)>15);1;IF(AND(DAY(A2)<=15;DAY(A2)>DAY(B2);DAY(B2)<=15);1;0))
Gần chính xác rồi đấy
Salam check lại trường hợp này:
StartDate = 2/3/2008
EndDate = 13/3/2009
Kết quả đúng là 12 (chứ không phải Zero)
 
Em quên mất thay "Ym" bằng "m" vậy.
 
Để em thử miếng nghe. Công thức ở D2:
=DATEDIF(DATE(YEAR(A2),MONTH(A2),15), DATE(YEAR(B2),MONTH(B2),15), "m") - (DAY(A2)>15) + (DAY(B2)>15)​
 
Để em thử miếng nghe. Công thức ở D2:
=DATEDIF(DATE(YEAR(A2),MONTH(A2),15), DATE(YEAR(B2),MONTH(B2),15), "m") - (DAY(A2)>15) + (DAY(B2)>15)
BNTT hãy kiểm tra trường hợp này:
StartDate = 5/12/2008
EndDate = 15/1/2009
Kết quả đúng là 2 (chứ không phải 1)
------------
Em quên mất thay "Ym" bằng "m" vậy.
Thay rồi vẫn chưa chính xác
 
BNTT hãy kiểm tra trường hợp này:
StartDate = 5/12/2008
EndDate = 15/1/2009
Kết quả đúng là 2 (chứ không phải 1)
Em sửa lại một tí ti:
=DATEDIF(DATE(YEAR(A2),MONTH(A2),15), DATE(YEAR(B2),MONTH(B2),15), "m") - (DAY(A2)>15) + (DAY(B2)>=15)​
Anh xem dùm còn trường hợp nào sai không.
 
Em sửa lại một tí ti:
=DATEDIF(DATE(YEAR(A2),MONTH(A2),15), DATE(YEAR(B2),MONTH(B2),15), "m") - (DAY(A2)>15) + (DAY(B2)>=15)
Anh xem dùm còn trường hợp nào sai không.
OK, chính xác
Thuật toán của tôi là:
- Với StartDate, nếu ngày <= 15 thì ta chuyển nó về ngày 1 tây tháng này, ngược lại, chuyển nó về 1 tây của tháng sau
- Với EndDate, nếu ngày <15 thì ta chuyển nó về ngày 1 tây tháng này, ngược lại, chuyển nó về 1 tây của tháng sau
- Cuối cùng dùng DATEDIF như các bạn đã làm
PHP:
=DATEDIF(DATE(YEAR($A2),MONTH($A2)+(DAY($A2)>15),1),DATE(YEAR($B2),MONTH($B2)+(DAY($B2)>=15),1),"M")
Phương pháp này có thể áp dụng để tìm ngày từ 1 đến 28 tây! Tuy nhiên với ngày từ 29 đến 31 thì hơi căng... Các bạn nghiên cứu xem
 
Phương pháp này có thể áp dụng để tìm ngày từ 1 đến 28 tây! Tuy nhiên với ngày từ 29 đến 31 thì hơi căng... Các bạn nghiên cứu xem

Cấm công thức mảng, chứ có cấm hàm tự tạo đâu ta (!?)

Duyệt bằng 1 vòng lặp là OK liền hà, khì, khì, . . . . :-= --=0 --=0
 
Với ngày 29 thì hơi phức tạp, còn ngày 30 và ngày 31 tôi dùng 2 công thức sau, không rõ có đúng không?
Ngày 30:
Mã:
=DATEDIF(A2,B2,"Y")*11-(DAY(A2)>30)+(DAY(B2)>=30)-INDEX({1,1,2,3,4,5,6,7,8,9,10,11},MONTH(A2))+INDEX({1,1,2,3,4,5,6,7,8,9,10,11},MONTH(B2))
Ngày 31
Mã:
=DATEDIF(A2,B2,"Y")*7-(DAY(A2)>31)+(DAY(B2)>=31)-INDEX({1,1,2,2,3,3,4,5,5,6,6,7},MONTH(A2))+INDEX({1,1,2,2,3,3,4,5,5,6,6,7},MONTH(B2))
 
Cấm công thức mảng, chứ có cấm hàm tự tạo đâu ta (!?)

Duyệt bằng 1 vòng lặp là OK liền hà, khì, khì, . . . . :-= --=0 --=0
Anh ơi... duyệt bằng 1 vòng lập thì chả khác nào công thức mãng ---> Dùng VBA nhưng chẳng động gì đến vòng lập mới hay chứ ---> Và đương nhiên tốc độ tính toán từ đó cũng nhanh hơn
 
Mã:
=DATEDIF(EOMONTH(A2,-(DAY(A2)<=15))-7,EOMONTH(B2,-(DAY(B2)<15)),"m")
Hoặc
Mã:
=DATEDIF(EOMONTH(A2,0)-7,EOMONTH(B2,0),"m")+(DAY(A2)<=15)-(DAY(B2)<15)
Về thuật toán thì 2 công thức này như nhau.
 
tôi có bài toán thế này:
- cột a là ngày bắt đầu
- cột b là ngày kết thúc
(đương nhiên ngày bắt đầu <= ngày kết thúc)
yêu câu:
- không được dùng công thức mãng, hãy tính xem giữa 2 thời điểm trên có bao nhiêu ngày 15? (15 tây)
lấy ví dụ:
- ngày bắt đầu = 13/6/2008
- ngày kết thức = 2/11/2008
vậy số ngày 15 sẽ bao gồm: 15/6/2009, 15/7/2009, 15/8/2009, 15/9/200915/10/2009... Tổng cộng là 5 ngày (kết quả)
em thì chỉ dùng công thức này thôi
PHP:
=sumproduct((1*(day(row(indirect(a2&":"&b2)))=15)))
 
Thêm 1 bài toán gần tương tự:

Trong khoảng n năm nào đó ( n= 1,2,3,. . . .) bắt đầu từ 01/01/2001 có bao nhiêu ngày 13 thuộc về thứ sáu?

(Chấp nhận hết mọi fương án miễn không trật & không VBA)
 
Lần chỉnh sửa cuối:
Trong khoảng n năm nào đó ( n= 1,2,3,. . . .) bắt đầu từ 01/01/2001 có bao nhiêu ngày 13 thuộc về thứ sáu?

(Chấp nhận hết mọi fương án miễn không trật & không VBA)
Bài này dễ mà sư phụ
PHP:
=SUMPRODUCT(1*(WEEKDAY(DATE(2001,ROW(INDIRECT("1:"&A1*12)),13))=6))
Với cell A1 là số n (sô năm)
 
trong khoảng n năm nào đó ( n= 1,2,3,. . . .) bắt đầu từ 01/01/2001 có bao nhiêu ngày 13 thuộc về thứ sáu?

(chấp nhận hết mọi fương án miễn không trật & không vba)
cái này được không bác
PHP:
=sumproduct((weekday(row(indirect(a1&":"&today())))=6)* (day(row(indirect(a1&":"&today())))=13))
VỚI A1=2001/01/01
 
cái này được không bác
PHP:
=sumproduct((weekday(row(indirect(a1&":"&today())))=6)* (day(row(indirect(a1&":"&today())))=13))
VỚI A1=2001/01/01
Cái này cho tốc độ chậm hơn cái trên vì mảng quét theo từng ngày, còn công thức bài 16 là quét theo từng tháng ---> Đàng nào mỗi tháng chỉ có duy nhất 1 ngày 13 nên chẳng cớ gì phải duyệt theo từng ngày
Ẹc... Ẹc...
 
Để em thử miếng nghe. Công thức ở D2:
=DATEDIF(DATE(YEAR(A2),MONTH(A2),15), DATE(YEAR(B2),MONTH(B2),15), "m") - (DAY(A2)>15) + (DAY(B2)>15)​
BNTT ơi, mình đã xem công thức của bạn nhưng vẫn không hiểu vì sao lại lấy: (Day(A2)>15)+(Day(B2)>=15).
công thức Day(A2)>15 để tìm điều gì vậy bạn.
 
Web KT

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

Back
Top Bottom