2011-09-14 56 views
1

好,我有很多的字符串操作一樣哪個更快,可變或直接訪問單元值?

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循環。問題是將單元格值存儲在字符串中,並且訪問更好更快?或者寫入宏中的activesheet單元格值本身更快?

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

哪個更好哪個更優化,我有點想,如果我們提到它去片和拿回來的單元格的值,但如果我們把它存儲在變量,那麼它可能會更快。我只需要知道哪個更好?

+0

如果你是不知道,如果句子包括3項,雖然它是更多的代碼行,使用instr在替換之前查看字符是否存在會更快。即使沒有替換,替換也是一項成本很高的操作。 – aevanko

+0

如果您正在進行大量的字符串操作,那麼值得查看正則表達式。 – Reafidy

回答

6

訪問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 
+1

除了Issun說的,「點」的數量也影響速度。我會更進一步說,如果你訪問的東西超過_once_,你應該創建一個變量。 – JimmyPena

+0

+1對於一次獲得範圍的建議!快多了。 –

+0

尼斯的解釋接受你的2人同樣的平面視圖:) – niko

相關問題