powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите с автофильтром
15 сообщений из 15, страница 1 из 1
Помогите с автофильтром
    #37752741
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня,
есть код:
Код: vbnet
1.
2.
3.
4.
5.
    ActiveSheet.Range("$A$2:$AN$6853").AutoFilter Field:=10, Criteria1:=Array( _
        "Астраханский объединенный филиал", "Волгоградский объединенный филиал", _
        "Краснодарский объединенный филиал", "Новороссийское Отделение", _
        "Ростовский-на-Дону объединенный филиал", "Сочинский объединенный филиал", _
        "Ставропольский объединенный филиал"), Operator:=xlFilterValues


в результате выполнения которого на листе останутся записи с указанными филиалами. А как сделать так что бы наоборот указанные филиалы отсутствовали, т.е. что то типа Criteria1 <> Array(....
т.е. как вместо равно поставить не равно? В справке написано, что можно:
The criteria (a string; for example, "101"). Use "=" to find blank fields, or use "<>" to find nonblank fields. If this argument is omitted, the criteria is All. If Operator is xlTop10Items, Criteria1 specifies the number of items (for example, "10").
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37753535
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для Excel2003 на основе хелпа к AutoFilter Object сделал пример инвертирования отфильтрованных строк с помощью кнопки. Каждое нажатие кнопки "Кувыркание фильтров" показывает строки настроенного фильтрования или скрывает их.
В 2007 и 2010 фильтры другие, поэтому надо дотачивать под конкретную версию.
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37773330
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sergeyvg, спасибо за ответ, но у меня как раз 2007 Excell и если честно я не смог разобраться в вашем примере.
Но так как ни кто не смог больше ответить, получается нет возможности установить фильтр на исключение значений? Странно...
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37773800
uux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
uux
Гость
А если попробовать поизвращаться:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Dim I as Long, J as Long
Dim SubsidiariesToDisplay(7000) as String  ' Отображаемые филиалы
Dim SubsidiariesToExclude(7) as String ' Исключаемые филиалы
Dim CurrSubsidiary as String ' Текущий филиал
Dim Found as Boolean
' Формируем массив исключаемых филиалов
SubsidiariesToExclude=Array("Астраханский объединенный филиал", "Волгоградский объединенный филиал", _
        "Краснодарский объединенный филиал", "Новороссийское Отделение", _
        "Ростовский-на-Дону объединенный филиал", "Сочинский объединенный филиал", _
        "Ставропольский объединенный филиал")
' Формируем массив отображаемых филиалов
For I=2 to 6853
    CurrSubsidiary=Cells(i,10).Value
    Found=False
    For J=1 to 7
        If CurrSubsidiary=SubsidiariesToExclude(J) Then
            ' Запрещенный филиал
            Found=True
        End If
    Next J
   If Not Found Then 
      ' Филиал не был найден среди запрещенных - добавляем его в основной список
      SubsidiariesToDisplay(I)=CurrSubsidiary
   End If
Next I
' Ну, и в  завершение...
 ActiveSheet.Range("$A$2:$AN$6853").AutoFilter Field:=10, Criteria1:=SubsidiariesToDisplay, Operator:=xlFilterValues
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37775434
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел Excel2007, там Help на автофильтр как в 2003, и данный пример работает.

Пояснения к примеру:
-колонка A отведена под рабочий фильтр, в ней будут проставляться служебные значения ("S" и "N");
-кнопкой "Установить исх.фильтр" устанавливаем исходную фильтрацию, далее можно добавить еще фильтрацию по колонкам. В примере в колонке G можно выбрать 1 или 2. Назовем полученный фильтр Nord;
-кнопка "Кувыркание фильтров" запоминает настроенный фильтр Nord и в видимых строках колонки A проставляет символ "N", а в невидимых символ "S", и настраивает уже свой фильтр на колонку A, назовем его South.

Таким образом кнопка "Кувыркание фильтров" либо сохраняет исходный фильтр (он может произвольно меняться "вручную" в процессе работы), отображает невидимые строки, скрывает видимые (т.е. инвертирует исходный фильтр), либо восстанавливает исходный фильтр.
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37929419
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток и большое спасибо за предыдущие ответы.
Обозначилась новая вводная, есть фильтр:
Код: vbnet
1.
2.
ActiveSheet.Range("$A$3:$F$18788").AutoFilter Field:=4, Criteria1:=( _
        "=*Astrakhan*")


который выбирает строки содержащие слово Astrakhan, а как програмно сделать фильтр на все остальные филиалы?
Я пытался сделать вот так:
Код: vbnet
1.
2.
ActiveSheet.Range("$A$3:$F$18788").AutoFilter Field:=4, Criteria1:=Array( _
        "=*Astrakhan*", "=*Volgograd*", "=*Krasnodar*", "=*Rostov*", "=*Stavropol*", "=*Novorossiysk*", "=*Elista*" )


не работает, т.е. в результате выполнения такого макроса остаются строки отфильтрованные по Элисте, т.е.
Код: vbnet
1.
"=*Elista*"

, т.е. фильтр проходит по всему масиву и в итоге остается последнее значение фильтра, а как сделать что бы отфильтровались все строки содержащие все значения массива?
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37929492
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не изменяет память, там сначала надо разрешить выделение нескольких значений. запишите макрорекордером
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37929494
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в указанном примере он тупо все перебрал по разу и на последнем остановился.
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37929536
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanBесли не изменяет память, там сначала надо разрешить выделение нескольких значений. запишите макрорекордером
каким образом? Excell позволяет выбрать только два значения с фильтрацией по критерию Содержит, а мне нужно именно Содержит, а не равно.
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37929568
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander-80578PlanBесли не изменяет память, там сначала надо разрешить выделение нескольких значений. запишите макрорекордером
каким образом? Excell позволяет выбрать только два значения с фильтрацией по критерию Содержит, а мне нужно именно Содержит, а не равно.используйте расширенный фильтр. туда сколько угодно условия можно запихать. а * и ? станут заменой команды содержит. берите пример тут . расширьте область условий в макросе и будет Вам счастье.
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37931262
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanB, спасибо за наводку.
есть вопрос:
Код: vbnet
1.
2.
3.
4.
ThisWorkbook.ActiveSheet.Range("a4:c65536").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("a1:c2"), _
    Unique:=False


в приведеннм примере условия отбора содержатся, как я понял, в той же книге, т.е. где то на листе в определенном диапазоне: CriteriaRange:=Range("a1:c2"), а можно ли условия отбора засунуть в код?
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37931347
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander-80578, да, можно. но нафига. не удобнее ли их вводить на листе? код привязан к изменению ячеек условий листа и срабатывает, когда туда вводятся значения.

в Вашем случае будет типа
Код: vbnet
1.
CriteriaRange:=("Вова:Петя:Маша")

ну или типа того =))
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37931391
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PlanBAlexander-80578, да, можно. но нафига. не удобнее ли их вводить на листе? код привязан к изменению ячеек условий листа и срабатывает, когда туда вводятся значения.

в Вашем случае будет типа
Код: vbnet
1.
CriteriaRange:=("Вова:Петя:Маша")

ну или типа того =))

не работает, вот мой код:
Код: vbnet
1.
2.
3.
4.
ActiveSheet.Range("$A$1:$F$65000").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=("*Astrakhan:*Volgograd:*Krasnodar:*Rostov:*Sochi:*Stavropol:*Novorossiysk:*Elista"), _
    Unique:=False


выдает ошибку: Неверная ссылка
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37931394
Alexander-80578
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и кстати, в таблице 6 колонок, как этот адвансет фильт понимает, что фильтровать нужно по колонке D?
...
Рейтинг: 0 / 0
Помогите с автофильтром
    #37931548
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, напишите так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
ThisWorkbook.ActiveSheet.Range("a4:c65536").AdvancedFilter _
    Action:=xlFilterInPlace, _
    CriteriaRange:=Range("a1:c2"), _
    Unique:=False
cells (2,1)="мск"
cells (2,2)="723"
cells (2,3)=""



только тогда первую часть кода удалите, иначе зациклится прога и вылетит
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите с автофильтром
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]