Определение високосного года

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

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

 = IF (MOD (YEAR (A1), 4) =  0, «Прыжок», «Обычный») 

Формула будет работать для всех дат в этом столетии (с 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", "  Обычный ") = ЕСЛИ (МЕСЯЦ (ДАТА (ГОД (A1), 2,29)) = 2," Прыжок "," Обычный ") = ЕСЛИ (ДЕНЬ (ДАТА (ГОД (A1), 2,29)) = 29  , "Leap", "Regular") = IF (DAY (DATE (YEAR (A1), 3,0)) = 29, "Leap", "Regular") 

Любой из методов описанные до сих пор работают нормально для любой даты, поддерживаемой Excel, за одним исключением. Те, которые используют функцию ДАТА (последние три показаны выше), не будут работать, если дата в ячейке 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 года:

 Функция IsLeap1 (c As Range) As Boolean YearNo = Year (c  .Value) Если YearNo Mod 100 = 0 Then IsLeap1 = ((YearNo  100) Mod 4 = 0) Else IsLeap1 = (YearNo Mod 4 = 0) End IfEnd Function 

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

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

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

 Функция IsLeap2 (c As Range) IsLeap2 = IsDate ("2/29/" & Year (  c.Value)) End Function 

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

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

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

 https:// chandoo.org/wp/2012/02/29/check-leap-year-using-excel/е>

Оцените статью
Frestage.ru
Добавить комментарий