что быстрее, переменная или прямой доступ к значению ячейки? - PullRequest
1 голос
/ 14 сентября 2011

ну, у меня есть много манипуляций со строками, таких как

1st one
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, ",", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "/", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "&", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "(", " ")
2nd one
store=ActiveSheet.Cells(i, "B").Value
store= Replace(store, "/", " ")
store = Replace(store, "&", " ")
store = Replace(store, "(", " ")

и некоторые операции обрезки, а иногда поиск длины строки и иногда сравнение.

Я должен выполнить цикл для ячеек с 1 по 4000.Вопрос в том, чтобы хранить значение ячейки в строке и доступ к нему стал лучше и быстрее?или запись значения ячейки активного листа в макросе сама по себе быстрее?

store = activesheet.cells(i,"B").value and use store everywhere 
or write activesheet.cells(i,"B").value everywhere?

Что лучше, что более оптимизировано? Я подумал, если мы упомянем значение ячейки, которое нужно перейти на лист и вернуть его обратно, ноесли мы будем хранить его в переменной, то это может быть быстрее.Мне просто нужно знать, что лучше?

1 Ответ

6 голосов
/ 14 сентября 2011

Доступ к Excel медленный. Хранение вещей, к которым вы получите доступ более двух раз, в переменной всегда будет быстрее, а выгрузка диапазона ячеек (один вызов Excel) в массив вариантов еще лучше.

Помните, Excel и VBA - это не одно и то же. Это как два парня в одной квартире, но в разных комнатах. Каждый раз, когда вы получаете доступ к Excel, VBA стучится в дверь Excel.

Обновление : Выше приведен общий совет для всего кода. Что касается приведенного выше конкретного кода и того, что вы делаете, на самом деле может быть быстрее использовать функции поиска и замены Excel в диапазоне, например:

Sub test()

Application.ScreenUpdating = False
With Range("B1:B4000")
    .Replace what:="(", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    .Replace what:="&", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    .Replace what:="/", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End With
Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...