Добрый день. Прошу Вас подскажите как можно ускорить работу части макроса. Во вложении пример где уже стоит полный текст макроса. при нажатии клавиши он совершит работу и выдаст затраченное время.
Код
Gran = Evaluate("COUNTA(E6:E2708)+9") ' определяю границу обрабатываемых ячеек по наличию в ней каких либо данных
For Each ccel In Range("n9:n" & Gran) ' цикл
Set d = ccel.Offset(0, -2) 'объявление переменных
Set g = ccel.Offset(0, -7)
Set j = ccel.Offset(0, -3)
Set k = ccel.Offset(0, -4)
If ccel = "Да" Then ' проверяем если"Да" в определенной ячейке
d.FormulaR1C1 = "=RC[1]" ' выполняем действие с ячейкой (очистка или вставка формулы или смена формата
j.Clear
k.Clear
Else
g.Value = Round(g.Value, 2) ' выполняем действие с ячейкой (очистка или вставка формулы или смена формата
g.NumberFormat = "General"
End If
Next ccel 'переходим к следующей
Не перебирать ячейки, работать с массивами. Это ответ точно по названию темы. Ответ получен? В первоим сообщении нужно описывать задачу. Где оно? Гне пример, на котором помогающие смогут поверять макрос?
Можно начать с логики: If ccel = "Да" Then - вот тогда и есть смысл ставить формулу и очищать диапазоны. Ну а в другом случае - округлять и ставить формат. И переменные тут вообще не нужны!
Спасибо. На 20% времени уменьшилось. Если конечно правильно Вас понял. Может надо на что-то заменить синтаксис
Код
Offset(0, -2)
У меня получилось так. Это Вы имели введу?
Код
Gran = Evaluate("COUNTA(E6:E2708)+9")
For Each ccel In Range("n9:n" & Gran)
If ccel = "Да" Then
ccel.Offset(0, -2).FormulaR1C1 = "=RC[1]"
ccel.Offset(0, -7).Clear
ccel.Offset(0, -4).Clear
Else
ccel.Offset(0, -7).Value = Round(ccel.Offset(0, -7).Value, 2)
ccel.Offset(0, -7).NumberFormat = "General"
End If
Next ccel