Как преобразовать и сравнить строку даты с датой в Excel - PullRequest
5 голосов
/ 29 июля 2011
= "7/29/2011 12:58:00 PM" > NOW()

Мне бы хотелось, чтобы это выражение возвращало ЛОЖЬ, и все же оно возвращает ИСТИНА.

Я знаю, что могу разделить дату и время на дату и время и сложить их вместе следующим образом:

= DateValue("7/29/2011") + TimeValue("12:58:00 PM") > NOW()

Но, мне это кажется не элегантным.Мне нужна простая функция или подход, который выглядит красиво, и я уверен, что он там есть, но я просто не могу его найти.

Я также знаю, что есть функция VBA с именем CDate, которая может типизировать строкув свидание, и это было бы прекрасно.Но я не вижу, как вызвать функцию VBA в ячейке Excel.

Ответы [ 4 ]

7 голосов
/ 29 июля 2011

Умножьте строку на единицу, и сработает функция сравнения:

= 1*"7/29/2011 12:58:00 PM" > NOW()

Ответ на ваш вопрос тесно связан с комментарием @ Жан-Франсуа: почему дата интерпретируется Excel как текст, а не как дата?

Как только вы это выясните, вы сможете сделать сравнение.

Если это потому, что строка извлекается как текст, вы можете просто умножить ее на единицу, и тогда сработает функция сравнения. Но это применимо только в том случае, если формат строки является допустимым форматом даты / времени в ваших региональных настройках.

5 голосов
/ 29 июля 2011

Вы можете заключить вызов VBA в пользовательскую функцию:

Function ReturnDate(ByVal datestr As String) As Date
    ReturnDate = CDate(datestr)
End Function

, которую вы можете использовать точно так же, как формула на вашем листе.

4 голосов
/ 29 июля 2011

Я обновляю следующее из комментария к ответу:

Если у вас нет очень конкретной причины для этого (и сейчас я не могу думать ни о чем), даты (и другие значения) на самом деле не должны быть жестко закодированы в ячейках, как показывают строки. Жесткое кодирование строки делает ее невидимой и негибкой. Пользователь просто увидит TRUE или FALSE без указания того, что это значит.

Я бы просто поместил вашу дату 7/29/2011 12:58:00 PM в ячейку, например. A1, и установите формат ячейки в некоторый формат даты. Тогда вы можете сказать = A1 > NOW().

Вопреки ответам @ jonsca и @Tiago Cardoso, этот ответ не касается вашего конкретного вопроса, но опять же, то, что вы спрашиваете, кажется мне очень плохой практикой!

3 голосов
/ 29 июля 2011

Самый простой способ сделать это - создать функцию VBA, которая использует CDATE, и вернуть результаты сравнения. Затем вызовите функцию из ячейки Excel.

Функция VBA

Public Function compareDate(ByVal inputDate As String) As Boolean
  compareDate = CDate(inputDate) > Now()
End Function

Тогда в вашей таблице просто сделайте

=compareDate("YOUR DATE")

Функция вернет «FALSE», если она старше, и «TRUE», если она новее, чем Now ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...