Board logo

標題: [發問] 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/)