Excel предоставляет ряд функций, которые возвращают значение True или False в зависимости от содержимого ячейки. Например, ISBLANK возвращает True, если ячейка пуста, ISERR возвращает True, если ячейка содержит значение ошибки, а ISTEXT возвращает True, если ячейка содержит текст. Вы можете задаться вопросом, можно ли определить, содержит ли ячейка время.

Короткий ответ: нет, вы не можете — Excel не содержит функции, указывающей, содержит ли ячейка время. Причина проста: время и даты в Excel технически представляют собой не что иное, как числа. Дата — это любое число в диапазоне от 1 до 2958465, которые представляют даты с 01.01.1900 по 31.12.9999. Если вы добавите к числу десятичную часть, то это будет представлять время (0 — полночь, 0,25 — 6:00, 0,5 — полдень и т. Д.).

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

=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)<="D9"), "Time Format","Not Time Format")

Эта формула проверяет форматирование, примененное к ячейке B2. Если форматирование является одним из наиболее часто используемых форматов времени, он возвращает текст «Формат времени». Если используется другое форматирование, формула возвращает «Не формат времени».

Другой подход — проверить, является ли значение в ячейке B2 допустимым значением времени. Вы можете сделать это, используя следующую формулу:

=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")

Функция работает нормально, пока ячейка B2 содержит только время. Если ячейка содержит и дату, и время, функция всегда возвращает «Not a Time Entry».

Чтобы получить лучшее из обоих миров — проверку форматов и значения в ячейке, — подумайте о создании пользовательской функции в VBA. Причина проста: VBA включает функцию IsDate, которая не только просматривает текущий диапазон числа, но также проверяет, отформатирован ли ячейка как дата. Следующий макрос предоставляет пример того, как вы можете создать такую ​​функцию:

Function IsTime(rng As Range) As Boolean     Dim sValue As String     sValue = rng.Cells(1).Text     On Error Resume Next     IsTime = IsDate(TimeValue(sValue))

On Error GoTo 0 End Function

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

=IsTime(B2)

Функция считывает, как отображается значение (используя свойство text объекта ячейки), а затем пытается преобразовать его с помощью функции TIMEVALUE. Если это дата (определяемая функцией IsDate), то отображается действительное время. Если это не дата, VBA генерирует ошибку, которую код запрограммирован игнорировать.

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (9699) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Checking_for_Time_Input [Проверка ввода времени].