Страницы: 1
RSS
Поиск данных в закрытой книге Эксель, состоящей из большого количества строк.
 
Доброго дня, уважаемые участники форума!

Прошу помочь в решении задачи. Задача состоит в следующем.(файл с примером приложил")
Необходимо каждое значение из столбца "А"  листа "Что ищем" искать в столбце "А" листа "База". Если оно найдено, что необходимо получить параметр "Цена" у найденного оборудования.
Суть процесса примерно понимаю, но сложность состоит в том, что в файле "База" может быть несколько сотен тысяч строк, в которых нужно будет искать по одному искомому значению. Искомых значений может быть от 1 до более сотни, а сама база будет увеличиваться.
В связи с тем, что файл будет довольно тяжелым и одно его открытие для среднего ПК будет усложнено, не говоря уже о самом процессе поиска с перебором каждой строки листа "База".

Исходя из этого хотел спросить: каким образом будет оптимальнее реализовать данный процесс? Можно ли, к примеру, сделать лист "База" в виде SQL базы и уже в ней делать поиск? Будет ли это быстрее? Либо, возможно, тут будет полезнее Access?

Поделитесь, пожалуйста, Вашими мыслями по этому поводу.

Спасибо!
 
Если я правильно помню,
Код
=ВПР(A2;База!$A$1:$E$650500;5;ЛОЖЬ)
может справится с десятками и сотнями тысяч. Попробуйте. Вводить на листе "что ищем" в ячейку В2, далее растянуть вниз.
Кому решение нужно - тот пример и рисует.
 
Пытливый, спасибо за ответ!
Да, Ваша формула работает отлично. Но правильно ли я понимаю, что для формулы необходимо чтобы файл с базой был открыт?
Основная проблема в том, чтобы сделать поиск не открывая сам файл. В связи с этим на ум пришла идея с базой в SQL или Access, но в связи с малым объемом знаний в области взаимодействия этих баз с VBA, не уверен, что метод Find будет работать с базой SQL или Access.
 
Вы откройте оба файла, нарисуйте формулу, переключаясь на нужный лист файла с базой и выделяя мышОм нужный диапазон, где ищем значения. Программа автоматом подставит ссылки на файл, потом закройте файл с базой - проверьте, как работает.
Кому решение нужно - тот пример и рисует.
 
Пытливый, спасибо за ответ!
Очень круто!) Честно сказать, не думал, что формулы могут работать с закрытыми файлами.

Подскажите, пожалуйста, по двум вопросам:

1. что будет, если в базе будет два или более одинаковых значения? Какое из них формула возьмет за результат поиска?
2. Если в базе будет несколько сотен тысяч строк, сохранится ли быстродействие поиска по формуле?
Изменено: footballplayer - 21.02.2019 15:20:13
 
Формула выдаст первое найденное (формулы ищут слева-направо, сверху-вниз). В этом случае - самое "верхнее" найденное совпадение.
По быстройдействию - ноут с Excel2010 4 гига, Intel I3 2012 года обрабатывает 300+ тысяч строк подобными формулами вполне себе.
Можно для ускорения еще отрубить в настройках файла автоматический пересчет формул, чтобы на каждое изменение не пересчитывать всю книгу, но тогда после внесения всех изменений нужно будет жмакнуть F9 - запустить пересчет вручную.
Изменено: Пытливый - 21.02.2019 15:24:42
Кому решение нужно - тот пример и рисует.
 
Пытливый, спасибо за ответ!
Ваш способ очень устраивает. Огромное спасибо за помощь!
А можно ли доработать формулу так, чтобы она выдавала не первое совпадение, а последнее? Либо, сделать поиск снизу вверх?

Хотелось бы понять еще один момент. Есть ли у VBA в связке с SQL функционал (как тот же метод Find), при котором можно провести поиск определенного значение (к примеру, ID, как в файле-примере) в базе и при успешном нахождении искомого значения, уже далее брать нужные данные из строки с найденным значением?
Знаю, что через VBA из SQL базу можно сделать выборку по методу SELECT, но является ли это полноценным поиском?
Если такая возможность есть, то попробовал бы ознакомиться с мануалами и реализовать задачу.
Либо, возможно, есть что-то подобное в Access?
Страницы: 1
Наверх