использование строковых значений для критериев DATE для COUNTIF в vba excel - PullRequest
0 голосов
/ 13 июня 2018

У меня есть 2 ячейки в диапазоне B: B, к которым я хочу применить формулу countif к VBA в Excel.

27/09/2017
13/06/2018

Я пробовал

MsgBox (WorksheetFunction.CountIf(Range("B:B"), "27/09/2017"))

Этовозвращает 0

MsgBox (WorksheetFunction.CountIf(Range("B:B"), CDate("27/09/2017")))

Это возвращает 1

Я пытаюсь выяснить, как можно заставить макрос возвращать оба значения даты через

MsgBox (WorksheetFunction.CountIf(Range("B:B"), "<=" & CDate("13/06/2018"))) 

Однако этовозвращает 0

Это, кажется, указывает на то, что я не совсем понимаю, как фильтровать даты в countif через строки.Можно ли поделиться альтернативой?

Я надеюсь реализовать текстовое поле ввода, где пользователь может ввести строку даты, которая затем применяет countif к

1 Ответ

0 голосов
/ 13 июня 2018

Вам необходимо сначала преобразовать дату в двойное число, чтобы сравнить фактическое значение даты независимо от формата.

 "<=" & CDbl(CDate("13/06/2018"))

Почему это так?
Если выобъединить string с date, как в "<=" & CDate("13/06/2018"), date преобразуется в string, и в результате получается "<=13/06/2018" (здесь дата является строкой, а не значением).

Если вы преобразуете date в double CDbl(CDate("13/06/2018"), результатом будет 43264, который является серийным номером, представляющим дату.Даты в Excel хранятся в виде серийных номеров, начиная с 1900-01-01, поэтому 2018-06-13 - это день 43264, так как 1900-01-01.

Так что с "<=" & CDbl(CDate("13/06/2018")) вы фактически сравниваете значение ячейки с "<=43264".Таким образом, вы сравниваете значение, а не текст.Это работает, потому что если ячейка отформатирована как date, Excel фактически сохраняет серийное значение, но показывает отформатированную строку для совместимости с пользователем.

Заключение
Если вы хотите всегда сравнивать датысравнивать их значения, а не строки.

Также см .: Как использовать даты и время в Excel .

...