返回列表 上一主題 發帖

[發問] CELLS(1,1)和 .[a1]的問題.

[發問] CELLS(1,1)和 .[a1]的問題.

請教各位先進,CELLS(1,1)和 .[a1]的區別,如附件(COPY ).為何用cells()是表示=工作表1,為何.[a1]=工作表2,感恩.

CELLS測試.rar (14.32 KB)

杜小平

為何用cells()是表示=工作表1,
在 工作表1 執行程式,工作表1 為啟用狀態,所以 CELLS()為工作表1
你可以試試開啟 工作表3,A1:A20 輸入其他資料,按 ALT-F11 在執行程式,CELLS()為工作表3

為何.[a1]=工作表2
因為 With Sheets("工作表2") ... End With 裡面以 .開頭的儲存格設定為工作表2
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 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

TOP

回復 3# quickfixer

指令                執行 秒                   倍數
讀cells(1,1)=        0.17578125       
讀[a1]=                2.4765625          14.09
寫cells(1,1)=        2.26953125       
寫[a1]=                5.5078125          2.43
執行 99999次

讀的效率差很多,感謝提醒
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 2# ML089 感謝ML089版主指點,原先因CELLS()包在[WITH--工作表2]裡面,不知對應那個工作表,現在懂了,感恩.
杜小平

TOP

回復 3# quickfixer 懂了原理且了解[]的用途及速度差異,感思.
杜小平

TOP

回復 3# quickfixer

倒是沒注意過速度問題,
不過都用cells(), 因為不用算第幾欄到底是哪個英文字母,還有cells()可以代入運算式,[A1]麻煩。
連Range("1:1,3:3")這種都幾乎不用,會用union(columns(1),columns(3))
Word呈現極致的靜態之美,Excel展現極致的動態之美。

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題