Вот ситуация: на моем листе Excel у меня был столбец с записями в форме 1-name. Я хотел удалить цифры, принимая во внимание, что число может также быть двузначным. Это само по себе не было проблемой, и я получил ее работу, просто производительность настолько плоха. Как и сейчас, моей программе требуется около половины секунды на запись в ячейку.Оптимизация для Excel
Мой вопрос: как я могу улучшить производительность? Вот код:
Sub remove_numbers()
Dim YDim As Long
Dim i As Integer, l As Integer
Dim val As String
Dim s As String
YDim = Cells(Rows.Count, 5).End(xlUp).Row
For i = 8 To YDim
val = Cells(i, 5)
l = Len(val)
s = Mid(val, 2, 1)
If s = "-" Then
val = Right(val, l - 2)
Else
val = Right(val, l - 3)
End If
Cells(i, 5).Value = val
Next i
End Sub
Деактивация ScreenUpdating (и, возможно, автоматический пересчет) для выполнения функции должна делать трюк. Оптимизация реального кода - по моему опыту - менее эффективный подход. (Хотя, тем не менее, желательно ...) –
@AlexanderKosubek Эффективность использования 3 функций для достижения чего-то, что вы делаете с одним, не может быть сопоставима. 'Application.Screenupdating' помогает немного, но дизайн кода - это то, на что вы должны обратить внимание. –
Я не хочу защищать неэффективный код, но когда вы находитесь в точке, где вы перебираете много ячеек, просто выключая '.ScreenUpdating' и' .Calculation', как правило, помогает больше, чем вкладывать какое-то время в серьезную оптимизацию ... - Вот почему я проголосовал за ваш ответ и не опубликовал свой комментарий как серьезный ответ ... –