Не работает формула по условию (с текущим временем)

Автор Сергей ISV, 6 февраля 2025, 16:18

0 Пользователи и 1 гость просматривают эту тему.

Сергей ISV

Здравствуйте!
Столкнулся с такой ситуацией:
в ячейке должно отображаться время, оставшееся до 10:30, а потом должна отображатся "*".
Вот формула:
=ЕСЛИ(("10:30"-ТДАТА())<"12:00";"10:30"-ТДАТА();"*")
Но "*" никогда не отображается.
Может кто сталкивался с подобной ситуацией?

mikekaganski

NOW (ТДАТА) возвращает дату - число дней, прошедших с 1899-12-30 00:00. На сегодня её результат - что-то вроде 45694,78.

"10:30" - это строка, а не время (и уж тем более не дата). Но при арифметических вычислениях - то есть при попытке отнять от этой строки число, возвращённое NOW - Calc по умолчанию попытается преобразовать эту строку в какое-то число; и вид этой строки позволит ему "узнать" формат времени и превратить это в число "часть дня" - то есть в ~0.41(6). В результате вычитания получится отрицательный результат вроде (-45694,...).

Но даже неважно, что Вы от строки, автопревращённой в число-время, отнимали число-дату. Ещё хуже, что Вы числовой результат сравниваете с другой строкой "12:00". И вот тут Calc не пытается строку преобразовать в число - потому что никакой арифметики с ней не делается. А при сравнении строка (любая!) всегда "больше" числа (любого). Можете попробовать формулу

=1e300<""
Короче, один из правильных вариантов (английские имена функций):

=IF(TIMEVALUE("10:30")-MOD(NOW();1)<TIMEVALUE("12:00");TIMEVALUE("10:30")-MOD(NOW();1);"*")
С уважением,
Михаил Каганский

Сергей ISV

Приведённая вами формула показывает отрицательное время, а символ "*" не показывает

mikekaganski

Ну естественно. Вы от 10:30 отнимаете, например, 17:14. Будет отрицательное время. И оно будет, конечно, меньше 12:00. Проверьте логику того, что Вы ожидаете, что от чего отнимаете.

Цитата: Сергей ISV от  6 февраля 2025, 16:18в ячейке должно отображаться время, оставшееся до 10:30, а потом должна отображатся "*".

=IF(TIMEVALUE("10:30")-MOD(NOW();1)>0;TIMEVALUE("10:30")-MOD(NOW();1);"*")
С уважением,
Михаил Каганский

Сергей ISV

Спасибо за разъяснения.
А элемент в формуле MOD(NOW();1) призван сделать число?

bigor

Цитата: Сергей ISV от  6 февраля 2025, 20:50MOD(NOW();1) призван сделать число?
нет, он от даты/времени оставляет только время 
Поддержать наш форум можно здесь

Сергей ISV