Страницы: 1
RSS
Автофильтр через макрос
 
Доброго дня пятницы всем добрым людям...

По поиску не нашел. Проблема, вероятно, плевая, но Excel упорно меня игнорирует. Не фильтрует данные. Нужно по столбцу "I" убрать все "44.01". И вот это:
Код
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>" & "44.01", Operator:=xlAnd
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>44.01", Operator:=xlFilterValues
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>44.01", Operator:=xlAnd 'записал рекордер, но вручную не работает!
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>" & Range("T1"), Operator:=xlAnd
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>" & "44.01", Operator:=xlFilterValues
не работает. НО и не ругается. А это:
Код
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:=Array("43", "50.01", "64.01", "70.01"), Operator:=xlFilterValues 'записал рекордер, вручную работает!
работает. Но не подходит из-за того, что набор всегда разный.
Фильтрую карточку счета из 1С. Удалять в цикле по строчкам или в массиве - долго, таблица слишком большая. А автофильтр делает это на ура, и быстро... только код не могу рабочим сделать.
Изменено: AlexTM - 25.09.2015 15:41:52
 
AlexTM, формируйте массив из одного элемента:
Код
x = 44.01 'например
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:=Array(Trim(Str(x))), Operator:=xlFilterValues

 
Оказалось, что и массив не нужен  8)
Код
x = 44.01 'например
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:=Trim(Str(x)), Operator:=xlFilterValues

 
Казанский,спасибо, оставить 44.01 работает, но вот убрать - к сожалению, нет.  :( То есть вот это:
Код
x = 44.01
ActiveSheet.Range("$A$1:$N$9").AutoFilter Field:=9, Criteria1:="<>" & Trim(Str(x)), Operator:=xlFilterValues 'xlAnd
не срабатывает.
Цель - избавиться от строк с 44.01..
 
Как вариант:
Код
x = "44.01"
Range("A1:N9").AutoFilter Field:=9, Criteria1:="<>*" & x, Operator:=xlOr, Criteria2:="<>" & x & "*"
Чем шире угол зрения, тем он тупее.
 
Бяда в том, что точка в коде интерпретируется как запятая на листе. В итоге фильтр срабатывает, но отфильтровывает не 44.01, 44,01
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал: Бяда в том, что точка в коде интерпретируется как запятая на листе.
Именно эту проблему я и предлагаю обойти, работая с текстовым значением.
Изменено: SAS888 - 30.09.2015 11:40:52
Чем шире угол зрения, тем он тупее.
 
Цитата
SAS888 написал: проблему я и предлагаю обойти
Понятно, но дело в том, что такой фильтр выберет и 44.01, и 144.01, и 1144.01 и т.п. Для частного случая срабатывает, конечно...
Изменено: Михаил Лебедев - 30.09.2015 11:40:59
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
А Вы проверяли? Посмотрите приложенный файл, в котором присутствуют и 144.01 и 44.011
Выполните макрос и посмотрите результат.
Чем шире угол зрения, тем он тупее.
 
Цитата
SAS888 написал: Вы проверяли?
Да, проверял.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
А какой результат работы моего макроса из поста №9?
Чем шире угол зрения, тем он тупее.
 
Цитата
Михаил Лебедев написал: Да, проверял.
Нет, извиняюсь, проверял, но не в Вашем файле. Просто делал/проверял параллельно свои изобридеи.
Да, Вы правы, Ваш макрос "прячет все 44.01 и не прячет 144.01 и 44.011 . Но согласитесь, что всё-таки Ваше решение - это частное решение :)
Ваша логика - это "не начинается с 44.01 ИЛИ не заканчивается на 44.01"
Например 44.01.44.01 он тоже спрячет :)
В любом случае, более короткого решения, наверно, нет.
Можно еще предложить поменять "." на "|", применить фильтр "<>44|01" и поменять обратно "|" на "."
ИЛИ
Радикально поменять все коды так, чтобы они оканчивались на "."
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал:
согласитесь, что всё-таки Ваше решение - это частное решение
Полностью согласен. Просто я не смог "заставить" vba правильно понимать строковое значение переменной с точкой при применении автофильтра.
Повторяю, что это решение "как вариант". Думаю, что в подавляющем большинстве случаев данный вариант вполне приемлем.
Чем шире угол зрения, тем он тупее.
 
SAS888,
Михаил Лебедев,
спасибо большое!
Все работает. Наконец-то...
Задача однотипная, потому обрабатывать другие случае, надеюсь, не придется..:)
Страницы: 1
Читают тему
Наверх