powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Оптимизация макроса Excel
19 сообщений из 19, страница 1 из 1
Оптимизация макроса Excel
    #36307796
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер господа, необходимо написать простенький макрос который выбирает данные из листа 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
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36307998
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть универсальный макрос по этому поводу, сегодня как раз ещё универсальности добавил, с утра с работы закину, только русифицирую :) . Погоди до утра.
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308144
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
да без проблем подожду
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308367
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот, перевёл :) (у меня на работе большая часть работает под нерусской локалью (так необходимо :( ), русские символы не проходят ).
Вначале я тоже начинал с цикла в цикле, что-то похожее было, но потом на Find перешёл. Ну и со временем надоело в коде переменные менять, сделал поуниверсальнее :) Это уже наверное 7-я более-менее значительная модификация кода.
В общем, код открыт, там две процедуры (+ управляющая), отличаются одним словом - xlWhole или xlPart, работают в зависимости от OptionButton. Наверное можно упростить, пока не вижу, как.
О функциональности:
1. Код рассчитан на поиск по столбцам без повторов (обрабатывает только первое совпадение). Есть куда расти :)
2. В чёрные ячейки данные можно занести записывая вручную, но если они пустые при запуске макроса, последует диалог выбора файлов и далее запрос переменных. Данные занесутся в ячейки, чтобы повторно не запрашивать (на практике приходится не один раз запускать повторно/похожие варианты).
3. В рыжие данные заносятся только вручную (т.к. они не обязательны, отключил запросы, чтобы не надоедали)
4. Если рыжие ячейки все пустые, результатом работы кода будет только мессидж с количеством найденных совпадений.
5. Можно копировать данные из разных ячеек ряда с совпадением в разные ячейки ряда источника поиска.
6. Можно ставить нумерованные пометки о совпадении в ячейку найденного/источника ряда, затем если отсортировать по этому столбцу, получим соответствие таблиц.
7. Можно искать в одном и том-же файле, и даже похоже на одном и том-же листе!
8. Файлы открываются read-only для защиты от неожиданностей :)
9. Файл с настройками можно сохранить как отдельную версию для запуска завтра/через неделю/через месяц. Ну или разные варианты настроек можно хранить здесь же рядом на листе (менять copy-paste)
10. Отзывы приветствуются, рекламации не принимаются. Если что добавите, или что нужно добавить, пишите (мыло в коде есть).
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308690
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой код сравнивает 1 пару значений, думаю для твоего случая надо добавить: при совпадении первой пары проверить совпадение других соседних ячеек, если ОК, копируем.
Ну вроде и всё, но не проверял, извини.
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308770
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hugo121,
Взрыв мозга, у меяня изначально есть все данные в листе3, надо взять сравнить и скопировать данные из Листа3 в лист2 , может кто предложит простое и понятное решение которую тут полюбому есть причем как мне кажеться оно нереально простое... до банальности
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308832
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не хочется в мой код вникать? Вообще это мысль, навернуть ещё мультисравнение ячеек (по аналогии с мультикопированием), надо будет сделать, но не сегодня...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36308921
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
ТСвыбирает данные из листа 3 (базы) по ключевым словам из листа 2 и соответственно при совпадении ключевых слов забивает данные из базы в лист 2
либо опишите конкретней, либо [лучше] выложите пример
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36310029
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал мультипоиск, пока тестю, если есть интерес, в понедельник должно быть готово.
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36310312
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал - http://hugo.nxt.ru/CompareFiles.Find.Rus.v090.rar
Kensh1n, попробуй, вроде должно подойти и под твою задачу тоже.
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36310890
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только что обновил файл http://hugo.nxt.ru/CompareFiles.Find.Rus.v090.rar - добавил проверок ввода значений ну и ещё по мелочи...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312270
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как через массивы оформить это дело?
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312298
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kensh1n,

Функцией ВПР пользоваться не пробовали?

http://office.microsoft.com/ru-ru/excel/HP052093351049.aspx

Если попроще - http://www.planetaexcel.ru/tip.php?aid=26

Или я неправильно понял задачу?
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312328
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kensh1nкак через массивы оформить это дело?
Можешь поиграться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub tt()
Dim MyArray
Dim x As Integer

With Sheets( 1 )
    MyArray = .Range(.Cells( 1 ,  1 ), .Cells( 6 ,  3 ))
End With

Debug.Print LBound(MyArray)
Debug.Print UBound(MyArray)

For x =  1  To UBound(MyArray)
Debug.Print MyArray(x,  1 )
Debug.Print MyArray(x,  2 )
Debug.Print MyArray(x,  3 )
Next

End Sub
Но с массивами недолго и запутаться...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312525
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При чем здесь игры эта задача через масивы и решается вот нашел http://www.sql.ru/forum/actualthread.aspx?tid=225014&hl=%ec%e0%f1%f1%e8%e2%fb аналогично просто хз как так же сделать запутался уже ...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312551
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой универсальный код не подходит? Говори чем не годится, может ещё чего добавлю...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36312843
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kensh1nHugo121,
Взрыв мозга, у меяня изначально есть все данные в листе3, надо взять сравнить и скопировать данные из Листа3 в лист2 , может кто предложит простое и понятное решение которую тут полюбому есть причем как мне кажеться оно нереально простое... до банальности
Еще раз - есть стандартная функция ВПР(). Ищет первое значение в справочнике и подставляет в строку значение из указанного столбца напротив найденного значения.
Единственная причина, по которой может Вам не подойти - это то, что ищет она только по одной ячейке, а Вам надо совпадение сразу по трем.
Для такого случая предлагаю создать "Комбинированную" колонку на обоих листах, в которой будет сумма всех трех искомых колонок.
Тогда формула в ячейке, куда нужно подставить значение (первая ячейка - D8), будет выглядеть примерно так:
=ВПР(A8;Лист3!$A$2:$C$1175;2;ЛОЖЬ)
Где A8 - это поле, из которого вы берете входящее значение, Лист3!$A$2:$C$1175 - это массив ячеек, в котором производите поиск входящего значения, находящегося в A8 (поиск проводится только по первой колонке массива), 2 - это колонка в массиве, из которой возьмется значение, как только строка с входящим значением будет найдена, ЛОЖЬ - параметр, отвечающий за то, что ищется точное соответствие.
Когда формулу написали, вам остается только растянуть ее на весь столбец данных, скопировать в соседний столбец, заменив третий параметр, и так же растянуть и т.д.
Если не уверены, что все значения из основной таблицы есть в справочнике, можно добавить обработку ошибок.

Наверное очень сложное объяснение, но делается это гораздо проще, чем рассказывается :)
Прилагаю пример, может быть на нем будет понятнее.
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36313404
Kensh1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спс я вкурсе насчет ВПР неподходит именно по той самой причине которую вы указали, сделал 2 масива, сравнил получил результат доволен все быстро работает и как я и думал легко и просто ...
...
Рейтинг: 0 / 0
Оптимизация макроса Excel
    #36315066
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kensh1nспс я вкурсе насчет ВПР неподходит именно по той самой причине которую вы указали, сделал 2 масива, сравнил получил результат доволен все быстро работает и как я и думал легко и просто ...
Добавляете новую колонку, которая является суммой всех трех, и все будет работать.
Ведь если A1=D1 и B1=E1, то автоматически выполняется условие A1+B1=D1+E1
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Оптимизация макроса Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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