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