Board logo

標題: [發問] 請問UsedRange.Rows.Count與End(xlUp).Row在處理上結果會有所不同嗎? [打印本頁]

作者: c_c_lai    時間: 2012-4-3 09:26     標題: 請問UsedRange.Rows.Count與End(xlUp).Row在處理上結果會有所不同嗎?

請教大大:
ActiveSheet.UsedRange.Rows.Count  與  Range("B" & Rows.Count).End(xlUp).Row
兩種方式在實務處理上,其最後執行結果會有所不同嗎? 執行速度何者為優?
作者: register313    時間: 2012-4-3 11:06

回復 1# c_c_lai


ActiveSheet.UsedRange.Rows.Count  與  Range("B" & Rows.Count).End(xlUp).Row
1.兩種方式在實務處理上,其最後執行結果會有所不同嗎?
  (1) ActiveSheet.UsedRange.Rows.Count    所有使用儲存格所組成四方形區域之最後一列之列號
  (2) Range("B" & Rows.Count).End(xlUp).Row   B欄所使用儲存格之最後一格之列號
  兩者傳回之列號有時相同,有時不同,依實際儲存格使用情形而定
  應舉範例才能確定

2. 執行速度何者為優?  
   這應該沒那麼重要吧
  只要整個程式的語法,邏輯沒問題,大部份執行速度都可以接受的
作者: c_c_lai    時間: 2012-4-3 11:49

資料列累積多了,執行速度難道不會受影響嗎? 況且程式碼本身不只是只有執行此項而已,
譬如它還同時段要執行 DDE 的資料匯入,執行速度相差無幾是都可以接受的。
如大大所言,應該是 Range("B" & Rows.Count).End(xlUp).Row 方式稍快些,
Block 與 Lines 之處理或許後者為快吧! 多謝您的指導!
作者: c_c_lai    時間: 2012-4-3 20:22

經過實際資料處理後,我把觀察兩種不同方式執行之結果敘述如下,以期幫助其他尚須瞭解的同學們來共同分享:

' 目前實際完整匯入資料範圍為: A1:Z1712  ;  但是從 X1:Z2000 欄位儲存的是計算公式(估計最多資料項為 2000 列,所以從 X1713:Z2000 其欄位值均為 0)
' 傳回 2000 列,轉述register313回帖:所有使用儲存格所組成四方形區域之最後一列之列號
' 傳回 1712 列,轉述register313回帖:B 欄所使用儲存格之最後一格之列號
  1. Sub Test()
  2.     Dim total_row As Single
  3.    
  4.        Cells(2, 22).Value = ActiveSheet.UsedRange.Rows.Count         
  5.        Cells(2, 23).Value = Range("B" & Rows.Count).End(xlUp).Row   
  6. End Sub
複製代碼
  1.     ' 執行結果:
  2.     '
  3.     '            V (22)     W (23)
  4.     '     1    --------------------            
  5.     '     2      2000            1712                ' 1712 為實際匯入資料之行數
  6.     '     3            
複製代碼
所以在此時實務處理上, 如採以 ActiveSheet.UsedRange.Rows.Count  方式,尚須再次過濾部分空白與非真實匯入資料的問題列。
再次感謝大大的解說!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)