Страницы: 1 2 След.
RSS
Отфильтрованную таблицу занести в массив
 
Всем привет!  
Нуждаюсь в вашей помощи, подскажите, пожалуйста - каким образом можно занести в массив отфильтрованную таблицу?  
Пример во вложении.  
Пробовал двумя вариантами, ничего не вышло.  
Решение вижу только одно - это переносить отфильтрованную таблицу на скрытый лист и уже из этого листа заносить в массив...  
Может возможно сразу в массив?  
Заранее всем благодарен!
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Я тоже разок помучился и сделал через доп.лист.    
Можно ведь под это дело создать новую книгу, туда скопировать данные, взять их в массив, книгу убить. Так исходная книга никак изменяться не будет, и скрытый лист туда добавлять не нужно.  
Но может быть есть и принципиально другие способы, не знаю - интересно бы узнать :)
 
Хм... В 2007 всё прекрасно работает. А в 2003 не работало!  
Т.е. в 2007 можно и без выгрузки взять видимые в массив.
 
Макросом из файла?  
У меня 2010 - не работает.  
Если в первом фильтре поставить "Тип1", тогда в массив попадают данные только по 7ю строку...
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Ну а какие другие? Если диапазон состоит из нескольких областей, то .Value возвращает массив значений только первой области. Значит, надо перебирать области, брать .Value каждой и сливать в один массив.  
Если в массивах только числа (которые помещаются внутри Variant), то можно использовать CopyMemory для очень быстрой вставки одного массива в другой. В случае со строками так не получится.
 
Слушай, а я и не заметил на радостях, что там хвоста не хватает...  
Беру слова обратно - не работает, как и в 2003 было... Только первую группу выводит :(
 
эх... спасибо за советы. буду делать как по старинке - через скрытый лист
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Быстрее будет перебрать критерии фильтра параметр ([a1]currentregion.autofilter.filters.item(i) --- лучше использовать массив так как критерии если он не один являются массивом, и простым перебором заполнить массив.
что бы не париться с размерностью, создаем массив равный исходному и запоминаем размерность конечного массива.
Спасибо
 
Не понял...
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
1) вставляем в код функцию ArrAutofilterEx  
 
2) считываем в массив arr таблицу целиком  
 
3) фильтруем массив по нужному столбцу:  
arr = ArrAutofilterEx(arr, "1=Тип1")  
 
В массиве останутся только строки, где в первом столбце стоит «Тип1»  
 
 
PS: Можно сразу по нескольким столбцам фильтровать:  
arr = ArrAutofilterEx(arr, "1=Тип1", "3=Контрагент1")
 
Забыл ссылку дать на функцию:  http://excelvba.ru/code/ArrAutofilter
 
Игорь (EducatedFool), привет.  
 
1) хорошая функция )  
2) В шутку - в твоих функциях без "пол литра" не разберёшься ))  
3) Я смотрю ты начал использовать английские переменные в своём коде ) Мне стало легче читать твой код )  
 
4) А зачем нужна строка:  
 
X = GetAutofilterArgument(args(Index), ComparedColumn, res)  
 
в функции ArrAutofilterEx ?
 
я свою написал Игоря не смотрел :)
Спасибо
 
Я так понимаю когда новый ник сочинялся Сoca cola на столе стояла ... или я ошибаюсь....
Спасибо
 
{quote}{login=Coca-cola}{date=10.09.2012 11:35}{thema=}{post}  
4) А зачем нужна строка:  
X = GetAutofilterArgument(args(Index), ComparedColumn, res)  
в функции ArrAutofilterEx ?{/post}{/quote}  
 
эта функция получает значения ComparedColumn и res (текст для поиска)  
из аргумента args(Index)  
для следующей строки кода.
 
исправленный вариант...
Спасибо
 
\
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Сань, а вот в этом месте у тебя память не замусоривается ли?..  
 
Public Sub RemoveAll()  
   Set this = New Collection  
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Саш, извиняюсь, если чего не догнал спросонок - нафига в твоем примере модуль класса? И привязка: For Each area In Range("A2:C18")? Дима перед этим показал: Sheets(1).AutoFilter.Range. И еще - если для себя - я понимаю, объявляй так, но чтоб не путать народ, вместо Dim area As Object, ИМХО лучше объявить как конкретный объект, то бишь Range.  
А вообще, по теме - конечно жаль, что самый простой способ - выгрузить на лист отфильтрованные, потом считать с него. Все грызет червяк. Как-то же Экс это делает... И возможно, существует способ через доступ к этой его функции:-)
Я сам - дурнее всякого примера! ...
 
Всем спасибо, буду разгребать коды :)
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
> нафига в твоем примере модуль класса?  
Лепил пример в 2-а часа ночи, параллельно еще что-то делал. Нафига там модуль класса, я тебе сказать не могу )))  
 
> Dim area As Object, ИМХО лучше объявить как конкретный объект, то бишь Range.  
ну да )  
 
> вот в этом месте у тебя память не замусоривается ли?  
не понял, поясни. Спросони не догоняю...
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
не обращай внимания (пока что:)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Всем привет и спасибо за помощь!  
Чуток изменил код Уважаемого R Dmitry, сделал функцию, пример во вложении.  
Может кому-то ещё понадобится ;)  
 
-=97497=-
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Всем привет.  
Если в ЮзерФорме, в первом КомбоБоксе выбрать значение "3n" - всё обрабатывается хорошо, а если выбрать значение "333333" - вываливается ошибка в функции ArrayFilters.  
Почему-то это происходит только если в КомбоБоксе выбирать числовое значение.  
Подскажите, пожалуйста, в чём ошибка?  
Заранее благодарен!
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
Переменная x - это что?
 
Возможно один из счётчиков  
Макрос писал R Dmitry
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
 
мне хватило этого  
 
Public Sub arrSort() 'сортировка массива и удаление дубликатов  
 
дальше читать не стал )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Sub Загрузить_данные_в_форму()  
' а тут код диск С форматирует. Введение в заблуждение  
End Sub
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
В строке ReDim itog(1 To x - 1, 1 To lCol) поставьте останов и увидите, что получается ReDim itog(1 To 0, 1 To lCol)
 
Саш, тебя ввело в заблуждение то, что "левый" макрос находится внутри ЮзерФормы?  
Перенести не проблема, просто быстро копировал куда попало, для форума.  
 
Юрий М, я видел. Но почему тогда если выбрать "3n" - обрабатывается нормально?
Киса, я хочу Вас спросить, как художник — художника: Вы рисовать умеете?
Страницы: 1 2 След.
Наверх