第壹點很簡單。對於i=11 ti h循環,不檢查單元格,而是先將第五列的內容存儲在數組中,檢查是否應該隱藏在數組中。隱藏的算法也進行了優化,即根據是否相等來判斷是否隱藏在變量X中,然後檢測那壹行的狀態是否與X相同,只有不同時,減少處理次數。優化後的代碼如下:
選項?明確的
私人?Sub?工作表_更改(ByVal?目標?作為?範圍)
暗淡?s,?h,?我,?啊?x
如果?目標。地址?=?範圍(“P5”)。地址?然後
s?=?範圍(“P5”)。價值
h?=?使用範圍。行數。計數
如果?(修剪)?=?“全部”?還是?修剪?=?"")?然後
Rows("10:"?& amp?h)。隱藏?=?錯誤的
其他
申請。屏幕更新?=?錯誤的
arr?=?範圍(單元格(1,5),?細胞(h,?5))
為了什麽?我?=?11?去哪?h
x?=?arr(我,?1)?& lt& gt?s
如果?行(I)。隱藏?& lt& gt?x?然後呢?行(I)。隱藏?=?x
然後
申請。屏幕更新?=?真實的
結束?如果
結束?如果
結束?Sub上面的代碼通過從數組判斷來減少取數時間,在隱藏/顯示行之前檢查狀態應該有壹定效果,減少處理時間。
代碼還可以進壹步優化,逐行掃描隱藏顯示的操作還是很費時間的。進壹步優化的思路是壹片壹片的加工。比如從上萬行中篩選出只需要顯示幾行(極端的壹行)的時候,在最佳狀態下只需要執行三次:第壹段隱藏,中間段顯示,最後段隱藏,這樣就可以把上萬次的表格界面操作減少到三次,效果大大增強。但是代碼會很長很復雜,會用壹系列變量來記錄當前行應該隱藏還是顯示,但不會馬上處理,繼續判斷下壹行;如果要求的加工與上壹個相同,記錄要加工的範圍,繼續下壹行判斷;如果所需的處理與之前的不同,執行之前的操作並重新記錄。