Страницы: 1
RSS
VBA Excel в большой таблице найти все указанные значения, Как если найти далее или найти все
 
Добрый день коллеги!

Есть большая база по обучению в EXCEL
в ней содержится ФИО человека, номер группы, название курса, город, дата.
Каждый учащийся может обучать вначале одному курсу потом пойти на другой и т.д. То есть один и тот же человек может пройти от 1 до нескольких курсов.

Задача найти все эти значения. Например я ввожу его ФИО и он мне в listbox Добавляет все варианты а я уже из них выбираю конкретные данные.

Как найденные добавить в листбох и потом вывести данные я знаю. Вопрос именно в самом поиске всех этих данных. Перебирать каждое значение через for i не хотелось бы. Может быть есть другой способ ???

Думали сделать через .find и после нахождения изменять диапазон поиска и продолжать искать. Но вдруг есть человеческий вариант :)


Заранее спасибо!!!
 
Можно, если данные представлены в виде таблицы, применив фильтр по соответствующему полю, заполнить listbox видимыми значениями.
Можно загрузить данные таблицы в Recordset и, используя свойство Filter, получать данные для заполнения listbox.Column.
Изменено: anvg - 08.10.2013 08:47:06
 
Спасибо!
Попробую изучить данный вариант )
 
Цитата
Есть большая база по обучению в EXCEL

после этого вопрос "как найти все значения" кажется подвохом :)

а почему for i не устраивает?  на самом деле все остальные способы именно на нем и строятся..только это замаскированно вызовами функции.

единственно, если массив упорядочен, то можно применить быстрый поиск - делением пополам, но все равно for i там будет присутствовать :)

к тому же, я думаю, простой for i  будет быстрее чем применение фильтра на листе и даже рекордсета.
Живи и дай жить..
 
"я ввожу его ФИО"  - один раз или много раз?
Если много - то я бы при загрузке формы (или файла) сразу загрузил данные в массив, его "for i" "проиндексировал" в словарь по фамилиям.
Т.е. уже знаем, где какая фамилия. Далее при вводе фамилии сразу из массива извлекаем нужные данные без дополнительного поиска.
Если всегда "за сеанс" нужно найти только одного человека, и повторов по нему не много - тогда вероятно быстрее будет find/findnext.
 
Ну почему я не хотел "for i"
просто потому что я знаю как с помощью него реализовать это ) и хотелось найти более просто или интересный вариант.

Как например с .find тоже самое, но проще команда и быстрее работает )

Просто сейчас мой руководитель это все ведет в самопальной эксель таблице.
Где формулы постоянно съезжают все портиться и т.д.
И я подрядился сделать это все на ВБА с Юзерформами и т.д. И мне учеба и поощрения и босс доволен )

сейчас как раз строю как все данные будут вноситься в таблицу. чтобы потом можно было выгрузить отчетность по группам и сделать поиск. Чтобы можно было найти человека в каких группах обучался какой результат набрал и т.д. )

Поэтому собираю информацию

Спасибо всем большое! )
 
Цитата
Как например с .find тоже самое, но проще команда и быстрее работает
На небольших объёмах Вы вряд ли заметите разницу - у Вас же не сотни тысяч строк?
Солидарен со Слэном: в том или ином виде цикл всё равно присутствует
И с Hugo согласен: в массив и цикл по нему.
 
Find работает с Range, For-Next может работать с массивом; работа в массиве на порядки быстрее, чес с Range...
Имхо, быстрее тривиального For-Next (может быть, в различных вариантах - Do-Loop, For-Each) ничего нет.

По задаче, на реальных объемах, выбор способа не существенен. Между самым оптимальным и самым не оптимальным разница будет незаметна.
 
Ну разница в find и цикле по ячейкам заметна будет.
Всёж думаю если прогнозируется что искать нужно пару совпадений по больщому количеству ячеек - то быстрее find/findnext по диапазону.
Если выбрать нужно много - то уже быстрее будет цикл и отбор по массиву данных.
Но в общем всегда можно устроить соревнование на реальной задаче и данных и выбрать что выгоднее.
Страницы: 1
Читают тему
Наверх