Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Быстрый поиск в двумерном массиве vba / 25 сообщений из 66, страница 1 из 3
07.12.2017, 13:47
    #39565823
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
Есть у кого-нибудь такая функция? Только для текстовых массивов?
...
Рейтинг: 0 / 0
07.12.2017, 15:10
    #39565936
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,
поиск нужен в определенном столбце/строке или по всему массиву?
Массив отсортирован? (если да, поиск можно сделать на порядок быстрее)
Откуда берется массив? Если он считывается с листа Excel или из таблицы Word, можно задействовать методы Find для документа.
...
Рейтинг: 0 / 0
07.12.2017, 15:50
    #39565988
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
Казанский,
Массив отсортирован, по одному столбцу.
...
Рейтинг: 0 / 0
07.12.2017, 15:51
    #39565989
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
КазанскийОткуда берется массив? Если он считывается с листа Excel или из таблицы Word, можно задействовать методы Find для документа.
Берется из recordset'а и кладется в массив.
...
Рейтинг: 0 / 0
07.12.2017, 19:54
    #39566205
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

Код: vbnet
1.
2.
3.
Dim ar() As Variant
ar = Range("A1:A10")
MsgBox WorksheetFunction.Match("SomeValue", ar, 0)
...
Рейтинг: 0 / 0
07.12.2017, 19:56
    #39566208
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
Это к чему?
...
Рейтинг: 0 / 0
07.12.2017, 19:58
    #39566209
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
для двумерного
Код: vbnet
1.
2.
3.
 Dim ar() As Variant
 ar = Range("A1:B10")
 MsgBox WorksheetFunction.VLookup("A", ar, 2, 0)
...
Рейтинг: 0 / 0
07.12.2017, 19:58
    #39566210
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngelbig-duke,
Это к чему?
Это к тому как искать в массиве.
...
Рейтинг: 0 / 0
07.12.2017, 19:59
    #39566212
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
У меня уже в массиве, массив не берется с листа.
...
Рейтинг: 0 / 0
07.12.2017, 20:03
    #39566214
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngelbig-duke,
У меня уже в массиве, массив не берется с листа.
Это для примера.
Используйте сразу ваш массив и WorksheetFunction.VLookup
...
Рейтинг: 0 / 0
07.12.2017, 20:09
    #39566221
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
На сколько это быстрее перебора? И на сколько это быстрее бинарного поиска? Или поиска половинного деления?
...
Рейтинг: 0 / 0
07.12.2017, 20:26
    #39566229
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

Понятия не имею.

Вы спросили про функцию для поиска в массиве.
...
Рейтинг: 0 / 0
07.12.2017, 20:27
    #39566231
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke, я просил быструю
...
Рейтинг: 0 / 0
07.12.2017, 20:30
    #39566234
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

У вас есть доказательства того, что WorksheetFunction.VLookup - медленная функция ?
Что мешает взять и сравнить ?
...
Рейтинг: 0 / 0
07.12.2017, 20:35
    #39566236
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
Вот завтра и сравню на 3млн записях
...
Рейтинг: 0 / 0
07.12.2017, 20:36
    #39566237
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
А пока жду ещё предложения...
...
Рейтинг: 0 / 0
07.12.2017, 20:41
    #39566241
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

1М записей ~ 400ms
...
Рейтинг: 0 / 0
07.12.2017, 20:51
    #39566244
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
Тогда мои данные будет этот метод обрабатывать 1,4E11ms... Что то не быстро...
...
Рейтинг: 0 / 0
07.12.2017, 20:52
    #39566245
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

А какой у вас лимит времени на обработку ?
...
Рейтинг: 0 / 0
07.12.2017, 20:53
    #39566246
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke, час
...
Рейтинг: 0 / 0
07.12.2017, 20:56
    #39566249
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,

тогда почему поиск в 1 миллионе строк за 400 миллисекунд это медленно ?
Сколько операций поиска нужно выполнить ?
...
Рейтинг: 0 / 0
07.12.2017, 21:01
    #39566250
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
big-duke,
(500000строк*70000раз)*4раза.
Миллионы для того чтоб удобней время считать.
...
Рейтинг: 0 / 0
07.12.2017, 21:13
    #39566253
BlackeAngel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
Могу только добавить что перебором массива это заняло 7 часов.
...
Рейтинг: 0 / 0
07.12.2017, 22:35
    #39566280
Bobgos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,
Есть уверенность в том, что (500000строк*7000раз)*4раза это оптимальное решение вашей задачи. Вдруг достаточно будет 500000строк*1раз?
...
Рейтинг: 0 / 0
07.12.2017, 22:38
    #39566281
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрый поиск в двумерном массиве vba
BlackeAngel,
если поиск идет по отсортированному столбцу, можно использовать WorksheetFunction.VLookup или WorksheetFunction.Match с последним аргументом =1, это "интервальный" поиск, т.е. методом половинного деления или еще более оптимизированный. В случае миллионного массива это будет быстрее на 2-3 ПОРЯДКА. Правда, надо еще проверить, что найденное значение равно искомому:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim ar() As Variant, col() As Variant, n As Long, x, y
  ar = '... массив
  col = WorksheetFunction.Index(ar, 0, 1) 'выделить 1-й столбец массива
' в цикле
    x = '... искомое значение
    n = WorksheetFunction.Match(x, col, 1) 'интервальный поиск
    If col(n) = x Then 'найдено точное совпадение
      y = ar(n, 3) 'взять соотв. значение из другого столбца
    Else
      'действия, если не найдено
    End If
'конец цикла
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Быстрый поиск в двумерном массиве vba / 25 сообщений из 66, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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