Excel: проверьте ячейку на дату

Вкратце:

Я хочу проверить ячейку C21, если она содержит дату. Я не могу использовать VB, потому что он отключен GPO.

Использовал это из эта страница

D21 содержит следующее:

=WENN(ISTZAHL(DATWERT(C21));"date";"no date")
in english
=IF(ISNUMBER(DATEVALUE(C21))...

C21 это:

=HEUTE() # in english: =TODAY() Maybe other dates later, but allways in the correct format

но всегда возвращает "без даты"


person globus243    schedule 11.06.2015    source источник
comment
Я более внимательно изучил сайт, на который вы указали. Там указано, что если ваша дата отформатирована как текст, и вы создаете пример, где у вас есть дата, но не отформатирована как текст, очевидно, что это не сработает. Также вы прокомментировали, что это не столько проверка действительной даты, сколько проверка, есть ли что-нибудь вообще. Пожалуйста, поясните свой вопрос и добавьте несколько примеров данных, чтобы помочь нам понять. Также убедитесь, что вы поняли, на что ссылались, там много полезной информации.   -  person Máté Juhász    schedule 11.06.2015
comment
обновлю свой ответ в понедельник, так как формула хранится на работе, и я пока не могу получить к ней доступ   -  person globus243    schedule 12.06.2015


Ответы (7)


Используйте это: =IF(LEFT(CELL("format",C21))="D",..,..). Подробнее о CELL формуле здесь.

В вашем примере =TODAY() уже реальная дата, а не дата, сохраненная в виде текста, поэтому нет смысла использовать там DATEVALUE.

Обновлять

Вот несколько примеров дат и того, как CELL их распознать:

format          value           output
dd/mmmm/yyyy    12/June/2015    D1
dd/mm/yyyy      12/06/2015      D1
yyyy            2015            G
general         2015            G
dd/mm           12/06           D2
mmmm            June            G
dd mmmm yyyy    12 June 2015    G

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

person Máté Juhász    schedule 11.06.2015
comment
это смотря как эта 5 выглядит в ячейке :). если вы видите 5, это не будет считаться датой, но 05/01/1900 также имеет значение 5, и в этом случае оно будет считаться истинным. - person Máté Juhász; 11.06.2015
comment
Я получаю инвалида с этой формулой - person globus243; 11.06.2015
comment
что значит недействительный? формула еще не завершена, вам нужно указать свои значения вместо ...s. Также я не знаю, как, например, "format" необходимо изменить в немецкой среде, и, к сожалению, я не могу вам с этим помочь. - person Máté Juhász; 11.06.2015
comment
Интересно, не задумывался об этом использовании CELL(). Ваша формула может получить ложные срабатывания, если она отформатирована как время, не так ли? Кроме того, мне кажется, что если вы переходите от time к общему, затем к форматированию time, CELL("format",...) возвращает G вместо D8. Необходимо дальнейшее расследование ... - person dan; 11.06.2015
comment
@dan: Время против даты: это действительно вопрос точной настройки, которую можно было бы сделать с дополнительной информацией о проблеме: вы также можете использовать правильную цифру кода, просто проверяем, больше ли значение, чем 1 ... Переключение назад и вперед между числовыми форматами: даже пользователи не знают, является ли значение датой или нет, как вы ожидаете этого от Excel? - person Máté Juhász; 11.06.2015
comment
Это работает только для НЕКОТОРЫХ форматов данных, например для короткой даты, но не для других, например для длинной даты из раскрывающегося списка форматов. - person teylyn; 11.06.2015

Используйте эту формулу, выражение вернет ИСТИНА, если ячейка A1 содержит недопустимую дату.

=ISERROR(DATE(DAY(A1),MONTH(A1),YEAR(A1)))

Эта формула работает, оценивая каждую составную часть даты: ДЕНЬ, МЕСЯЦ и ГОД, а затем объединяя их с помощью функции ДАТА.

ISERROR перехватит любые ошибки, вернув TRUE (недопустимый), иначе FALSE (действительный).

Очевидно, что значение даты в ячейке (A1) должно содержать значения> = 01.01.1900.

Полезно для «условного форматирования».

person GBGOLC    schedule 14.03.2018
comment
Это решение, которое помогло мне определить проблему со значением, отличным от даты, в файле CSV с 1,5 миллионами строк. Другие ответы не работали правильно (в моем случае). - person JerryOL; 04.06.2018
comment
Функция ДАТА требует сначала года, затем месяца, а затем дня, поэтому указанная формула должна быть = ЕСТЬ ОШИБКА (ДАТА (ГОД (A1), МЕСЯЦ (A1), ДЕНЬ (A1))). - person rodedo; 18.10.2019
comment
Любое число в A1 будет обрабатываться как дата, независимо от того, отформатировано оно как таковое или нет. Если у меня 1234,56 в A1, формула в том виде, в котором она написана, неверна, что означает отсутствие ошибки, поэтому это дата. Действительно? - person Jon Peltier; 27.06.2020

Excel хранит даты в виде чисел. 1 - 1 января 1900 г.

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

Сегодня 11/06/2015 как дата и 42166 как число. Для потребителя электронной таблицы ячейка может быть отформатирована для отображения числа в любом числовом формате или в виде даты. Формулы Excel не могут определить, является ли число в этой ячейке датой.

Таким образом, не существует формулы Excel, которую можно было бы использовать в электронной таблице, которая сообщит вам, содержит ли ячейка A1 около 42166 виджетов или содержит дату 11 июня 2015 года.

person teylyn    schedule 11.06.2015
comment
пожалуйста, посмотрите ссылку в моем решении, EXCEL МОЖЕТ СКАЗАТЬ ВАМ ФОРМАТИРОВАНИЕ! - person Máté Juhász; 11.06.2015
comment
Это не столько проверка действительной даты, сколько проверка, есть ли что-нибудь вообще. - person globus243; 11.06.2015
comment
@ MátéJuhász, он не распознает все форматы даты как даты, даже если они выбраны в разделе даты диалогового окна форматирования чисел. - person teylyn; 11.06.2015

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

if(ISERROR(VALUE(c21)),"No Date", ----do staff for Date ----)

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

IFERROR(VALUE(c21),"No Date")

надеюсь, что это поможет,
Ура,
M

person Mahhdy    schedule 22.11.2019

используйте следующую формулу ...

=IF(NOT(ISERROR(DATEVALUE(TEXT(C21,"mm/dd/yyyy")))),"valid date","invalid date")

Думаю, это решит вашу проблему.

person Imran Khan    schedule 11.06.2015
comment
Что, если C21 содержит число 5. Это дата? - person teylyn; 11.06.2015
comment
это будет истинно для всех чисел, независимо от исходного форматирования. - person Máté Juhász; 11.06.2015
comment
Бесполезно: любое число в C21 будет обрабатываться как дата, независимо от того, отформатировано оно как таковое или нет. Если у меня 1234,56 в C21, формула в том виде, в котором она написана, неверна, что означает отсутствие ошибки, поэтому это дата. Если у меня 1996 год, это будет дата 18 июня 1905 года. Так что это не ожидаемый результат. - person Jon Peltier; 27.06.2020

Если значение является строкой, этот метод будет работать.

TEXT(DATE(VALUE(RIGHT(AI8,4)),VALUE(MID(TRIM(AI8),4,2)),VALUE(LEFT(AI8,2))),"dd.mm.yyyy") = AI8
person Giri    schedule 29.06.2019

Просто хотел добавить к обсуждению, что, хотя вы можете проверить дату (год; месяц; день), это даст вам ложные срабатывания, поскольку способ его работы заключается в том, что он, кажется, просто переносит значения, которые превышают логический предел, т.е. если у вас есть дата 99-12-35, это будет предполагать, что вы хотели написать 4 января 2000 года, поскольку это 35 - 31 день декабря. Другими словами, вы обнаружите некоторые ошибки, но не все. То же самое касается месяцев, превышающих 12.

person daniel    schedule 09.10.2019