Как найти определенную строку.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Genyaa
Сообщения: 310
Зарегистрирован: 11 окт 2006, 17:24
Откуда: Moscow
Контактная информация:

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

Поиск по одному из полей и последующий перебор ячеек в найденном - смертельно медленно.
Если бы можно было обойтись единичной операцией поиска сразу по всем значениям всех полей, то было бы чуть быстрее... но распухание файла для хеш или сцепления полей было здесь отвергнуто.
В екселе нет возможности организовать поиск одновременно по нескольким значениями разных ячеек. Думаю, что этого нет даже в СУБД. Там это решается с помощью индексации группы полей... (что в екселе реализуется сцеплением полей в отдельную колонку и сортировкой по этой колонке) а индексация ведет к тому самому "распуханию" файлов, которое было отвергнуто.
В принципе есть еще Расширенный фильтр - некое подобие SQL запроса к списку... но это тот же фильтр и если нужно именно найти строку (ее расположение в листе), то это будет сделано так же, как и в автофильтре (с той же скроростью)...

Думаю, что других разумных вариантов, которые могли бы претендовать на бОльшие скорость и удобство не остается.
Всякое решение плодит новые проблемы.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Genyaa,
Это все замечательно и работает пока нормально. Но как узнать номер найденой ячейки?
sergvk
Сообщения: 129
Зарегистрирован: 21 июн 2005, 14:33
Откуда: Крым, Феодосия
Контактная информация:

возможно эта тема ВАС может заинтересовать
forum/viewtopic.php?t=6345 :D
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

sergvk,
Это не совсем не то или даже совсем не то :)
Genyaa
Сообщения: 310
Зарегистрирован: 11 окт 2006, 17:24
Откуда: Moscow
Контактная информация:

namomelkor писал(а):Genyaa,
Это все замечательно и работает пока нормально. Но как узнать номер найденой ячейки?
Можно так сделать (в конце моей процедуры):

Код: Выделить всё

    MsgBox "Найдено&#58]

Правда, если будет найдено более одной строки, то этот код выдаст адрес только последней найденной строки.
Всякое решение плодит новые проблемы.
Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Цикл можно укоротить. Дополнительное условие выхода - найдено строк <= 1. В определенных случаях поиск ускорятеся.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Sokl, это понятно но в моем случае не может буть двух одинаковых строк.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Коллеги, есть еще тема "поехать на готовом велосипеде".
Я имю в виду SQL запрос к листу через драйвер ODBC.
Тут правда к данным придется добавить первичный ключ
(который и будет указывать результат поска),
например, равный номеру строки.

Есть, ограничение: запрос выполняется в пределах 1 листа.
Ответить