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

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

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

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

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

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

Всем доброго времени!
помогите написать код - есть переменная "d", если в диапазоне "A10:A34700" есть такое значение, то присваиваем его переменной v, иначе v="" и программа идет дальше. Мой вариант:
Код:
On Error Resume Next
d = "текст"
v= Range("A10:A34700").Find(What:=d).Value
отдельно работает и если d существует тоже, но в цикле при ошибке (значение d не найдено) почему то ищет не точное совпадение, а частичное. тоесть если d="ара", то возвращает v="гараж", а надо что б было v = "".

и еще такой вопрос: возможно ли одновременное выполнение двух макросов? смысл такой:
макрос №1 ищет в диапазоне "A10:A17000", а
макрос №2 ищет в диапазоне "A17001:A34700",
если это уменьшит время поиска конечно
maksim_serg вне форума Ответить с цитированием
Старый 10.05.2010, 22:55   #2
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию

Можно записать через макросридер с условиями поиска подробнее, а чтобы не искались приближенные результаты - включите "ячейка целиком"
ELE-COM вне форума Ответить с цитированием
Старый 11.05.2010, 05:48   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
почему то ищет не точное совпадение
У метода Find есть "куча" опций. Почитайте справку. В Вашем случае нужно так:
Код:
d = "ара": On Error Resume Next
v = [A10:A3700].Find(what:=d, LookAt:=xlWhole)
Цитата:
возможно ли одновременное выполнение двух макросов?
макрос №1 ищет в диапазоне "A10:A17000", а
макрос №2 ищет в диапазоне "A17001:A34700",
если это уменьшит время поиска конечно
Во-первых, зачем одновременное выполнение 2-х макросов, если это можно сделать 1-м. Во-вторых, если Вам требуется найти в 2-х диапазонах значение и присвоить его 2-м переменным, то это оправдвно. А если этого не нужно, то разбивка диапазона поиска лишь увеличит время выполнения макроса.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.05.2010, 17:50   #4
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

и зачем я стер LookAt:=xlWhole после записи...

по поводу сразу двух макросов: я хотел чтоб два макроса искали одну и туже переменную сразу в двух частях диапазона и, кто первы найдет ее тот и прсваивает ее значение другой переменной
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 05:10   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
я хотел чтоб два макроса искали одну и туже переменную сразу в двух частях диапазона и, кто первы найдет ее тот и прсваивает ее значение другой переменной
Оригинально!!! Устроить гонки?
Что значит "кто первый найдет"? По времени? Или по адресу? Опишите подробнее, что Вам требуется, а мы подскажем, как это лучше реализовать.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 13.05.2010, 06:46   #6
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

По времени.
есть диапазон : A1:A34700 (во всех ячейках текст). нужно узнать, есть ли в нем ячейка, значение которой равно d и, пусть вывести ее адрес.
Поиск в ручную: мы смотрим ячейку А1 и сравниваем с о значением переменной d, потом А2, А3... и на конец А34700. А можно искать ее двум человекам. Первый начинает с ячейки А1, второй либо с А17350, либо с конца. Таким образом время поиска может сократиться почти в два раза.
Но вопрос не в том как запустить сразу два (думаю можно где нибудь найти), а сократит ли это время поиска, или при работе сразу двух макросов скорость каждого из них уменьшиться в двое и в результате получим еще медленнее?
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 07:14   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
сократит ли это время поиска, или при работе сразу двух макросов скорость каждого из них уменьшиться в двое и в результате получим еще медленнее?
В данном случае Excel выполняет поиск почти моментально.
Использовать 2 макроса нецелесообразно.
EducatedFool вне форума Ответить с цитированием
Старый 13.05.2010, 07:24   #8
ELE-COM
Пользователь
 
Регистрация: 08.05.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от maksim_serg Посмотреть сообщение
По времени.
...сократит ли это время поиска, или при работе сразу двух макросов скорость каждого из них уменьшиться в двое и в результате получим еще медленнее?
Это увеличит время обработки. Код VBA работает в несколько раз медленнее встроенных функций Excel. Если обычный поиск (не в VBA) найдет ячейку в вашем диапазоне за 0,01 сек., то VBA потратит на это 0,5-1 сек. Если сразу два макроса, то еще медленнее. А вообще, при таких значениях времени стоит-ли париться? Не минуты же.
ELE-COM вне форума Ответить с цитированием
Старый 13.05.2010, 08:31   #9
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от ELE-COM Посмотреть сообщение
Не минуты же.
если нужно обработать таким образом порядка 5000 данных - 4 с половиной минуты
maksim_serg вне форума Ответить с цитированием
Старый 13.05.2010, 10:37   #10
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от ELE-COM Посмотреть сообщение
Это увеличит время обработки. Код VBA работает в несколько раз медленнее встроенных функций Excel. Если обычный поиск (не в VBA) найдет ячейку в вашем диапазоне за 0,01 сек., то VBA потратит на это 0,5-1 сек. Если сразу два макроса, то еще медленнее. А вообще, при таких значениях времени стоит-ли париться? Не минуты же.
По-моему, maksim_serg хотел пустить два потока сразу
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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