Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2010, 13:00   #11
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

спрошу по другому:
как в диапазоне "А1:А34700" (или массиве m(1 to 34700)) найти максимально быстро 1 значение
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 16:06   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
если нужно обработать таким образом порядка 5000 данных - 4 с половиной минуты
Вот с этого и надо было начинать...

Если поиск надо выполнять 5000 раз - то применяется другой метод:
диапазон ячеек считывается в массив, и средствами VBA выполняется поиск в массиве

PS: Надо начинать с чтения правил раздела - там сказано про необходимость примера в виде файла Excel с подробным описание задачи.
Был бы пример - давно бы получили свой макрос.
EducatedFool вне форума Ответить с цитированием
Старый 13.05.2010, 17:11   #13
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

просто толкните меня в нужную сторону!
Код:
dim v(1 to 5000) as string '  массив данных, которые нужно искать
dim p(1 to 34700) as string ' массив данных среди которых надо искать
dim s() as string ' динамический массив в который надо записывать значения из массива v() если они были найдены в массиве p()
n = 1
For i = 1 To 5000
    For j = 1 To 34700
        If v(i) = p(j) Then s(n) = v(i): n = n + 1: Exit For
    Next j
Next i
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 17:36   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
просто толкните меня в нужную сторону!
Могу толкнуть только в поиск по разделу - там есть то, что вы ищете:
http://programmersforum.ru/showthread.php?t=61177

На мой взгляд, самым быстрым будет этот способ:
Код:
Sub test()
    Dim v(1 To 5000) As String    '  массив данных, которые нужно искать
    Dim p(1 To 34700) As String    ' массив данных среди которых надо искать
    Dim s() As String    ' динамический массив в который надо записывать значения
    '                      из массива v() если они были найдены в массиве p()
    n = 1
    ДлиннаяСтрока = "%" & Join(p, "%") & "%"
    For i = 1 To 5000
        If ДлиннаяСтрока Like "*%" & v(i) & "%*" Then
            s(n) = v(i): n = n + 1
        End If
    Next i
End Sub

Последний раз редактировалось EducatedFool; 13.05.2010 в 17:40.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в массиве Aleksandr Помощь студентам 3 30.01.2010 19:51
Поиск в массиве VladimirAleks Общие вопросы Delphi 3 06.11.2009 15:00
Поиск минимума в массиве. Sparky Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 17.09.2009 19:39
Поиск в массиве ADSoft PHP 1 07.08.2009 11:17
Поиск в массиве Paul_AG Общие вопросы C/C++ 9 03.06.2009 01:29