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

Вход

Регистрация

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

 

= Мир MS Excel/Ускорить макрос - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорить макрос (Макросы/Sub)
Ускорить макрос
Donald Дата: Четверг, 05.04.2018, 11:33 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Есть макрос который удаляет текст в ячейке если он не жирный, можно ли как то ускорить? на 5к строк он работает около 20 минут , а у меня файлы по 100к строк.
[vba]
Код
Sub FilterBold()
Dim xRg As Range, xCell As Range
Dim xAddress As String
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select a range:", "Kutools for Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each xCell In xRg
If Not xCell.Font.Bold Then xCell.Delete '- если не жирный шрифт тогда-удалить
Next
Application.ScreenUpdating = True
End Sub
[/vba]
Спасибо


Сообщение отредактировал Donald - Четверг, 05.04.2018, 11:33
 
Ответить
СообщениеЕсть макрос который удаляет текст в ячейке если он не жирный, можно ли как то ускорить? на 5к строк он работает около 20 минут , а у меня файлы по 100к строк.
[vba]
Код
Sub FilterBold()
Dim xRg As Range, xCell As Range
Dim xAddress As String
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select a range:", "Kutools for Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each xCell In xRg
If Not xCell.Font.Bold Then xCell.Delete '- если не жирный шрифт тогда-удалить
Next
Application.ScreenUpdating = True
End Sub
[/vba]
Спасибо

Автор - Donald
Дата добавления - 05.04.2018 в 11:33
Mikael Дата: Четверг, 05.04.2018, 12:39 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 67
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
Donald, для начала попробуйте отключить
[vba]
Код
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
[/vba]

If Not xCell.Font.Bold Then xCell.Delete '- если не жирный шрифт тогда-удалить

Вы хотите очистить ячейку или удалить?
Очищается она так:
[vba]
Код
xCell.ClearContents
[/vba]
Приложите файл-пример
 
Ответить
СообщениеDonald, для начала попробуйте отключить
[vba]
Код
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
[/vba]

If Not xCell.Font.Bold Then xCell.Delete '- если не жирный шрифт тогда-удалить

Вы хотите очистить ячейку или удалить?
Очищается она так:
[vba]
Код
xCell.ClearContents
[/vba]
Приложите файл-пример

Автор - Mikael
Дата добавления - 05.04.2018 в 12:39
Hugo Дата: Четверг, 05.04.2018, 18:39 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2771
Репутация: 628 ±
Замечаний: 0% ±

Если отключение событий и пересчёта не даст результата - можно удалять данные не в ячейке, а в массиве, и в конце выгрузить массив на лист.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеЕсли отключение событий и пересчёта не даст результата - можно удалять данные не в ячейке, а в массиве, и в конце выгрузить массив на лист.

Автор - Hugo
Дата добавления - 05.04.2018 в 18:39
InExSu Дата: Пятница, 06.04.2018, 01:06 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 333
Репутация: 43 ±
Замечаний: 60% ±

Excel 2010
Привет!

 
Ответить
СообщениеПривет!


Автор - InExSu
Дата добавления - 06.04.2018 в 01:06
Mikael Дата: Пятница, 06.04.2018, 14:37 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 67
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
Удаление ячеек в этой задачке занимает 99% времени работы макроса

Я порылся в таком направлении:


и для очистки ячеек, вышло хорошо :) но метод
[vba]
Код
xRg.SpecialCells(xlCellTypeBlanks).Delete xlUp
[/vba]
все-таки туговат, потому что удаляет сразу очень много ячеек,

Поэтому, я посмотрел в сторону строки+массива, и получил при удалении ячеек прирост в скорости порядка 20%:

Но при очистке ячеек он проигрывает примерно в 2 раза

Так что первый лучше для очистки, второй - для удаления. В тестах участвовали 40к ячеек. Было весело :D
К сообщению приложен файл: ClearBoldCells.xlsm(20.4 Kb)
 
Ответить
СообщениеУдаление ячеек в этой задачке занимает 99% времени работы макроса

Я порылся в таком направлении:


и для очистки ячеек, вышло хорошо :) но метод
[vba]
Код
xRg.SpecialCells(xlCellTypeBlanks).Delete xlUp
[/vba]
все-таки туговат, потому что удаляет сразу очень много ячеек,

Поэтому, я посмотрел в сторону строки+массива, и получил при удалении ячеек прирост в скорости порядка 20%:

Но при очистке ячеек он проигрывает примерно в 2 раза

Так что первый лучше для очистки, второй - для удаления. В тестах участвовали 40к ячеек. Было весело :D

Автор - Mikael
Дата добавления - 06.04.2018 в 14:37
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорить макрос (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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