Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Расширенный фильтр, макросом. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расширенный фильтр, макросом. (Макросы/Sub)
Расширенный фильтр, макросом.
Mark1976 Дата: Суббота, 30.04.2016, 16:36 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Всем привет. На просторах инета нашел макрос. Но в нем есть проблема. Он не работает как надо. Мне надо, чтобы во втором столбце В, поиск осуществлялся минимум по 2-м словам. Например: пишу анальгин амп, фильтр выдает анальгин амп. Пишу анальгин, фильтр выдает анальгин амп, анальгин таб. Буду благодарен за помощь.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim FilterCol As Integer
    Dim FilterRange As Range
    Dim CondtitionString As Variant
    Dim Condition1 As String, Condition2 As String

    If Intersect(Target, Range("Условия")) Is Nothing Then Exit Sub

    On Error Resume Next
    Application.ScreenUpdating = False
     
    'определяем диапазон данных списка
    Set FilterRange = Target.Parent.AutoFilter.Range
     
    'считываем условия из всех измененных ячеек диапазона условий
    For Each cell In Target.Cells
        FilterCol = cell.Column - FilterRange.Columns(1).Column + 1
         
        If IsEmpty(cell) Then
            Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol
        Else
            If InStr(1, UCase(cell.Value), " ИЛИ ") > 0 Then
                LogicOperator = xlOr
                ConditionArray = Split(UCase(cell.Value), " ИЛИ ")
            Else
                If InStr(1, UCase(cell.Value), " И ") > 0 Then
                    LogicOperator = xlAnd
                    ConditionArray = Split(UCase(cell.Value), " И ")
                Else
                    ConditionArray = Array(cell.Text)
                End If
            End If
            'формируем первое условие
            If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then
                Condition1 = ConditionArray(0)
            Else
                Condition1 = "=" & ConditionArray(0)
            End If
            'формируем второе условие - если оно есть
            If UBound(ConditionArray) = 1 Then
                If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then
                    Condition2 = ConditionArray(1)
                Else
                    Condition2 = "=" & ConditionArray(1)
                End If
            End If
            'включаем фильтрацию
            If UBound(ConditionArray) = 0 Then
                Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1
            Else
                Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1, _
                    Operator:=LogicOperator, Criteria2:=Condition2
            End If
        End If
    Next cell
     
    Set FilterRange = Nothing
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: _123.xlsx(66Kb)
 
Ответить
СообщениеВсем привет. На просторах инета нашел макрос. Но в нем есть проблема. Он не работает как надо. Мне надо, чтобы во втором столбце В, поиск осуществлялся минимум по 2-м словам. Например: пишу анальгин амп, фильтр выдает анальгин амп. Пишу анальгин, фильтр выдает анальгин амп, анальгин таб. Буду благодарен за помощь.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim FilterCol As Integer
    Dim FilterRange As Range
    Dim CondtitionString As Variant
    Dim Condition1 As String, Condition2 As String

    If Intersect(Target, Range("Условия")) Is Nothing Then Exit Sub

    On Error Resume Next
    Application.ScreenUpdating = False
     
    'определяем диапазон данных списка
    Set FilterRange = Target.Parent.AutoFilter.Range
     
    'считываем условия из всех измененных ячеек диапазона условий
    For Each cell In Target.Cells
        FilterCol = cell.Column - FilterRange.Columns(1).Column + 1
         
        If IsEmpty(cell) Then
            Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol
        Else
            If InStr(1, UCase(cell.Value), " ИЛИ ") > 0 Then
                LogicOperator = xlOr
                ConditionArray = Split(UCase(cell.Value), " ИЛИ ")
            Else
                If InStr(1, UCase(cell.Value), " И ") > 0 Then
                    LogicOperator = xlAnd
                    ConditionArray = Split(UCase(cell.Value), " И ")
                Else
                    ConditionArray = Array(cell.Text)
                End If
            End If
            'формируем первое условие
            If Left(ConditionArray(0), 1) = "<" Or Left(ConditionArray(0), 1) = ">" Then
                Condition1 = ConditionArray(0)
            Else
                Condition1 = "=" & ConditionArray(0)
            End If
            'формируем второе условие - если оно есть
            If UBound(ConditionArray) = 1 Then
                If Left(ConditionArray(1), 1) = "<" Or Left(ConditionArray(1), 1) = ">" Then
                    Condition2 = ConditionArray(1)
                Else
                    Condition2 = "=" & ConditionArray(1)
                End If
            End If
            'включаем фильтрацию
            If UBound(ConditionArray) = 0 Then
                Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1
            Else
                Target.Parent.Range(FilterRange.Address).AutoFilter Field:=FilterCol, Criteria1:=Condition1, _
                    Operator:=LogicOperator, Criteria2:=Condition2
            End If
        End If
    Next cell
     
    Set FilterRange = Nothing
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Mark1976
Дата добавления - 30.04.2016 в 16:36
TimSha Дата: Суббота, 30.04.2016, 16:44 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 74 ±
Замечаний: 0% ±

Excel 2013 Pro +
В вашем файле нет ни ваших условий отбора, ни макроса... ;)
ps И вернитесь к первоисточнику - там подробно описано что да как фильтровать.


"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)

Сообщение отредактировал TimSha - Суббота, 30.04.2016, 16:49
 
Ответить
СообщениеВ вашем файле нет ни ваших условий отбора, ни макроса... ;)
ps И вернитесь к первоисточнику - там подробно описано что да как фильтровать.

Автор - TimSha
Дата добавления - 30.04.2016 в 16:44
Mark1976 Дата: Суббота, 30.04.2016, 16:52 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
TimSha, файл тогда весит больше 100кб. Как же быть тогда?
 
Ответить
СообщениеTimSha, файл тогда весит больше 100кб. Как же быть тогда?

Автор - Mark1976
Дата добавления - 30.04.2016 в 16:52
TimSha Дата: Суббота, 30.04.2016, 16:56 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 74 ±
Замечаний: 0% ±

Excel 2013 Pro +
21521х3=.....
Надо столько пустых строк в пустом файле?!


"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Ответить
Сообщение21521х3=.....
Надо столько пустых строк в пустом файле?!

Автор - TimSha
Дата добавления - 30.04.2016 в 16:56
Mark1976 Дата: Суббота, 30.04.2016, 17:01 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
TimSha, перевложил
К сообщению приложен файл: 12345_.xlsm(21Kb)
 
Ответить
СообщениеTimSha, перевложил

Автор - Mark1976
Дата добавления - 30.04.2016 в 17:01
TimSha Дата: Суббота, 30.04.2016, 17:14 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 457
Репутация: 74 ±
Замечаний: 0% ±

Excel 2013 Pro +
Все работает.
И, пожалуйста, дочитайте все до конца о "Суперфильтре на VBA" - и комментарии... ;)
К сообщению приложен файл: PL_12345_.xlsm(21Kb)


"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)

Сообщение отредактировал TimSha - Суббота, 30.04.2016, 17:15
 
Ответить
СообщениеВсе работает.
И, пожалуйста, дочитайте все до конца о "Суперфильтре на VBA" - и комментарии... ;)

Автор - TimSha
Дата добавления - 30.04.2016 в 17:14
Mark1976 Дата: Суббота, 30.04.2016, 17:18 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 331
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
TimSha, теперь понял. Спасибо. С наступающими. Статью прочитаю сейчас.
 
Ответить
СообщениеTimSha, теперь понял. Спасибо. С наступающими. Статью прочитаю сейчас.

Автор - Mark1976
Дата добавления - 30.04.2016 в 17:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Расширенный фильтр, макросом. (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!