Когда НГ - тут уже всё стало в общем-то понятно! Используя ваши подсказки, попытался создать формулу для подсчёта количества дней до дня рождения (дату поставил произвольно), в середине года. После наступления ДР, получилось (вроде бы) 365 дней. А если год впереди високосный? Посмотрите, пожалуйста, что можно заменить, чтобы формула автоматом учитывала кол-во дней в зависимости от года:
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2);365)
Уважаемые знатоки!
Когда НГ - тут уже всё стало в общем-то понятно! Используя ваши подсказки, попытался создать формулу для подсчёта количества дней до дня рождения (дату поставил произвольно), в середине года. После наступления ДР, получилось (вроде бы) 365 дней. А если год впереди високосный? Посмотрите, пожалуйста, что можно заменить, чтобы формула автоматом учитывала кол-во дней в зависимости от года:
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ())+1;6;29)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2);365)
что можно заменить, чтобы формула автоматом учитывала кол-во дней в зависимости от года
Ничего менять не надо. Всё работает и в високосном году. [p.s.]У Вас конечный результат немного отличается от заявленного в теме. Надо было написать "Осталось дней до дня рождения + год".[/p.s.]
что можно заменить, чтобы формула автоматом учитывала кол-во дней в зависимости от года
Ничего менять не надо. Всё работает и в високосном году. [p.s.]У Вас конечный результат немного отличается от заявленного в теме. Надо было написать "Осталось дней до дня рождения + год".[/p.s.]DrMini
Сообщение отредактировал DrMini - Четверг, 14.10.2021, 07:26
Знаете, я попробовал экспериментировать со своей формулой. Вместо указанной даты в июне следующего года ставил и 13.10 и 14.10 за этот год. А результат был почему-то один и тот же - 365 дней! Получается формула не работает правильно?
DrMini
Знаете, я попробовал экспериментировать со своей формулой. Вместо указанной даты в июне следующего года ставил и 13.10 и 14.10 за этот год. А результат был почему-то один и тот же - 365 дней! Получается формула не работает правильно?Юрий_Ф
То, что мы делаем, завораживает! Кстати! Я не могу всем нравиться! И это взаимно!
Сообщение отредактировал Юрий_Ф - Четверг, 14.10.2021, 11:31
Вместо указанной даты в июне следующего года ставил и 13.10 и 14.10 за этот год
Дык ближайший високосный год 2024, а не как не 2022. По этому и выходит 365 дней. [p.s.]Для проверки работы формулы я тупо изменил дату на компьютере. Всё работает.[/p.s.]
Вместо указанной даты в июне следующего года ставил и 13.10 и 14.10 за этот год
Дык ближайший високосный год 2024, а не как не 2022. По этому и выходит 365 дней. [p.s.]Для проверки работы формулы я тупо изменил дату на компьютере. Всё работает.[/p.s.]DrMini
Да нет, это не для того, чтобы проверить учёт високосности, а чтобы посмотреть, как работает формула у самого дня рождения! А, выходит, что работает не совсем корректно! Ну, не может с разницей в один день, а результат одинаковый. Не могу понять, отчего!
DrMini
Да нет, это не для того, чтобы проверить учёт високосности, а чтобы посмотреть, как работает формула у самого дня рождения! А, выходит, что работает не совсем корректно! Ну, не может с разницей в один день, а результат одинаковый. Не могу понять, отчего!Юрий_Ф
То, что мы делаем, завораживает! Кстати! Я не могу всем нравиться! И это взаимно!
Задаём например ближайшее число: 1 ноября 2021г. Вставляем Вашу формулу (чуть, чуть подправленную):
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2))
И получается 18 дней. Всё в файле. Там же и примитивная проверка - расчёт разности дат.
Задаём например ближайшее число: 1 ноября 2021г. Вставляем Вашу формулу (чуть, чуть подправленную):
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ());11;1)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2))
И получается 18 дней. Всё в файле. Там же и примитивная проверка - расчёт разности дат.DrMini
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
Для формирования окончаний требуется три раза использовать основную формулу:
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДНИ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1));СЕГОДНЯ());"0;999;0"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
Для формирования окончаний требуется три раза использовать основную формулу:
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B1);ДЕНЬ(B1))-СЕГОДНЯ();"0;999;0"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
Всё отлично работает! Я чуть подкорректировал вашу формулу для периода! Т.е. чтобы в день рождения (14 октября) появлялся не 0, а 365 дней! Гляньте! Что не так?
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ())+1;10;14)-СЕГОДНЯ())>0);ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2))+365)
И! Эти формулы для этого года. А для середины следующего, допустим для даты 29.06?
Уважаемый DrMini
Всё отлично работает! Я чуть подкорректировал вашу формулу для периода! Т.е. чтобы в день рождения (14 октября) появлялся не 0, а 365 дней! Гляньте! Что не так?
Код
="До дня рождения остал"&ЕСЛИ(И(ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ()<>{1;21});"ось ";"ся ")&ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ())+1;10;14)-СЕГОДНЯ())>0);ЕСЛИ(((ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ())>0);ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ()&" д"&ВПР(ОСТАТ(ДАТА(ГОД(СЕГОДНЯ());10;14)-СЕГОДНЯ();20);{0;"ней":1;"ень":2;"ня":5;"ней"};2))+365)
И! Эти формулы для этого года. А для середины следующего, допустим для даты 29.06?Юрий_Ф
То, что мы делаем, завораживает! Кстати! Я не могу всем нравиться! И это взаимно!
Сообщение отредактировал Юрий_Ф - Четверг, 14.10.2021, 22:38
2я работает корректно! Но я так понял, что в ячейке В1 надо писать заданный день рождения. Это так? И второе. Непонятно, куда вставлять нижние формулы с =МИН?
Уважаемый Светлый!
1я формула пишет: #ИМЯ?
2я работает корректно! Но я так понял, что в ячейке В1 надо писать заданный день рождения. Это так? И второе. Непонятно, куда вставлять нижние формулы с =МИН?Юрий_Ф
То, что мы делаем, завораживает! Кстати! Я не могу всем нравиться! И это взаимно!
Сообщение отредактировал Юрий_Ф - Четверг, 14.10.2021, 22:35
Нет, что-то в моей формуле всё же не так! Да, для даты 14.10 считает верно, но для прошедшего времени (от 14.10.21 до 13.10.22) пишет 365 дней тоже!
PS. В общем, придётся после дня рождения в этом году добавлять в формулу к году +1, а после НГ, эту добавку убирать! Я думал, что Ecxel можно озадачить ЭТО делать автоматом!
Ув. DrMini!
Нет, что-то в моей формуле всё же не так! Да, для даты 14.10 считает верно, но для прошедшего времени (от 14.10.21 до 13.10.22) пишет 365 дней тоже!
PS. В общем, придётся после дня рождения в этом году добавлять в формулу к году +1, а после НГ, эту добавку убирать! Я думал, что Ecxel можно озадачить ЭТО делать автоматом!Юрий_Ф
То, что мы делаем, завораживает! Кстати! Я не могу всем нравиться! И это взаимно!
Сообщение отредактировал Юрий_Ф - Четверг, 14.10.2021, 23:51
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))/{1;10});10)=1))=1;"ся ";"ось ")&МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))&" д"&ВПР(ПРАВБ(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))+9)+5*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(B2);ДЕНЬ(B2))-СЕГОДНЯ();"0;999;999"))/10);10)=1);{0;"ень":1;"ня":4;"ней"};2)
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(A2);ДЕНЬ(A2))-СЕГОДНЯ();"0;999;999"))/{1;10});10)=1))=1;"ся ";"ось ")&A2-СЕГОДНЯ()&" д"&ЕСЛИ(--ПРАВБ(A2-СЕГОДНЯ();2)<20;ПРОСМОТР(--ПРАВБ(A2-СЕГОДНЯ();2);{0;1;2;5};{"ней";"ень";"ня";"ней"});ПРОСМОТР(--ПРАВБ(A2-СЕГОДНЯ());{0;1;2;5};{"ней";"ень";"ня";"ней"}))
Вроде всё работает нормально кроме дня который равняется 1год+1день. Причём показывает и прошедшие даты со знаком - Вдруг пригодится куда.
Вот ещё вариант с началом от Светлый, :
Код
="До дня рождения остал"&ЕСЛИ(СУММ({1;2}*(ОСТАТ(ОТБР(МИН(--ТЕКСТ(ДАТА(ГОД(СЕГОДНЯ())+{0;1};МЕСЯЦ(A2);ДЕНЬ(A2))-СЕГОДНЯ();"0;999;999"))/{1;10});10)=1))=1;"ся ";"ось ")&A2-СЕГОДНЯ()&" д"&ЕСЛИ(--ПРАВБ(A2-СЕГОДНЯ();2)<20;ПРОСМОТР(--ПРАВБ(A2-СЕГОДНЯ();2);{0;1;2;5};{"ней";"ень";"ня";"ней"});ПРОСМОТР(--ПРАВБ(A2-СЕГОДНЯ());{0;1;2;5};{"ней";"ень";"ня";"ней"}))
Вроде всё работает нормально кроме дня который равняется 1год+1день. Причём показывает и прошедшие даты со знаком - Вдруг пригодится куда.DrMini
Т.е. в ячейке А2 следует ставить интересующую дату?
Да. Но если так не надо, то можете в формуле заменить А2 на нужную Вам дату в формате "ДД.MM.ГГГГ" для даты конкретного года или "ДД.ММ" для текущего года.
Т.е. в ячейке А2 следует ставить интересующую дату?
Да. Но если так не надо, то можете в формуле заменить А2 на нужную Вам дату в формате "ДД.MM.ГГГГ" для даты конкретного года или "ДД.ММ" для текущего года.DrMini