Hỏi về cách tính số ngày chẵn và lẻ trong 1 tháng bất kỳ (5 người xem)

Liên hệ QC

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

Tạm thời, có 1 cách không dùng VBA như sau:
A1: ngaydau
B1: ngaycuoi
C1=SUMPRODUCT((MOD(DAY(DaysRng),2)=0)*1)
O1=A1
O2=IF(O1=0,0,IF(O1+1<=$B$1,O1+1,0))
On=IF(Oi=0,0,IF(Oi+1<=$B$1,Oi+1,0)) i=n-1, n#10.000
ta có name tên DaysRng:
=OFFSET(Sheet1!$O$1:$O$10000,0,0,COUNTIF(Sheet1!$O$2:$O$10000,">0"),1)
Làm cho vui thôi, chớ làm công thì cực lắm và thê nào
1/ Tính ngày chẵn của ngày đầu -> cuối tháng đầu
2/ Tính ngày chẵn của ngày đầu tháng cuối - ngày cuối tháng cuối
Có hàm if để xét day(dau) > day(cuoi)
3/ Xét trong tg đó có ?? tháng 2 => Tính ra số tháng *15 or 14
4/ Vất vả quá.
 
Có thể dủng công thức tổng quát như sau:
2 thời điểm cho trước là A1 và B1 (B1>A1)
Gọi Sn là số năm của 2 mốc thời gian, tính bằng công thức Sn=year(B1)-year(A1)
Gọi Sa1 là số ngày chẵn từ đầu năm year(A1) đến ngày A1
công thức IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1))/2),15*(MONTH(A1)-1)+INT((DAY(A1))/2))
Gọi Sb1 là số ngày chẵn từ đầu năm year(B1) đến ngày B1
Công thức
IF(MONTH(B1)>2,15*(MONTH(B1)-1)-1+INT((DAY(B1))/2),15*(MONTH(B1)-1)+INT((DAY(B1))/2))
Ta có số ngày chẵn trong [A1,B1] là
Sn*179-Sa1+Sa2
Tức là
(YEAR(B1)-YEAR(A1))*179-IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1))/2),15*(MONTH(A1)-1)+INT((DAY(A1))/2))+IF(MONTH(B1)>2,15*(MONTH(B1)-1)-1+INT((DAY(B1))/2),15*(MONTH(B1)-1)+INT((DAY(B1))/2))
Công thức hơi dài nhưng do trong phương pháp tính có tính lặp lại Sa1 và Sb1 nên cũng không phức` tạp lắm
Tính được số ngày chẵn rồi, số ngày lẻ no problem
Tôi chưa kiểm tra kỹ lắm. bạn nào có thời gian test lại hộ
 
Son2006 đã viết:
Có thể dủng công thức tổng quát như sau:
2 thời điểm cho trước là A1 và B1 (B1>A1)
Gọi Sn là số năm của 2 mốc thời gian, tính bằng công thức Sn=year(B1)-year(A1)
Gọi Sa1 là số ngày chẵn từ đầu năm year(A1) đến ngày A1
công thức IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1))/2),15*(MONTH(A1)-1)+INT((DAY(A1))/2))
Gọi Sb1 là số ngày chẵn từ đầu năm year(B1) đến ngày B1
Công thức
IF(MONTH(B1)>2,15*(MONTH(B1)-1)-1+INT((DAY(B1))/2),15*(MONTH(B1)-1)+INT((DAY(B1))/2))
Ta có số ngày chẵn trong [A1,B1] là
Sn*179-Sa1+Sa2
Tức là
(YEAR(B1)-YEAR(A1))*179-IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1))/2),15*(MONTH(A1)-1)+INT((DAY(A1))/2))+IF(MONTH(B1)>2,15*(MONTH(B1)-1)-1+INT((DAY(B1))/2),15*(MONTH(B1)-1)+INT((DAY(B1))/2))
Công thức hơi dài nhưng do trong phương pháp tính có tính lặp lại Sa1 và Sb1 nên cũng không phức` tạp lắm
Tính được số ngày chẵn rồi, số ngày lẻ no problem
Tôi chưa kiểm tra kỹ lắm. bạn nào có thời gian test lại hộ

Có một chút lệch nào đó, bác sửa lại một xíu nhé.
Bác xem File sẽ thấy.

Thân!
 

File đính kèm

Ahhhhhhhh.... TÔI KHÔNG CAM TÂM...
Tôi có công thức này hình như sử dụng dc đây! Rất đơn giản.. nhưng ko biêt có chính xác ko vì tôi chỉ mới thử có 1 vài ngày, chủ yếu là những ngày vượt từ tháng có 31 ngày sang tháng khác (chẳng hạn từ 28-7 đến 5-8.. vân vân...)... Cũng đã kiểm tra từ đầu năm tới cuối năm... thấy..hình như đúng.. (Ai cha.. cũng chưa chắc)
Đây là tính số ngày lẻ
=SUM(IF(MOD(DAY((A1-1+ROW(INDIRECT("1:"&TRUNC(B1-A1)+1)))),2)=1,1,0))
Còn ngày chẳn thì... hoặc lấy tổng số ngày - kết quả vừa rồi.. còn ko thì:
=SUM(IF(MOD(DAY((A1-1+ROW(INDIRECT("1:"&TRUNC(B1-A1)+1)))),2)=0,1,0))
Ctrl + Alt + Enter nha!
hi... hi...
Nhờ bạn ttphong2007, bạn Hiếu và ThuNghi cùng các cao thủ khác kiểm tra giúp... và nếu nó đúng thì... có cách nào rút gọn dc nữa ko?
ANH TUẤN
 
Quá hay, đúng rồi, đã test với VBA và mảng, trong # 50 năm từ 1954 - nay.
{ROW(INDIRECT("1:"&TRUNC(B1-A1)+1)}, bác này dùng hàm indirect, mod quá siêu.
 
Mr Okebab đã viết:
Có một chút lệch nào đó, bác sửa lại một xíu nhé.
Bác xem File sẽ thấy.

Thân!
Lệch do toán trồng cây đây mà. Vậy nên công thức tính ngày Sa1 cần tinh71 như số ngày chẵn từ đầu năm đến trứoc ngày A1:IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1)-1)/2),15*(MONTH(A1)-1)+INT((DAY(A1)-1)/2))
Cuối cùng công thức là
(YEAR(B1)-YEAR(A1))*179-IF(MONTH(A1)>2,15*(MONTH(A1)-1)-1+INT((DAY(A1)-1)/2),15*(MONTH(A1)-1)+INT((DAY(A1)-1)/2))+IF(MONTH(B1)>2,15*(MONTH(B1)-1)-1+INT((DAY(B1))/2),15*(MONTH(B1)-1)+INT((DAY(B1))/2))
 
Tôi còn phát hiện ra những trò khác hay hơn từ công thức này:
-Có thể áp dụng công thức cho dử liệu nào có dạng là 1 chuổi sự kiện liên tục
-Từ đây có thể "đếm" bất cứ thứ gì tương tự như thế bằng cách tạo 1 "mãng giã lập"
-Sửa công thức đôi chút lại có 1 công thức khác có công dụng khác hơn
VD:
1/-Đếm xem có bao nhiêu ngày "chủ nhật" giữa 2 khoảng thời gian:
{=SUM(IF(WEEKDAY(..... =1,1,0))}
2/-Đếm xem có bao nhiêu ngày "thứ năm" giữa 2 khoảng thời gian:
{=SUM(IF(WEEKDAY(..... =5,1,0))}
3/-Đếm xem có bao nhiêu ngày 31 giữa 2 khoảng thời gian:
{=SUM(IF(DAY(..... =31,1,0))}
....
vân vân... và từa lưa hột dưa.. thứ gì ta có thể nghĩ ra...
Cám ơn bạn trandangkhoi đã đưa ra 1 chủ đề thú vị
ANH TUẤN
 
anhtuan1066 đã viết:
Tôi còn phát hiện ra những trò khác hay hơn từ công thức này:
-Có thể áp dụng công thức cho dử liệu nào có dạng là 1 chuổi sự kiện liên tục
-Từ đây có thể "đếm" bất cứ thứ gì tương tự như thế bằng cách tạo 1 "mãng giã lập"
-Sửa công thức đôi chút lại có 1 công thức khác có công dụng khác hơn
VD:
1/-Đếm xem có bao nhiêu ngày "chủ nhật" giữa 2 khoảng thời gian:
{=SUM(IF(WEEKDAY(..... =1,1,0))}
2/-Đếm xem có bao nhiêu ngày "thứ năm" giữa 2 khoảng thời gian:
{=SUM(IF(WEEKDAY(..... =5,1,0))}
3/-Đếm xem có bao nhiêu ngày 31 giữa 2 khoảng thời gian:
{=SUM(IF(DAY(..... =31,1,0))}
....
vân vân... và từa lưa hột dưa.. thứ gì ta có thể nghĩ ra...
Cám ơn bạn trandangkhoi đã đưa ra 1 chủ đề thú vị
ANH TUẤN

Rất cảm ơn về bài viết. Mình xin phụ họa vậy :

- Số ngày lẻ : {=SUM(IF(MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1)));2)=1;1;0))}

- Số ngày chẵn : {=SUM(IF(MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1)));2)=0;1;0))}

Thân!
 
Hay đấy, nhưng nên nhớ rằng do các bạn sử dụng số dòng ROW nên có những hạn chế :

Office 2003 : Tối đa 65.536 dòng = 05/06/2079 : đây là giới hạn của ngày cuối

Còn Office2007 Tối đa 1.048.576 dòng = 25/11/4770 : đây là giới hạn của ngày cuối

Thân!
 
Ngày lẻ
{=SUM(IF(MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1)));2) =1;1;0))}
Ngày chẵn
{=SUM(IF(MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1)));2) =1;0;0))}
Ta có thể dùng hàm sumproduct thay thế như sau
=SUMPRODUCT((MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1))),2)=1)*1)
=SUMPRODUCT((MOD(DAY(ROW(INDIRECT("A"&A1&":A"&B1))),2)=0)*1)
Dùng names rút gọn:
DaysRng=DAY(ROW(INDIRECT("A"&Sheet1!$A1&":A"&Sheet1!$B1)))
=> CT như sau:
=SUMPRODUCT((MOD(DaysRng,2) =1)*1)
=SUMPRODUCT((MOD(DaysRng,2) =0)*1)
 
các bác ơi em hỏi ngu tí bên e được nghỉ thứ 7 và cn thế nếu em muốn tính xem một tháng có bao nhiêu ngày ( em tính công đi làm mà ) thì e dùng hàm nào ! vì e đếm lịch thì có tháng là 22 ngày tháng 18 ngày tháng lại 23 ngày
 
các bác ơi em hỏi ngu tí bên e được nghỉ thứ 7 và cn thế nếu em muốn tính xem một tháng có bao nhiêu ngày ( em tính công đi làm mà ) thì e dùng hàm nào ! vì e đếm lịch thì có tháng là 22 ngày tháng 18 ngày tháng lại 23 ngày

Cái này dễ mà: Dùng hàm NETWORKDAYS
 
Web KT

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

Back
Top Bottom