2006-11-26 11:13 用Range?用Cells?

指定儲存格有Range與Cells兩種方式。剛剛使用Excel VBA時我都用Cells,這是因為過去習慣使然。目前是盡量不使用Cells,為什麼呢?一方面覺得Range比較物件化,另一方面常常可以少宣告兩個索引用指標。這是個人觀點。

那到底使用哪個好呢?

所先大家最關心的應該是速度誰快。所以我花了大約三小時來測試,結果如下:


結果是不評論。

那使用哪一個方便呢?
若使用For Next,Cells方便;若使用For each Next,Range方便。
結論是各有優缺點。

哪一種用法比較容易了解呢?
若使用[R1C1]格式,Cells較清楚;[A1]格式,使用Range好像讓人家比較容易了解。事實上,Cells也可以像這樣Cells(2,"F")直接使用英文符號字串來表示欄號。這樣在[A1]格式上也很清楚了。
使用Cells只能指定單一儲存格Cells(I,j)或全部儲存格Cells;使用Range可以指定區域,當使用Range指定區域的時候,卻好像要配合Cells,看起來才會比較順眼!例如:
Ragne(Cells(2,2), Cells(10,6))

談到這裡有一點請注意,就是如上述的表示法容易造成錯誤。例如:

Sub Test()
    Sheet1.Range(Cells(2, 2), Cells(5, 5)).Value = 5
    Sheet2.Range(Cells(2, 2), Cells(5, 5)).Value = 10
End Sub

這程序一定會造成錯誤,為什麼?撰寫程式最好要清楚描述物件,我的意思是說上面所有的Cells並沒有清楚指出它是哪個工作表的儲存格。如果改成

Sub Test()
    Sheet1.Range(Sheet1.Cells(2, 2), Sheet1.Cells(5, 5)).Value = 5
    Sheet2.Range(Sheet2.Cells(2, 2), Sheet2.Cells(5, 5)).Value = 10
End Sub

就萬無一失了。進一步改進則如下

Sub Test()
    With Sheet1
        .Range(.Cells(2, 2), .Cells(5, 5)).Value = 5
    End With
    With Sheet2
        .Range(.Cells(2, 2), .Cells(5, 5)).Value = 10
    End With
End Sub

使用With End With結構,可以簡化代碼、可以加快速度、可以減少錯誤。請多多利用。

總之,用Range?用Cells?

平均分數:0 顆星    投票人數:0
我要評分:
回應
關鍵字
Google 的廣告
    沒有新回應!
累積 | 今日
loading......