Автофильтр в Excel VBA — дата равна работает (=31.07.2021) отличается от даты меньше (

#excel #vba #date #format #autofilter

Вопрос:

Я пытаюсь установить автофильтр даты в Excel VBA. Когда я пытаюсь войти:

 ActiveSheet.Range("$A$1:$P$100").AutoFilter Field:=13, Criteria1:="<" amp; "31.10.2020"
 

это не работает, но работает, когда я вхожу (в формате США).:

 ActiveSheet.Range("$A$1:$P$100").AutoFilter Field:=13, Criteria1:="<" amp; "10/31/2020"
 

Это хорошо работает и для меня (равно 31.10.20 ) тоже:

 ActiveSheet.Range("$A$1:$P$100").AutoFilter Field:=13, Criteria1:="=31.10.20"
 

Как я могу использовать оба критерия с одним форматом даты (США, немецкий)? А идея?

Ответ №1:

Числовые даты в Excel сохраняются в виде числа с Double точностью в ячейке, а затем форматируются в числовом формате «под» немецкий, американский или любой другой.

Поэтому самый безопасный способ-использовать это Double число в качестве критерия.

 Criteria1:="<" amp; CDbl(DateSerial(2020, 10, 31))
 

DateSerial создает реальную числовую дату и CDbl превращает ее в Double . В конце концов, это будет работать для любого числового формата, если даты в ячейке являются реальными числовыми датами (что настоятельно рекомендуется).

Ответ №2:

Попробуйте использовать последовательность ISO:

 ActiveSheet.Range("$A$1:$P$100").AutoFilter Field:=13, Criteria1:="<" amp; "2020/10/31"
 

Или попробуйте использовать выражение истинной даты:

 ActiveSheet.Range("$A$1:$P$100").AutoFilter Field:=13, Criteria1:="<#2020/10/31#"
 

Комментарии:

1. Это не работает для меня: таблица активов. Диапазон(«$A$1:$P$200″).Поле автофильтра:=14, Критерии 1:=»=» и CDbl(дата(2020, 7, 31)) Таблица активов. Диапазон(«$A$1:$P$200″).Поле автофильтра:=14, Критерии 1:=»=» amp; «2020/10/31″ Только с » Выглядит как «=» и »

2. Возможно, вам нужно истинное выражение даты.

Ответ №3:

Поскольку мне нужно было быстрое решение, я разделил его на два способа:

Если smaller_greater = True = True, то Таблица активов.Диапазон(Ячейки(1, 1), Ячейки(количество строк, количество столбцов)).Поле автофильтра:=13, Критерии 1:=»Диапазон(Ячейки(1, 1), Ячейки(количество строк, количество столбцов)).Поле автофильтра:=13, Критерии 1:=Стандартное значение Заканчивается, Если

Для меня это прекрасно работает. (Значение Smaller_greater основано на значении, которое я получаю, например »