Боб интересуется, есть ли простой способ определить, является ли год определенной даты високосным, для целей расчета процентов и количества дней начисления сложных процентов.

Все мы знаем, что если год делится на 4, то это високосный год, верно? На самом деле это неправильно. Таким образом, вы не можете просто разделить номер года на 4, как показано ниже, чтобы определить, является ли он високосным:

=IF(MOD(YEAR(A1), 4) = 0, "Leap", "Regular")

Формула будет работать для всех дат в этом столетии (с 2000 по 2099 годы), но не будет работать надежно за пределами этого диапазона. Причина в том, что «делится на 4» — не единственный тест на високосный год. Если год — столетний (делится на 100), то это високосный год, только если он делится на 400. Таким образом, 2000 год является високосным, а 2100 год — нет.

Если вам нужен надежный способ определения даты в високосном году, ваша формула должна быть более сложной:

=IF(OR(AND(MOD(YEAR(A1),4)=0,MOD(YEAR(A1),100)>0), MOD(YEAR(A1),400)=0),"Leap","Regular")

Обратите внимание, что это единственная формула; здесь он представлен в двух строках, поэтому полностью умещается на экране. Формула проверяет все три условия, которые необходимы, чтобы определить, попадает ли дата в високосный год.

Конечно, другой подход — просто выяснить, есть ли в данном году 29 февраля. Для выполнения этой задачи можно использовать любое количество формул:

=IF(DAY(EOMONTH("1Jan"&YEAR(A1),1))=29, "Leap", "Regular")

=IF(MONTH(DATE(YEAR(A1),2,29))=2, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),2,29))=29, "Leap", "Regular")

=IF(DAY(DATE(YEAR(A1),3,0))=29, "Leap", "Regular")

Любой из описанных до сих пор методов работает нормально для любой даты, поддерживаемой Excel, за одним исключением. Те, которые используют функцию DATE (последние три показаны выше), не будут работать, если дата в ячейке A1 находится в 1900 году. Они всегда будут возвращать, что 1900 — високосный год, даже если это не так. (Интересно, что функция EOMONTH не вызывает в этом отношении той же проблемы, что и функция DATE.)

Если вам нужно работать с датами, предшествующими тем, которые поддерживаются Excel (до 1 января 1900 г.), тогда вам нужно будет работать с годами напрямую, а не извлекать год из даты Excel. Вариант формулы с тремя тестами будет работать нормально, если ячейка A1 содержит только год:

=IF(OR(AND(MOD(A1,4)=0,MOD(A1,100)>0),MOD(A1,400)=0),"Leap","Regular")

Вы также можете создать пользовательскую функцию, которая будет проверять дату.

Этот подход будет работать нормально независимо от того, содержит ли ячейка значение даты или текстовое значение для даты. (Если вы вводите в ячейку неподдерживаемое значение даты, например 1/1/1896, тогда Excel обрабатывает запись как текстовое значение, а не пытается проанализировать ее как дату.) Следующий пример правильно работает со всеми датами, поддерживаемыми VBA, который находится в диапазоне от 100 до 9999 года:

Function IsLeap1(c As Range) As Boolean     YearNo = Year(c.Value)

If YearNo Mod 100 = 0 Then        IsLeap1 = ((YearNo \ 100) Mod 4 = 0)

Else        IsLeap1 = (YearNo Mod 4 = 0)

End If End Function

Чтобы использовать функцию на рабочем листе, вы должны ввести такую ​​формулу:

=IF(IsLeap1(A1),"Leap", "Regular")

Следующий однострочный макрос работает с помощью уловки определения, есть ли 29 февраля в рассматриваемом году:

Function IsLeap2(c As Range)

IsLeap2 = IsDate("2/29/" & Year(c.Value))

End Function

На макрос ссылаются на вашем листе так же, как на предыдущий макрос:

=IF(IsLeap2(A1),"Leap", "Regular")

Если вам нужны более творческие способы определить, находится ли дата в високосном году, ознакомьтесь с этой статьей:

http://chandoo.org/wp/2012/02/29/check-leap-year-using-excel/

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (9978) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365.