powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема использования Find с ADODB.Recordset
6 сообщений из 6, страница 1 из 1
Проблема использования Find с ADODB.Recordset
    #37734054
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю ADODB.Recordset (Microsoft ActivX Data Objects 2.5 Library) в Excel 2010
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
    Dim pTable As New ADODB.Recordset
    pTable.Fields.Append "FLength", adDouble
    pTable.CursorLocation = adUseClient
    pTable.Open
   
    pTable.AddNew: pTable(0).Value = 715
    pTable.AddNew: pTable(0).Value = 916
    pTable.AddNew: pTable(0).Value = 830


Пытаюсь найти требуемое число по критерию методом Find
Код: vbnet
1.
2.
3.
4.
5.
    pTable.Sort = "FLength DESC"
    pTable.MoveFirst
    pTable.Find "FLength<=" & CStr(730), SearchDirection:=adSearchForward
    Debug.Print pTable(0).Value
    pTable.Close


Получаю 916. Что делаю не так? И как правильно? Или остаётся только работать через Filter?
...
Рейтинг: 0 / 0
Проблема использования Find с ADODB.Recordset
    #37734069
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ухты, не думал, что так до сих пор делают.
Проблемы с .Find давно известны. Тем более у вас 2.5. Впрочем в 2.8 его тоже так до конца не допилили.
В принципе, можно попробовать .MoveLast вместо .MoveFirst перед .Find либо в самом .Find указать Start = adBookmarkLast.
Только всё равно, ничего серьёзного я бы такому решению не доверил.
...
Рейтинг: 0 / 0
Проблема использования Find с ADODB.Recordset
    #37734087
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElenHim
Спасибо большое, вот так помогло.
Код: vbnet
1.
2.
3.
4.
    pTable.Sort = "FLength"
    pTable.Find "FLength<=" & CStr(730), SearchDirection:=adSearchBackward, Start:=adBookmarkLast
    Debug.Print pTable(0).Value
    pTable.Close


Странно, что при сортировке по убыванию не ищет первый наибольший из меньших или равных заданного.
А подскажите, как лучше в Excel искать, сортировать, фильтровать? Не на рабочем же листе вспомогательные вычисления делать?
...
Рейтинг: 0 / 0
Проблема использования Find с ADODB.Recordset
    #37734116
ElenHim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тащемто полно всего. Всё зависит от задачи, её регулярности, и, возможно в первую очередь, от объёма данных.
Для небольших наборов данных вполне подойдёт стандартный функционал, таже сортировка и автофильтр, расширенный фильтр сводные таблицы, динамические диапазоны, формулы (особенно из группы ссылок и массивов), собственно формулы массивов, также весьма способствует функция быстрого выделения/перехода, именнование диапазонов/формул/массивов.

Соответственно, всё это можно программировать. Опять же, ADO. Только не через find и sort, а через SQL.
Если скорость стоит на первом месте, существует множество специальных алгоритмов, как то быстрой сортировки, бинарного поиска и т.д. Всё это можно сделать в VBA (VB, .NET), в сети также есть готовые примеры.

Если же данных много, то лучше в полновесной БД обрабатывать, а в Excel уже найденные/отфильтрованные/отсортированные данные выгружать/анализировать/форматировать.
...
Рейтинг: 0 / 0
Проблема использования Find с ADODB.Recordset
    #37735563
anvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElenHim
Если бы можно было на .NET, я бы и вопрос не задавал, но заказчик хочет VBA. Так что надеялся, что может я где то ошибку допускаю, или есть другие стандартные библиотеки со схожей функциональностью. Ради нескольких мелких проектов писать для каждого свою сортировку и бинарный поиск считаю не целесообразным. В любом случае, большое спасибо за консультацию.
...
Рейтинг: 0 / 0
Проблема использования Find с ADODB.Recordset
    #37735761
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvg, есть еще одномерные массивы и функции листа math max min и т.д
Для сортировки прекрастно подходит коллекция, для поиска можно и цикл использовать.
Массивы значительно быстрее recordset.
Для того что бы не писать каждый раз, нужно один раз правильно написать и пользоваться
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проблема использования Find с ADODB.Recordset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]