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

Вход

Регистрация

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

 

= Мир MS Excel/Autofilter Criteria - список значений из переменной - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Autofilter Criteria - список значений из переменной
Almost Дата: Воскресенье, 16.07.2023, 21:32 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
Добрый день!

Не удаётся передать в автофильтр список значений из строковой переменной. Визуально содержимое переменной идентично фиксированному критерию, но не воспринимается.
В чём может быть проблема?

Макрос работает только при активном листе "Sheet1" и поле C2.
К сообщению приложен файл: test.xlsb (21.0 Kb)
 
Ответить
СообщениеДобрый день!

Не удаётся передать в автофильтр список значений из строковой переменной. Визуально содержимое переменной идентично фиксированному критерию, но не воспринимается.
В чём может быть проблема?

Макрос работает только при активном листе "Sheet1" и поле C2.

Автор - Almost
Дата добавления - 16.07.2023 в 21:32
Hugo Дата: Воскресенье, 16.07.2023, 21:45 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3690
Репутация: 790 ±
Замечаний: 0% ±

365
Добрый день.
Вот так работает:
[vba]
Код

    For lDx = 1 To lDx 'цикл по массиву ошибок
        If aMist(lDx, 5) = sMis Then 'если попался выбранный код ошибки
            'sRows = sRows & ", """ & CStr(aMist(lDx, 1)) & """"
            sRows = sRows & "|" & aMist(lDx, 1)
            'Накопление строк с ошибкой"
        End If
    Next lDx
    
'    sRows = Right(sRows, Len(sRows) - 2) 'Обрезка первой запятой с пробелом
    sRows = Mid(sRows, 2) 'Обрезка
    
    wsRep.Select 'Фокус на отчёт
    wsRep.Range("A5:EA5").AutoFilter 'Снятие фильтров
   
    lDx = wsRep.Cells(wsRep.Rows.Count, "A").End(xlUp).Row 'Количество строк в отчёте
'    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=Array(sRows), Operator:=xlFilterValues
    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=Split(sRows, "|"), Operator:=xlFilterValues
    

[/vba]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДобрый день.
Вот так работает:
[vba]
Код

    For lDx = 1 To lDx 'цикл по массиву ошибок
        If aMist(lDx, 5) = sMis Then 'если попался выбранный код ошибки
            'sRows = sRows & ", """ & CStr(aMist(lDx, 1)) & """"
            sRows = sRows & "|" & aMist(lDx, 1)
            'Накопление строк с ошибкой"
        End If
    Next lDx
    
'    sRows = Right(sRows, Len(sRows) - 2) 'Обрезка первой запятой с пробелом
    sRows = Mid(sRows, 2) 'Обрезка
    
    wsRep.Select 'Фокус на отчёт
    wsRep.Range("A5:EA5").AutoFilter 'Снятие фильтров
   
    lDx = wsRep.Cells(wsRep.Rows.Count, "A").End(xlUp).Row 'Количество строк в отчёте
'    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=Array(sRows), Operator:=xlFilterValues
    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=Split(sRows, "|"), Operator:=xlFilterValues
    

[/vba]

Автор - Hugo
Дата добавления - 16.07.2023 в 21:45
Pelena Дата: Воскресенье, 16.07.2023, 21:58 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4555 ±
Замечаний: ±

Excel 365 & Mac Excel
Можно сформировать массив значений и его уже использовать в качестве критерия
[vba]
Код
    Dim arr(), ims As Long
    For lDx = 1 To lDx 'цикл по массиву ошибок
        If aMist(lDx, 5) = sMis Then 'если попался выбранный код ошибки
        
            ReDim Preserve arr(0 To ims)
            arr(ims) = CStr(aMist(lDx, 1))
            ims = ims + 1
        End If
    Next lDx
    
    wsRep.Select 'Фокус на отчёт
    wsRep.Range("A5:EA5").AutoFilter 'Снятие фильтров
   
    lDx = wsRep.Cells(wsRep.Rows.Count, "A").End(xlUp).Row 'Количество строк в отчёте
    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеМожно сформировать массив значений и его уже использовать в качестве критерия
[vba]
Код
    Dim arr(), ims As Long
    For lDx = 1 To lDx 'цикл по массиву ошибок
        If aMist(lDx, 5) = sMis Then 'если попался выбранный код ошибки
        
            ReDim Preserve arr(0 To ims)
            arr(ims) = CStr(aMist(lDx, 1))
            ims = ims + 1
        End If
    Next lDx
    
    wsRep.Select 'Фокус на отчёт
    wsRep.Range("A5:EA5").AutoFilter 'Снятие фильтров
   
    lDx = wsRep.Cells(wsRep.Rows.Count, "A").End(xlUp).Row 'Количество строк в отчёте
    wsRep.Range("A5:EA" & lDx).AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues
[/vba]

Автор - Pelena
Дата добавления - 16.07.2023 в 21:58
Almost Дата: Воскресенье, 16.07.2023, 22:15 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
Спасибо большое, всё работает!

Вариант со сплитом очень лаконичный.
 
Ответить
СообщениеСпасибо большое, всё работает!

Вариант со сплитом очень лаконичный.

Автор - Almost
Дата добавления - 16.07.2023 в 22:15
  • Страница 1 из 1
  • 1
Поиск:

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