Autofilter Criteria - список значений из переменной
Almost
Дата: Воскресенье, 16.07.2023, 21:32 |
Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация:
2
±
Замечаний:
0% ±
Excel 2016
Добрый день! Не удаётся передать в автофильтр список значений из строковой переменной. Визуально содержимое переменной идентично фиксированному критерию, но не воспринимается. В чём может быть проблема? Макрос работает только при активном листе "Sheet1" и поле C2.
Добрый день! Не удаётся передать в автофильтр список значений из строковой переменной. Визуально содержимое переменной идентично фиксированному критерию, но не воспринимается. В чём может быть проблема? Макрос работает только при активном листе "Sheet1" и поле C2. Almost
К сообщению приложен файл:
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]
Добрый день. Вот так работает: [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
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]
Можно сформировать массив значений и его уже использовать в качестве критерия [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
"Черт возьми, Холмс! Но как??!!" Ю-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
Ответить
Сообщение Спасибо большое, всё работает! Вариант со сплитом очень лаконичный. Автор - Almost Дата добавления - 16.07.2023 в 22:15