Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Цикл в цикле - ускорить работу. - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Цикл в цикле - ускорить работу.
ovechkin1973 Дата: Суббота, 27.01.2018, 19:33 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
накропал самостоятельно макрос с циклом (для меня это вверх моего познания VBA, поэтому сильно не смеяться)


Но срок работы его просто видимо на многие часы.. есть способ как то ускорить этот процесс?


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.

Сообщение отредактировал ovechkin1973 - Суббота, 27.01.2018, 19:33
 
Ответить
Сообщениенакропал самостоятельно макрос с циклом (для меня это вверх моего познания VBA, поэтому сильно не смеяться)


Но срок работы его просто видимо на многие часы.. есть способ как то ускорить этот процесс?

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 19:33
bmv98rus Дата: Суббота, 27.01.2018, 20:07 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
для начала избавьтесь от Sheets("остальные сборочки").Select и Sheets("НКУ").Select
Ну а следом, можно просто для перебора использовать два массива, а не переберать ячейки, и после сравнения производить.
я так понимаю Cells(i, 1).Interior.Color = 31569 - это вы просто пытались отметить, обработано или нет.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 27.01.2018, 22:48
 
Ответить
Сообщениедля начала избавьтесь от Sheets("остальные сборочки").Select и Sheets("НКУ").Select
Ну а следом, можно просто для перебора использовать два массива, а не переберать ячейки, и после сравнения производить.
я так понимаю Cells(i, 1).Interior.Color = 31569 - это вы просто пытались отметить, обработано или нет.

Автор - bmv98rus
Дата добавления - 27.01.2018 в 20:07
ovechkin1973 Дата: Суббота, 27.01.2018, 20:14 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
я так понимаю Cells(i, 1).Interior.Color = 31569 - это вы просто пытались отметить, обраьотано или нет.
bmv98rus, Да, это цель работы макроса - сравнить и отметить.

А что значить избавиться от
Sheets("остальные сборочки").Select и Sheets("НКУ").Select
Чем то можно заменить?

Про перебор с использованием массива - это вы предложили для начальной школы.. я пока в детском саду VBA учусь..


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
я так понимаю Cells(i, 1).Interior.Color = 31569 - это вы просто пытались отметить, обраьотано или нет.
bmv98rus, Да, это цель работы макроса - сравнить и отметить.

А что значить избавиться от
Sheets("остальные сборочки").Select и Sheets("НКУ").Select
Чем то можно заменить?

Про перебор с использованием массива - это вы предложили для начальной школы.. я пока в детском саду VBA учусь..

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 20:14
ovechkin1973 Дата: Суббота, 27.01.2018, 20:15 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
и насколько или во сколько какие действия ускоряют работу?
И еще возможно глупый вопрос.. а можно как то прикинуть сколько будет работать по времени такой макрос?


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.

Сообщение отредактировал ovechkin1973 - Суббота, 27.01.2018, 20:24
 
Ответить
Сообщениеи насколько или во сколько какие действия ускоряют работу?
И еще возможно глупый вопрос.. а можно как то прикинуть сколько будет работать по времени такой макрос?

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 20:15
bmv98rus Дата: Суббота, 27.01.2018, 20:58 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
Ну для начала так


А прикинуть невозможно, так как зависит в том числе и от производительности ПК. То что на нем параллельно работает ....


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 27.01.2018, 21:00
 
Ответить
СообщениеНу для начала так


А прикинуть невозможно, так как зависит в том числе и от производительности ПК. То что на нем параллельно работает ....

Автор - bmv98rus
Дата добавления - 27.01.2018 в 20:58
ovechkin1973 Дата: Суббота, 27.01.2018, 21:23 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Уважаемый bmv98rus,
Пока ждал работы своего макроса (в итоге ждать не стал и остановил принудительно работу и Ваш код перезаписал) читал инфу по ускорению работы VBA.. немного стало стыдно.. Оказывается я не только про отключение обновления экрана должен знать, но и об отключении формул на время работы макроса и другие вещи, которые даже не понимая мог использовать.. Но это к лучшему.. пока Экслель "висел" я кое что прочитал.. некоторые вещи примененные Вами мне понятны. Ну и массивы Вы тоже не применяли.. так?
Макрос запустил.. буду ждать результата. Потом отпишусь. Если кто то даст ссылку с примером(и) на решение аналогичных задач с помощью массивов - будет для меня познавательно. Сам пока не смог даже приблизительно разобраться.


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
СообщениеУважаемый bmv98rus,
Пока ждал работы своего макроса (в итоге ждать не стал и остановил принудительно работу и Ваш код перезаписал) читал инфу по ускорению работы VBA.. немного стало стыдно.. Оказывается я не только про отключение обновления экрана должен знать, но и об отключении формул на время работы макроса и другие вещи, которые даже не понимая мог использовать.. Но это к лучшему.. пока Экслель "висел" я кое что прочитал.. некоторые вещи примененные Вами мне понятны. Ну и массивы Вы тоже не применяли.. так?
Макрос запустил.. буду ждать результата. Потом отпишусь. Если кто то даст ссылку с примером(и) на решение аналогичных задач с помощью массивов - будет для меня познавательно. Сам пока не смог даже приблизительно разобраться.

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 21:23
bmv98rus Дата: Суббота, 27.01.2018, 21:41 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
Ну и массивы Вы тоже не применяли.. так?

ла не применял, возможно для вашего случая такого варианта будет достаточно


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 28.01.2018, 08:58
 
Ответить
Сообщение
Ну и массивы Вы тоже не применяли.. так?

ла не применял, возможно для вашего случая такого варианта будет достаточно

Автор - bmv98rus
Дата добавления - 27.01.2018 в 21:41
Pelena Дата: Суббота, 27.01.2018, 21:43 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19363
Репутация: 4529 ±
Замечаний: ±

Excel 365 & Mac Excel
с помощью массивов

Начать можно отсюда Взять диапазон в массив
Был бы файл с примером, можно было бы говорить более предметно


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
с помощью массивов

Начать можно отсюда Взять диапазон в массив
Был бы файл с примером, можно было бы говорить более предметно

Автор - Pelena
Дата добавления - 27.01.2018 в 21:43
ovechkin1973 Дата: Суббота, 27.01.2018, 21:47 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
возможно для вашего случая такого варианта будет достаточно

Попробую после того, как первый вариант маркоса отработает. Если конечно он до утра расчет сделает. Самое противное, что мне надо часто запускать макрос, чтобы проверить работу по заполнению базы данных.. но тут уж лучше пусть комп это делает..


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
возможно для вашего случая такого варианта будет достаточно

Попробую после того, как первый вариант маркоса отработает. Если конечно он до утра расчет сделает. Самое противное, что мне надо часто запускать макрос, чтобы проверить работу по заполнению базы данных.. но тут уж лучше пусть комп это делает..

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 21:47
ovechkin1973 Дата: Суббота, 27.01.2018, 21:50 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010

Начать можно отсюда Взять диапазон в массив
Был бы файл с примером, можно было бы говорить более предметно

Елена, завтра почитаю ссылку.. и только после этого сделаю пример для наглядности, который можно будет выложить. На дружественном форуме прочитал, как правильно задавать вопросы... понял, что делаю это как троечник :D .. поэтому вначале вашу ссылку почитаю, но это завтра..


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение

Начать можно отсюда Взять диапазон в массив
Был бы файл с примером, можно было бы говорить более предметно

Елена, завтра почитаю ссылку.. и только после этого сделаю пример для наглядности, который можно будет выложить. На дружественном форуме прочитал, как правильно задавать вопросы... понял, что делаю это как троечник :D .. поэтому вначале вашу ссылку почитаю, но это завтра..

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 21:50
bmv98rus Дата: Суббота, 27.01.2018, 21:57 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
но тут уж лучше пусть комп это делает
Вот тут возникает самый главный вопрос, может не циклом надо делать, а иными средствами . Вам что надо в итоге? У меня такое подозрение, что или формулы быстрее обработают, разве что без закраски, хотя и её условным форматом можно сделать или Power Query даст ответ. Пример из пары десятков строк двух таблиц дал бы пищку для размышлений и помощи. К стати, а почему 26000? лишнее тоже не стоит обсчитывать.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Суббота, 27.01.2018, 22:00
 
Ответить
Сообщение
но тут уж лучше пусть комп это делает
Вот тут возникает самый главный вопрос, может не циклом надо делать, а иными средствами . Вам что надо в итоге? У меня такое подозрение, что или формулы быстрее обработают, разве что без закраски, хотя и её условным форматом можно сделать или Power Query даст ответ. Пример из пары десятков строк двух таблиц дал бы пищку для размышлений и помощи. К стати, а почему 26000? лишнее тоже не стоит обсчитывать.

Автор - bmv98rus
Дата добавления - 27.01.2018 в 21:57
ovechkin1973 Дата: Суббота, 27.01.2018, 22:13 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
ормулы быстрее обработают

bmv98rus, не знаю, возможно. Но для меня не очень удобно. Ваш макрос из поста №5 показал, что считал 23:03:15... это видимо какой то баг.. с таймером.. не считал он сутки.. около часа примерно.
Макрос из сообщения №7 ругается на [vba]
Код
arr = Sheets("НКУ").Range(Cells(3, 23), Cells(25788, 23))
[/vba]
Прошу прощения, но на что ругается смогу сказать только завтра.. огромное спасибо за помощь и создателям этого форума.


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
ормулы быстрее обработают

bmv98rus, не знаю, возможно. Но для меня не очень удобно. Ваш макрос из поста №5 показал, что считал 23:03:15... это видимо какой то баг.. с таймером.. не считал он сутки.. около часа примерно.
Макрос из сообщения №7 ругается на [vba]
Код
arr = Sheets("НКУ").Range(Cells(3, 23), Cells(25788, 23))
[/vba]
Прошу прощения, но на что ругается смогу сказать только завтра.. огромное спасибо за помощь и создателям этого форума.

Автор - ovechkin1973
Дата добавления - 27.01.2018 в 22:13
Апострофф Дата: Суббота, 27.01.2018, 22:41 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 456
Репутация: 126 ±
Замечаний: 0% ±

Excel 1997
ругается на
[vba]
Код
arr = Sheets("НКУ").Range(Cells(3, 23), Cells(25788, 23))
[/vba]
Ругается он скорее всего на то, что не указан хозяин для ячеек
Cells(3, 23), Cells(25788, 23), а Sheets("НКУ") не является активным листом.
 
Ответить
Сообщение
ругается на
[vba]
Код
arr = Sheets("НКУ").Range(Cells(3, 23), Cells(25788, 23))
[/vba]
Ругается он скорее всего на то, что не указан хозяин для ячеек
Cells(3, 23), Cells(25788, 23), а Sheets("НКУ") не является активным листом.

Автор - Апострофф
Дата добавления - 27.01.2018 в 22:41
bmv98rus Дата: Суббота, 27.01.2018, 22:46 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4112
Репутация: 769 ±
Замечаний: 0% ±

Excel 2013/2016
Апострофф, правильно заметил ,я поспешил и влепил так.


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
СообщениеАпострофф, правильно заметил ,я поспешил и влепил так.

Автор - bmv98rus
Дата добавления - 27.01.2018 в 22:46
alex77755 Дата: Воскресенье, 28.01.2018, 09:39 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
не считал он сутки.. около часа примерно

работы макросу на этих данных без закраски несколько секунд
1. считать одну таблицу одной строкой в массив
2. загнать массив в словарь
3. считать в массив вторую таблицу
4. пробежаться по массиву 1 раз проверяя наличие в словаре. Если есть - ставить метку в 30 колонку
5. вывалить массив на лист



Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение
Цитата
не считал он сутки.. около часа примерно

работы макросу на этих данных без закраски несколько секунд
1. считать одну таблицу одной строкой в массив
2. загнать массив в словарь
3. считать в массив вторую таблицу
4. пробежаться по массиву 1 раз проверяя наличие в словаре. Если есть - ставить метку в 30 колонку
5. вывалить массив на лист


Автор - alex77755
Дата добавления - 28.01.2018 в 09:39
ovechkin1973 Дата: Воскресенье, 28.01.2018, 09:40 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Прикладываю файл для наглядности.. Применить маркрос и поста №7 так и не смог..
Елена - смотрел инфу по вашей ссылке. Разобраться не смог.. Точнее не представляю пока что с этим делать.. я про массивы. Я так понимаю у меня должно быть для ускорения выполнения моей задачи два двухмерных массива. По той ссылке, что вы дали самый первый пример помогает определиться с его размерами (моих знаний только на это пока хватило).. если я конечно правильно понял.
И еще пару багов обнаружил сделанных своими руками:
1. Я в 30 столбце хотел проставлять нумерацию найденных совпадений между листами.. т.е. если макрос нашел на обоих листах в 23 столбцах цифру 2 (Абакан), то и в 30 столбце номер должен быть одинаковый, который циклом проставляется.. У меня обои листы идентичны, я только на первом от Я до А фильтр сделал для проверки и не верно работает макрос..
2. На листе 2 (остальные сборочки) после срабатывания макроса не работам фильтр или сортировка по цвету.. на листе1 (НКУ) работает... чего я "накосячить" мог для этого? B маркос закрашивает все данные в столбце 1.. такого по задумке не должно быть.. т.е. получается на листе "остальные сборочки" он сразу красит не дожидаясь проверки?
3. Ну и это наверно не только цикл в цикле, т.е. двойной, а тройной надо делать.. Допустим из 1111 городов он находит совпадений 768 (столько закрашивается городов на листе НКУ)... Как сделать, чтобы нуменация найденных совпадений на обоих листах в столбце 30 была от 1 до 768 тогда?
К сообщению приложен файл: 3_2.xlsm (74.6 Kb)


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.

Сообщение отредактировал ovechkin1973 - Воскресенье, 28.01.2018, 09:44
 
Ответить
СообщениеПрикладываю файл для наглядности.. Применить маркрос и поста №7 так и не смог..
Елена - смотрел инфу по вашей ссылке. Разобраться не смог.. Точнее не представляю пока что с этим делать.. я про массивы. Я так понимаю у меня должно быть для ускорения выполнения моей задачи два двухмерных массива. По той ссылке, что вы дали самый первый пример помогает определиться с его размерами (моих знаний только на это пока хватило).. если я конечно правильно понял.
И еще пару багов обнаружил сделанных своими руками:
1. Я в 30 столбце хотел проставлять нумерацию найденных совпадений между листами.. т.е. если макрос нашел на обоих листах в 23 столбцах цифру 2 (Абакан), то и в 30 столбце номер должен быть одинаковый, который циклом проставляется.. У меня обои листы идентичны, я только на первом от Я до А фильтр сделал для проверки и не верно работает макрос..
2. На листе 2 (остальные сборочки) после срабатывания макроса не работам фильтр или сортировка по цвету.. на листе1 (НКУ) работает... чего я "накосячить" мог для этого? B маркос закрашивает все данные в столбце 1.. такого по задумке не должно быть.. т.е. получается на листе "остальные сборочки" он сразу красит не дожидаясь проверки?
3. Ну и это наверно не только цикл в цикле, т.е. двойной, а тройной надо делать.. Допустим из 1111 городов он находит совпадений 768 (столько закрашивается городов на листе НКУ)... Как сделать, чтобы нуменация найденных совпадений на обоих листах в столбце 30 была от 1 до 768 тогда?

Автор - ovechkin1973
Дата добавления - 28.01.2018 в 09:40
ovechkin1973 Дата: Воскресенье, 28.01.2018, 09:42 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
alex77755, Это мой первый макрос с циклом сделанный своими ручками.. я про пост №1.. То, что вы предлагаете я пока даже и осмыслить не могу..


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщениеalex77755, Это мой первый макрос с циклом сделанный своими ручками.. я про пост №1.. То, что вы предлагаете я пока даже и осмыслить не могу..

Автор - ovechkin1973
Дата добавления - 28.01.2018 в 09:42
alex77755 Дата: Воскресенье, 28.01.2018, 10:41 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
Прикладываю файл для наглядности

С этого всегда надо начинать. Уверен, что вопрос уже давно был бы решен
посмотрю сейчас


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Воскресенье, 28.01.2018, 10:41
 
Ответить
Сообщение
Цитата
Прикладываю файл для наглядности

С этого всегда надо начинать. Уверен, что вопрос уже давно был бы решен
посмотрю сейчас

Автор - alex77755
Дата добавления - 28.01.2018 в 10:41
ovechkin1973 Дата: Воскресенье, 28.01.2018, 11:40 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 429
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
С этого всегда надо начинать. Уверен, что вопрос уже давно был бы решен
посмотрю сейчас

Согласен.. вчера окрыленный тем, что хоть что то сам смог сделать элементарное пытался без примера решить проблему.. в итоге время потеряно ( не скажу, что зря).. нашел кучу ошибок..
Ошибки я устранил.. но похоже опять код по производительности ухудшил..
К сообщению приложен файл: __3.xlsm (86.0 Kb)


Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
 
Ответить
Сообщение
С этого всегда надо начинать. Уверен, что вопрос уже давно был бы решен
посмотрю сейчас

Согласен.. вчера окрыленный тем, что хоть что то сам смог сделать элементарное пытался без примера решить проблему.. в итоге время потеряно ( не скажу, что зря).. нашел кучу ошибок..
Ошибки я устранил.. но похоже опять код по производительности ухудшил..

Автор - ovechkin1973
Дата добавления - 28.01.2018 в 11:40
alex77755 Дата: Воскресенье, 28.01.2018, 11:54 | Сообщение № 20
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

без заливки, но быстро. С указанием номеров строк совпадения.
Нашлось 18 значений для которых нет совпадений
К сообщению приложен файл: 3_2_.xlsm (79.1 Kb)


Могу помочь в VB6, VBA
Alex77755@mail.ru


Сообщение отредактировал alex77755 - Воскресенье, 28.01.2018, 12:22
 
Ответить
Сообщениебез заливки, но быстро. С указанием номеров строк совпадения.
Нашлось 18 значений для которых нет совпадений

Автор - alex77755
Дата добавления - 28.01.2018 в 11:54
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!