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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.05.2008, 21:52   #1
skif93
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
Злость Откуда тормоза (.Find(What:=MyInput, LookIn:=xlValues, LookAt:=xlWhole))

Есть два файла, 1й на 17,5 тыс. строк, 2й на 48 тыс. строк.
Так вот указанная конструкция (.Find(What:=MyInput, LookIn:=xlValues, LookAt:=xlWhole)) во втором случае работает в 2 раза быстрее чем в первом. Вопрос: Где грабли? Заранее спасибо.
skif93 вне форума
Старый 23.05.2008, 22:40   #2
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от skif93 Посмотреть сообщение
Есть два файла, 1й на 17,5 тыс. строк, 2й на 48 тыс. строк.
Так вот указанная конструкция (.Find(What:=MyInput, LookIn:=xlValues, LookAt:=xlWhole)) во втором случае работает в 2 раза быстрее чем в первом. Вопрос: Где грабли? Заранее спасибо.
возможно в 1 файле у Вас форматы ячеек установлены для столбцов, т.е. для всего листа, а во 2-м только для имеющихся записей, вот find и отрабатывает их все, в том числе и пустые ячейки.
Abrakadabra вне форума
Старый 23.05.2008, 22:50   #3
skif93
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

With Worksheets("Свод").Range("B4:B65536 ") проставлено в обоих модулях.
skif93 вне форума
Старый 23.05.2008, 23:01   #4
skif93
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

P.S. метод "тупого" перебора в 1ом на 17,5 тыс работает раза в три быстрее чем ".find"
skif93 вне форума
Старый 23.05.2008, 23:02   #5
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от skif93 Посмотреть сообщение
With Worksheets("Свод").Range("B4:B65536 ") проставлено в обоих модулях.
а размер файлов примерно пропорционален объему данных?
Abrakadabra вне форума
Старый 23.05.2008, 23:04   #6
Abrakadabra
Форумчанин
 
Регистрация: 26.04.2008
Сообщений: 487
По умолчанию

Цитата:
Сообщение от skif93 Посмотреть сообщение
P.S. метод "тупого" перебора в 1ом на 17,5 тыс работает раза в три быстрее чем ".find"
это вообще штука тормознутая..
Abrakadabra вне форума
Старый 23.05.2008, 23:11   #7
skif93
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

1й - 7Mb
2й - 56Mb
В этом и прикол на 7ми метрах 17т. записей ищет гораздо тупее, чем на 56 при 48т. записей. А перебором в 7ми метрах работает быстрее, чем ".find", вот я и задался вопросом Почему.
skif93 вне форума
Старый 24.05.2008, 00:57   #8
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Попробуйте заменить

Код:
.Find(What:=MyInput, LookIn:=xlValues, LookAt:=xlWhole
на

Код:
.Find(What:=MyInput, LookIn:=xlFormulas, LookAt:=xlWhole
Т.е. с LookIn:=xlValues на LookIn:=xlFormulas.

У меня это быстрее работает через Ctrl+F
Pavel55 вне форума
Старый 24.05.2008, 02:16   #9
skif93
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 12
По умолчанию

Прошу прощения за бестолковость, но мне кажется, что xlFormulas это фрмула, а я точно знаю, что в искомой ячейке - значение. Хотя СОГЛАСНО ВАШИХ ответов ВРОДЕ все работает на ура. Дальше буду смотреь. Еще раз спасибо за помощь
skif93 вне форума
Старый 24.05.2008, 04:00   #10
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Я понимаю/догадываюсь, что в вашей ячейке значение, а не формула. Но я каждый день работаю с большими файлами/таблицами (до 100мб) и часто пользуюсь поиском по листу (Ctrl+F), и я заметил, что если в параметрах стоит "Область поиска - формулы", то поиск осуществляется быстрее, чем "Область поиска - значения". Отсюда и был мой совет вам.

Последний раз редактировалось Pavel55; 24.05.2008 в 04:02.
Pavel55 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос, расширяющий функцию Find neugadal Microsoft Office Word 5 29.09.2008 08:32
help! тормоза с DataTable?! billidean Общие вопросы .NET 2 24.08.2008 13:16
Тормоза винды Altera Операционные системы общие вопросы 4 08.07.2008 18:23
19 форм = сильные тормоза XPAiN Общие вопросы Delphi 21 29.12.2007 10:47
тормоза Tmemo russkiy Компоненты Delphi 13 28.12.2007 16:14