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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2017, 12:41   #1
dendodor
 
Регистрация: 13.02.2017
Сообщений: 3
Вопрос оптимизация кода макроса

Добрый день. Заранее прошу камнями не бросаться в меня, ибо не программист я))). Есть следующая задача: в excel есть след столбцы:
1 - подразделение
2 - ФИО
3 и послед. - это некие данные

Так вот идет группировка по подразделению и ФИО, т.е. заполняется один раз и далее просто не заполняется ячейка в этом столбце до тех пор, пока не меняются данные в этом столбце.

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

Sub macros1()

Dim i As Long

i = 3
Do While IsEmpty(Cells(i, 3).Value) = False


If Cells(i, 2) = "" Then
Range(Cells(i - 1, 1), Cells(i - 1, 2)).Copy Cells(i, 1)
ElseIf Cells(i, 2) <> 0 And Cells(i, 1) = "" Then
Cells(i - 1, 1).Copy Cells(i, 1)
End If

i = i + 1
Loop

End Sub
dendodor вне форума Ответить с цитированием
Старый 20.02.2017, 14:29   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Посмотрите здесь способ попроще
http://www.planetaexcel.ru/techniques/2/96/

там в комментах к статье есть примеры кода

вот, например:
Код:
Sub FillEmtyCells()
    With ActiveSheet.UsedRange
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        .Formula = .Value
    End With
End Sub
если надо только для 2 первых столбцов, - то так:
Код:
Sub FillEmtyCells()
    With intersect(ActiveSheet.UsedRange, range("a:b"))
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
        .Formula = .Value
    End With
End Sub
EducatedFool вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизация макроса в excel dendodor Microsoft Office Excel 3 20.02.2017 13:55
Оптимизация макроса Intension Microsoft Office Excel 8 12.08.2013 17:30
Оптимизация кода на C# FiloXSee Общие вопросы .NET 4 24.09.2011 17:10
Оптимизация времени исполнения макроса basil0 Microsoft Office Excel 12 06.12.2010 10:20
Оптимизация кода Shouldercannon Общие вопросы Delphi 23 22.07.2010 22:45