Это должно работать в любой день любого года в любой версии Excel до 2078 года (гораздо дольше в Excel 2007 или новее).
=SUM(IF(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0))
Обратите внимание, что я проверяю day = 1 или 16 со смещением 1 день (идея заключалась в том, чтобы обойти различные значения DAY()
в конце месяца).
{Формула массива ... Нажмите Ctrl+Shift+Enter
, чтобы зафиксировать}
[приложение]
Если вы не хотите включать текущий день (например, скажем, сегодня 15 августа), используйте это вместо этого:
=SUM(IF(DAY(ROW(OFFSET($A$1,TODAY()+1,0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16},1,0))
P.s. Я тестировал все даты с сегодняшнего дня по високосный 2016 и далее, и это работает. Все это проверяет номера строк, обрабатываемые функцией DAY()
как серийные даты, чтобы увидеть, равны ли они 1 или 16, но серийный номер смещен на +1, поэтому он действительно проверяет, является ли DAY()
[последним днем любого месяца] или 15. Если результат верный, добавьте 1, иначе добавьте 0.
[дополнительные дополнения]
Вот версии без массива, которые в остальном работают одинаково:
Включает текущий день:
=SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16}))
Исключает текущий день
=SUMPRODUCT(N(DAY(ROW(OFFSET($A$1,TODAY(),0,DATE(YEAR(TODAY()),12,31)-TODAY()+1)))={1,16}))
person
andy holaday
schedule
08.08.2012