標題:
[發問]
CELLS(1,1)和 .[a1]的問題.
[打印本頁]
作者:
dou10801
時間:
2021-10-4 14:18
標題:
CELLS(1,1)和 .[a1]的問題.
請教各位先進,CELLS(1,1)和 .[a1]的區別,如附件(COPY ).為何用cells()是表示=工作表1,為何.[a1]=工作表2,感恩.
作者:
ML089
時間:
2021-10-4 14:51
為何用cells()是表示=工作表1,
在 工作表1 執行程式,工作表1 為啟用狀態,所以 CELLS()為工作表1
你可以試試開啟 工作表3,A1:A20 輸入其他資料,按 ALT-F11 在執行程式,CELLS()為工作表3
為何.[a1]=工作表2
因為 With Sheets("工作表2") ... End With 裡面以 .開頭的儲存格設定為工作表2
作者:
quickfixer
時間:
2021-10-4 16:35
回復
1#
dou10801
還有一種不同,2個寫法速度差超很多的
在學習各位高手的程式碼發現,01的文章都用cell()比較多,這裡大家都愛用[]
用[]只是程式碼漂亮,不管寫入還是讀取都慢
真搞不懂為什麼大家都愛用慢的:(
試試看,+rnd(),是避免快取影響結果
Sub 讀()
Dim rr As Double
Dim s As Double
Dim cc As Double
Range("a1") = 1
s = Timer
For rr = 1 To 99999
cc = Cells(1, 1) + Rnd(Timer)
Next rr
MsgBox "讀cells(1,1)=" & Timer - s
s = Timer
For rr = 1 To 99999
cc = [a1] + Rnd(Timer)
Next rr
MsgBox "讀[a1]=" & Timer - s
End Sub
Sub 寫()
Dim rr As Double
Dim s As Double
Application.ScreenUpdating = False
s = Timer
For rr = 1 To 99999
Cells(1, 1) = rr + Rnd(Timer)
Next rr
Application.ScreenUpdating = True
MsgBox "寫cells(1,1)=" & Timer - s
Application.ScreenUpdating = False
s = Timer
For rr = 1 To 99999
[a1] = rr + Rnd(Timer)
Next rr
Application.ScreenUpdating = True
MsgBox "寫[a1]=" & Timer - s
End Sub
作者:
ML089
時間:
2021-10-4 17:59
回復
3#
quickfixer
指令 執行 秒 倍數
讀cells(1,1)= 0.17578125
讀[a1]= 2.4765625 14.09
寫cells(1,1)= 2.26953125
寫[a1]= 5.5078125 2.43
執行 99999次
讀的效率差很多,感謝提醒
作者:
dou10801
時間:
2021-10-5 16:32
回復
2#
ML089
感謝ML089版主指點,原先因CELLS()包在[WITH--工作表2]裡面,不知對應那個工作表,現在懂了,感恩.
作者:
dou10801
時間:
2021-10-5 16:36
回復
3#
quickfixer
懂了原理且了解[]的用途及速度差異,感思.
作者:
linyancheng
時間:
2021-10-6 13:27
回復
3#
quickfixer
倒是沒注意過速度問題,
不過都用cells(), 因為不用算第幾欄到底是哪個英文字母,還有cells()可以代入運算式,[A1]麻煩。
連Range("1:1,3:3")這種都幾乎不用,會用union(columns(1),columns(3))
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)