|
|
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Добрый вечер господа, необходимо написать простенький макрос который выбирает данные из листа 3 (базы) по ключевым словам из листа 2 и соответственно при совпадении ключевых слов забивает данные из базы в лист 2 , задачку решил но возникла проблема с оптимизацией, запрос работает ну просто не реально медленно с ВБА работаю только 2 дня поэтому пока изучил только на уровне синтаксиса и несложных материй Подскажите можно ли оптимизировать мой путь решения, либо есть какой то другой способ решения чтобы все это дело ускорилось, так как ждать 1-2 минуты пока запрос выполниться это как то не круто... Sub ssds1final() Dim k As String Dim s As Integer Dim z As Integer Dim i As Integer Dim i2 As Integer For i = 8 To 373 // это еще увеличиться на хз сколько записей With sheets("лист2") k = .range("g" & i).Value s = .range("h" & i).Value z = .range("J" & i).Value .range("e" & i).Select End With For i2 = 2 To 1175 // блин это ппц If k = sheets("лист3").range("a" & i2).Value And s = sheets("лист3").range("b" & i2).Value And z = sheets("лист3").range("c" & i2).Value Then With sheets("лист2") .range("d" & i).Value = sheets("лист3").range("g" & i2).Value .range("e" & i).Value = sheets("лист3").range("h" & i2).Value .range("f" & i).Value = sheets("лист3").range("i" & i2).Value .range("k" & i).Value = sheets("лист3").range("k" & i2).Value .range("l" & i).Value = sheets("лист3").range("l" & i2).Value .range("m" & i).Value = sheets("лист3").range("m" & i2).Value End With End If Next i2 Next i End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2009, 20:36 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
У меня есть универсальный макрос по этому поводу, сегодня как раз ещё универсальности добавил, с утра с работы закину, только русифицирую :) . Погоди до утра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2009, 23:28 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Hugo121, да без проблем подожду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 05:46 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Ну вот, перевёл :) (у меня на работе большая часть работает под нерусской локалью (так необходимо :( ), русские символы не проходят ). Вначале я тоже начинал с цикла в цикле, что-то похожее было, но потом на Find перешёл. Ну и со временем надоело в коде переменные менять, сделал поуниверсальнее :) Это уже наверное 7-я более-менее значительная модификация кода. В общем, код открыт, там две процедуры (+ управляющая), отличаются одним словом - xlWhole или xlPart, работают в зависимости от OptionButton. Наверное можно упростить, пока не вижу, как. О функциональности: 1. Код рассчитан на поиск по столбцам без повторов (обрабатывает только первое совпадение). Есть куда расти :) 2. В чёрные ячейки данные можно занести записывая вручную, но если они пустые при запуске макроса, последует диалог выбора файлов и далее запрос переменных. Данные занесутся в ячейки, чтобы повторно не запрашивать (на практике приходится не один раз запускать повторно/похожие варианты). 3. В рыжие данные заносятся только вручную (т.к. они не обязательны, отключил запросы, чтобы не надоедали) 4. Если рыжие ячейки все пустые, результатом работы кода будет только мессидж с количеством найденных совпадений. 5. Можно копировать данные из разных ячеек ряда с совпадением в разные ячейки ряда источника поиска. 6. Можно ставить нумерованные пометки о совпадении в ячейку найденного/источника ряда, затем если отсортировать по этому столбцу, получим соответствие таблиц. 7. Можно искать в одном и том-же файле, и даже похоже на одном и том-же листе! 8. Файлы открываются read-only для защиты от неожиданностей :) 9. Файл с настройками можно сохранить как отдельную версию для запуска завтра/через неделю/через месяц. Ну или разные варианты настроек можно хранить здесь же рядом на листе (менять copy-paste) 10. Отзывы приветствуются, рекламации не принимаются. Если что добавите, или что нужно добавить, пишите (мыло в коде есть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 10:01 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Мой код сравнивает 1 пару значений, думаю для твоего случая надо добавить: при совпадении первой пары проверить совпадение других соседних ячеек, если ОК, копируем. Ну вроде и всё, но не проверял, извини. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 11:31 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Hugo121, Взрыв мозга, у меяня изначально есть все данные в листе3, надо взять сравнить и скопировать данные из Листа3 в лист2 , может кто предложит простое и понятное решение которую тут полюбому есть причем как мне кажеться оно нереально простое... до банальности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 11:49 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Не хочется в мой код вникать? Вообще это мысль, навернуть ещё мультисравнение ячеек (по аналогии с мультикопированием), надо будет сделать, но не сегодня... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 12:06 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
ТСвыбирает данные из листа 3 (базы) по ключевым словам из листа 2 и соответственно при совпадении ключевых слов забивает данные из базы в лист 2 либо опишите конкретней, либо [лучше] выложите пример ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 12:25 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Сделал мультипоиск, пока тестю, если есть интерес, в понедельник должно быть готово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2009, 18:08 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Сделал - http://hugo.nxt.ru/CompareFiles.Find.Rus.v090.rar Kensh1n, попробуй, вроде должно подойти и под твою задачу тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2009, 00:20 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Только что обновил файл http://hugo.nxt.ru/CompareFiles.Find.Rus.v090.rar - добавил проверок ввода значений ну и ещё по мелочи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2009, 21:34 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
как через массивы оформить это дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 12:45 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Kensh1n, Функцией ВПР пользоваться не пробовали? http://office.microsoft.com/ru-ru/excel/HP052093351049.aspx Если попроще - http://www.planetaexcel.ru/tip.php?aid=26 Или я неправильно понял задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 12:55 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Kensh1nкак через массивы оформить это дело? Можешь поиграться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 13:07 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
При чем здесь игры эта задача через масивы и решается вот нашел http://www.sql.ru/forum/actualthread.aspx?tid=225014&hl=%ec%e0%f1%f1%e8%e2%fb аналогично просто хз как так же сделать запутался уже ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 14:04 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Мой универсальный код не подходит? Говори чем не годится, может ещё чего добавлю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 14:11 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Kensh1nHugo121, Взрыв мозга, у меяня изначально есть все данные в листе3, надо взять сравнить и скопировать данные из Листа3 в лист2 , может кто предложит простое и понятное решение которую тут полюбому есть причем как мне кажеться оно нереально простое... до банальности Еще раз - есть стандартная функция ВПР(). Ищет первое значение в справочнике и подставляет в строку значение из указанного столбца напротив найденного значения. Единственная причина, по которой может Вам не подойти - это то, что ищет она только по одной ячейке, а Вам надо совпадение сразу по трем. Для такого случая предлагаю создать "Комбинированную" колонку на обоих листах, в которой будет сумма всех трех искомых колонок. Тогда формула в ячейке, куда нужно подставить значение (первая ячейка - D8), будет выглядеть примерно так: =ВПР(A8;Лист3!$A$2:$C$1175;2;ЛОЖЬ) Где A8 - это поле, из которого вы берете входящее значение, Лист3!$A$2:$C$1175 - это массив ячеек, в котором производите поиск входящего значения, находящегося в A8 (поиск проводится только по первой колонке массива), 2 - это колонка в массиве, из которой возьмется значение, как только строка с входящим значением будет найдена, ЛОЖЬ - параметр, отвечающий за то, что ищется точное соответствие. Когда формулу написали, вам остается только растянуть ее на весь столбец данных, скопировать в соседний столбец, заменив третий параметр, и так же растянуть и т.д. Если не уверены, что все значения из основной таблицы есть в справочнике, можно добавить обработку ошибок. Наверное очень сложное объяснение, но делается это гораздо проще, чем рассказывается :) Прилагаю пример, может быть на нем будет понятнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 15:48 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
спс я вкурсе насчет ВПР неподходит именно по той самой причине которую вы указали, сделал 2 масива, сравнил получил результат доволен все быстро работает и как я и думал легко и просто ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2009, 19:17 |
|
||
|
Оптимизация макроса Excel
|
|||
|---|---|---|---|
|
#18+
Kensh1nспс я вкурсе насчет ВПР неподходит именно по той самой причине которую вы указали, сделал 2 масива, сравнил получил результат доволен все быстро работает и как я и думал легко и просто ... Добавляете новую колонку, которая является суммой всех трех, и все будет работать. Ведь если A1=D1 и B1=E1, то автоматически выполняется условие A1+B1=D1+E1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36308144&tid=2178831]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 461ms |

| 0 / 0 |
