Đếm số ngày cuối tháng giữa 2 thời điểm

Liên hệ QC
PHP:
=IF(DAY(DATE(A1,3,0))-28,"Năm nhuận","")

Ở đây a tuan dùng thủ thuật một chút đó là
+ dùng hàm DATE(A1,3,0) nhưng ở đây atuan sử dụng ngày 0 tháng 3 năm lấy giá trị A1-> trả về giá trị ngày trước đó (ngày đầu tiên tháng 3 vì ko có ngày 0) -> là ngày 28/2/... (đối với năm ko nhuận) và 29/2/... (đối với năm nhuận)
+ Do đó -> DAY(DATE(A1,3,0))-28 là =0 (đối với năm ko nhuận) và =1 (đối với năm nhuận)
Đó chính là mấu chốt vấn đề, rất hay,
mặc dù atuan nói hạn chế là 2100 -> nhưng dùng vô tư đến khi ....... hết đời ... hic
Tuy vậy có thuật toán chuẩn tìm năm nhuận mà mọi ng đã đề nghị trên rùi,
 
Hỏi thêm:
Như vậy DAY(DATE(A1,3,0))-28 đã phải là Logical Expression chưa?
 
ptm0412 đã viết:
Hỏi thêm:
Như vậy DAY(DATE(A1,3,0))-28 đã phải là Logical Expression chưa?
ở đây DAY(DATE(A1,3,0))-28 trả về 0 hoặc 1; Mà excel lun xem 0 là tường ứng vơi False, còn 1 (hay các số khác 0) là True -> nó là Logical Expression rùi

* Vì thế nhiều trường hợp ta viết tắt không viết là =1 hay =0 (hay <>0) nữa
 
Lần chỉnh sửa cuối:
anhtuan1066 đã viết:
Còn số tuần trong năm thì sao nhỉ?
Tôi có một thắc mắc chưa rõ lắm về cách tính tuần, thế này nhé: nếu tuần bắt đầu từ thứ hai thì có phải nếu trong một tháng có 4 ngày thứ hai thì tháng đó có 4 tuần phải không, và nếu tháng đó có 5 thứ hai (mặc dù thứ 2 là ngày cuối tháng) thì tháng đó có được tính là 5 tuần không??:cc_confused:
Nếu quả thực như vậy thì có nghĩa là số tuần trong một năm bằng số ngày thứ 2 trong một năm đó?
Tôi có thắc mắc như vậy, mong các thầy, các anh và các bạn chỉ giáo.
Thanks.%#^#$
 
anhtuan1066 đã viết:
Còn số tuần trong năm thì sao nhỉ?
Công thức để tính số tuần trong năm:
A1= số năm
f(x)=IF(WEEKDAY(DATE(A1,1,1))*(DATE(A1,12,31)-DATE(A1,1,1)+1)=366,54,53)
tôi đã kiểm tra lại bằng cách so sánh kết quả với hàm WEEKNUM thì đúng đến năm 6799, hơn nữa thì tôi chưa thử tiếp.
Các anh, các bạn xem có đúng không nhé. Nếu đúng xin vote cho tôi nhé. THanks
 
Kiễm tra sơ bộ thấy chính xác lắm, cãm ơn bạn!
Còn tôi thì xài cái này:

Mã:
=INT((DATE(A1,12,31)-DATE(A1,1,1)-WEEKDAY(DATE(A1,12,31),2)+WEEKDAY(DATE(A1,1,1),2)+8)/7)
Mến
ANH TUẤN
 
anhtuan1066 đã viết:
Kiễm tra sơ bộ thấy chính xác lắm, cãm ơn bạn!
Còn tôi thì xài cái này:

Mã:
=INT((DATE(A1,12,31)-DATE(A1,1,1)-WEEKDAY(DATE(A1,12,31),2)+WEEKDAY(DATE(A1,1,1),2)+8)/7)
Mến
ANH TUẤN
Công thức này rất hay, hôm qua mình cũng đi theo hướng này nhưng mãi không ra, giờ đọc bài của bạn mình đã hiểu ra vấn đề.
Mình xin được rút gọn công thức một chút xíu nhé:
Mã:
=(DATE(A1,12,31)-WEEKDAY(DATE(A1,12,31),2)-DATE(A1,1,1)+WEEKDAY(DATE(A1,1,1),2))/7+1
Thanks.
Mr.Nanh
 
Lần chỉnh sửa cuối:
Tiện đây xin hỏi các bạn 1 vấn đề về ngày tháng như sau:
- Giả sử hôm nay là 01/01/2008 sau 6 tháng (kỳ hạn) là 01/07/2008
- Tương tự:
02/01/2008 sau 6 tháng (kỳ hạn) là 02/07/2008
31/01/2008 sau 6 tháng (kỳ hạn) là 31/07/2008
....
28/02/2008 sau 6 tháng (kỳ hạn) là 28/08/2008
29/02/2008 sau 6 tháng (kỳ hạn) là 29/08/2008
01/03/2008 sau 6 tháng (kỳ hạn) là 01/09/2008
...
30/03/2008....30/09/2008
31/03/2008....30/09/2008
---
31/10/2008....30/04/2008 (không thể 31/04...)
Nghĩa là kỳ hạn thanh toán là ngày như ngày đầu sau 6 tháng nhưng nếu ngày 31/03/2008 - thì không thể 31/09/2008 mà phải 30/09/2008
Nhờ các bạn giúp tôi công thức trên, nếu có thể dùng VBA.
Xin cám ơn!
 
ThuNghi đã viết:
Tiện đây xin hỏi các bạn 1 vấn đề về ngày tháng như sau:
...
30/03/2008....30/09/2008
31/03/2008....30/09/2008
---
31/10/2008....30/04/2008 (không thể 31/04...)
Nghĩa là kỳ hạn thanh toán là ngày như ngày đầu sau 6 tháng nhưng nếu ngày 31/03/2008 - thì không thể 31/09/2008 mà phải 30/09/2008
Nhờ các bạn giúp tôi công thức trên, nếu có thể dùng VBA.
Xin cám ơn!

chắc là thế này chứ
31/10/2008....30/04/2009 (không thể 31/04...)

thế này chắc phải dùng tính được tổng cộng ngày của 6 tháng tiếp theo, VBA chắc ra ngay, hic
 
Không cần VBA đầu, dùng hàm edate() là được.
Cấu trúc: EDATE(date,number of month)
--> B1=EDATE(A1,6)
Vì là hàm ngày tháng của Excel nên loại bỏ được vụ ngày 30, 31, 28, và 29 /2 của cả năm nhuận. Nếu number of month < 0 là tính lùi 1 số tháng.
 
Lần chỉnh sửa cuối:
Dùng hàm có sẵn trong Excel

ptm0412 đã viết:
Không cần VBA đầu, dùng hàm edate() là được.
Cấu trúc: EDATE(date,number of month)
--> B1=EDATE(A1,6)
Vì là hàm ngày tháng của Excel nên loại bỏ được vụ ngày 30, 31, 28, và 29 /2 của cả năm nhuận. Cái này mình giới thiệu rồi mà!

* Hàm EDATE thì phải cộng thêm addIN

* Nếu ko, thì sử dùng công thức sau cũng ngon, với A1 chứa ngày cần cộng thì ô kết quả dùng công thức như thế này:
PHP:
=DATE(YEAR(A1)+IF(MONTH(A1)+6>12,1,0),MONTH(A1)+IF(MONTH(A1)+6>12,-6,6),MIN(DAY(A1),DAY(DATE(YEAR(A1)+IF(MONTH(A1)+6>12,1,0),1+MONTH(A1)+IF(MONTH(A1)+6>12,-6,6),0))))
.
 
ThuNghi đã viết:
Tiện đây xin hỏi các bạn 1 vấn đề về ngày tháng như sau:
- Giả sử hôm nay là 01/01/2008 sau 6 tháng (kỳ hạn) là 01/07/2008
- Tương tự:
02/01/2008 sau 6 tháng (kỳ hạn) là 02/07/2008
31/01/2008 sau 6 tháng (kỳ hạn) là 31/07/2008
....
28/02/2008 sau 6 tháng (kỳ hạn) là 28/08/2008
29/02/2008 sau 6 tháng (kỳ hạn) là 29/08/2008
01/03/2008 sau 6 tháng (kỳ hạn) là 01/09/2008
...
30/03/2008....30/09/2008
31/03/2008....30/09/2008
---
31/10/2008....30/04/2008 (không thể 31/04...)
Nghĩa là kỳ hạn thanh toán là ngày như ngày đầu sau 6 tháng nhưng nếu ngày 31/03/2008 - thì không thể 31/09/2008 mà phải 30/09/2008
Nhờ các bạn giúp tôi công thức trên, nếu có thể dùng VBA.
Xin cám ơn!
ThuNghi dùng công thức này xem (với A1 là ngày đầu)
=IF(DAY(DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)))<>DAY(A1);DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)-1);DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)))
 
Cám ơn các Bác nhiều
phamduylong đã viết:
ThuNghi dùng công thức này xem (với A1 là ngày đầu)
=IF(DAY(DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)))<>DAY(A1);DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)-1);DATE(YEAR(A1);MONTH(A1)+6;DAY(A1)))
Nhưng trường hợp này chưa OK. Nếu:
A1 là 31/08/2007 thì B1 phải là 29/02/2008
A1 là 28/08/2008 thì B1 phải là 28/02/2009 --- cái này OK
A1 là 29/08/2008 thì B1 phải là 28/02/2009
A1 là 30/08/2008 thì B1 phải là 28/02/2009
A1 là 31/08/2008 thì B1 phải là 28/02/2009
 
Thử cái này xem có chính xác ko? (tôi mới thử sơ sơ)
Mã:
=DATE(YEAR(A1),MONTH(A1)+A2,MIN(DAY(DATE(YEAR(A1),MONTH(A1)+A2+1,0)),DAY(A1)))
Với A1 là ngày tháng năm, A2 là kỳ hạn
ANH TUẤN
 
anhtuan1066 đã viết:
Thử cái này xem có chính xác ko? (tôi mới thử sơ sơ)
Mã:
=DATE(YEAR(A1),MONTH(A1)+A2,MIN(DAY(DATE(YEAR(A1),MONTH(A1)+A2+1,0)),DAY(A1)))
Với A1 là ngày tháng năm, A2 là kỳ hạn
ANH TUẤN
Tôi mới chỉ test 2008 thấy OK, trước mắt là vậy. Test sau. Cám ơn AT1066 và các bạn nhiều.
 
Web KT

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

Back
Top Bottom