Hướng dẫn em hàm tính năm nhuậm với ạ

Liên hệ QC

MoMo404

Thành viên mới
Tham gia
14/4/20
Bài viết
3
Được thích
1
93964412_659316788165837_4393326466599747584_n.jpg
 
Bạn có thể ghi rõ tiêu đề. Ví dụ: Hướng dẫn hàm tính số tháng, hàm tính năm nhuận chẳng hạn. Một điều cực kỳ quan trọng là thay vì up cái hình sao bạn không up cái file excel để người khác dễ giúp, bài này ít dữ liệu không sao, lỡ bài khác nhiều dữ liệu người giúp phải nhập liệu nửa mất thời gian. Bạn nhờ mà bạn còn không siêng để nhập liệu nửa thử hỏi người giúp bạn họ có siêng không.
 
Bạn có thể ghi rõ tiêu đề. Ví dụ: Hướng dẫn hàm tính số tháng, hàm tính năm nhuận chẳng hạn. Một điều cực kỳ quan trọng là thay vì up cái hình sao bạn không up cái file excel để người khác dễ giúp, bài này ít dữ liệu không sao, lỡ bài khác nhiều dữ liệu người giúp phải nhập liệu nửa mất thời gian. Bạn nhờ mà bạn còn không siêng để nhập liệu nửa thử hỏi người giúp bạn họ có siêng không.
dạ vâng.em cảm ơn ạ. Để em đăng lại ạ
 
Có hai cách để xác định năm nhuận.

Cách thứ nhất là dùng mẹo trong hàm date của Excel:
Mẹo là nếu Date(year, month, 0) thì nó trả về ngày trước tháng 'month'. Như vậy Date(2020, 3, 0) thì nó trả về ngày cuối của tháng 2. Xét nếu ngày này lớn hơn 28 thì là năm nhuận.
=IF( DAY( DATE(năm, 3, 0) ) >28, "năm nhuận", "không nhuận")
Biến đổi một chút, nếu năm khing nhuận thì ngày 29 tháng hai sẽ tràn sang tháng ba
=IF( MONTH( Date(năm, 2, 29) ) = 2, "nhuận", "không nhuận")
Hai công thức như nhau, chọn cái nào tuỳ theo góc nhín của bạn, cái nào dễ hiểu hơn (theo tôi thì cái thứ hai)

Cách thứ hai là cách khoa học, dùng con toán tính năm nhuận chính thống. Không chia chẵn cho 400 và chia chẵn cho 100 hoặc không chia chẵn cho 4 là không nhuận.
=IF(AND(MOD(năm, 400)<>0, OR(MOD(năm, 100)=0,MOD(năm,4)>0)), "không", "nhuận")

Còn vài cách tính khác, tỷ dụ như xét xem năm ấy có nhiều hơn 366 ngày. Nhưng những cách này chỉ cho vui chứ không thực nghiệm bằng hai cách trên.

Nếu dùng UDF thì có cách cổ điển mà hầu như các môn lập trình đều dạy:

Function SoNgayTrongThang(byVal nam As integer, byVal thang As integer) as integer
Select Case thang
Case 1, 3, 5, 7, 8, 10, 12
SoNgayTrongThang = 31
Case 4, 6, 9, 11
SoNgayTrongThang = 30
Case 2
SoNgayTrongThang = IIF( (nam Mod 400 <> 0) AND (nam Mod 100=0 OR nam Mod 4 <> 0), 28, 29)
End Select
End Function

Function NamNhuan(byVal nam As integer) As Boolean
NamNhuan = SoNgayTrongThang(nam, 2) > 28
Function
 
theo em đã từng làm thì: =if(mod(year(a3),4)=0,"năm nhuận","")
Cách của bạn sai. Công thức trên sẽ tính 2100 ra năm nhuận. Trên thực tế thì nó không.

Lý thuyết: các năm chia chẵn 100 không phải là năm nhuận, trừ phi chúng cũng chia chẵn cho 400.
Năm 2000 chia chẵn cho 100 nhưng cũng chia chẵn cho 400. Năm 2100 thì chỉ chia chẵn cho 100, và vì vậy khong phải nhuận.
 
Cách của bạn sai. Công thức trên sẽ tính 2100 ra năm nhuận. Trên thực tế thì nó không.

Lý thuyết: các năm chia chẵn 100 không phải là năm nhuận, trừ phi chúng cũng chia chẵn cho 400.
Năm 2000 chia chẵn cho 100 nhưng cũng chia chẵn cho 400. Năm 2100 thì chỉ chia chẵn cho 100, và vì vậy khong phải nhuận.
dạ công thức của em chỉ ứng dụng được trong thế kỉ 21 ạ. hichic vì em thấy cách đó nhanh gọn lẹ. em xin cám ơn góp ý ạ.
Bài đã được tự động gộp:

em xin cám ơn ạ. hay quá.
 
Đây là bài tập cho học sinh.
Bình thường thì bài tập tôi chỉ gợi ý và giúp tối đa là cái sườn của công thức.

Nhưng đây là bài tập liên quan đến kiến thức năm nhuần cho nên tôi chỉ cặn kẽ lý thuyết. Và "khuyến mãi" thêm cách áp dụng lý thuyết vào VBA.
Ở lập trình IF-THEN-ELSE sẽ ăn 9,5 điểm. Muốn 10 điểm thì phải select (code C cái này đẹp như mơ)
Có lẽ Excel 2019 với hàm SWITCH cũng ngon.
Cái link ở bài #9 chỉ nói cách làm thôi chứ về lý thyết thì chỉ có bài #15 ở link ấy chỉ dẫn được đôi chút.
 
Web KT
Back
Top Bottom