不需要計算的時候, 關計算。(Application.Calculation = xlCalculationManual)。中間需要calculate的話,可以用sheet.calculate range.calculate 做區域性計算。 執行關screen update (Application.ScreenUpdating = False) 執行關event (Application.EnableEvents = False) 減少寫入單元格的次數,儘量批次寫入,loop儘量在array裡面做。例子:Filter 陣列,join然後用instr 搜查速度極快. 不用select,儘量避免activate。 Copy直接可以用 range(a).value=range(b).value, 如果value不是日期,還可以用value2代替 value。配合使用resize設定目標單元格區域比較方便,例子: 儘量用autofilter, advancedfilter, find 代替迴圈。 用迴圈的話,for each item in object 型的迴圈 又比其他迴圈要好一些。預先排序在做搜尋(match, vlookup),速度會快很多。 Define 變數種類 Excel 的自動Table計算和操作都比較慢。 暫時想到這麼多。1,2,3 記得最後程式結束的時候要開回來。還有error 處理用標籤的話,標籤內也要開回來。
不需要計算的時候, 關計算。(Application.Calculation = xlCalculationManual)。中間需要calculate的話,可以用sheet.calculate range.calculate 做區域性計算。 執行關screen update (Application.ScreenUpdating = False) 執行關event (Application.EnableEvents = False) 減少寫入單元格的次數,儘量批次寫入,loop儘量在array裡面做。例子:Filter 陣列,join然後用instr 搜查速度極快. 不用select,儘量避免activate。 Copy直接可以用 range(a).value=range(b).value, 如果value不是日期,還可以用value2代替 value。配合使用resize設定目標單元格區域比較方便,例子: 儘量用autofilter, advancedfilter, find 代替迴圈。 用迴圈的話,for each item in object 型的迴圈 又比其他迴圈要好一些。預先排序在做搜尋(match, vlookup),速度會快很多。 Define 變數種類 Excel 的自動Table計算和操作都比較慢。 暫時想到這麼多。1,2,3 記得最後程式結束的時候要開回來。還有error 處理用標籤的話,標籤內也要開回來。