作者zchien (小建)
看板Visual_Basic
標題[VBA ] 比對文件用陣列和用cells..時間差很多
時間Wed Jan 25 02:21:44 2012
最近我遇到一個疑問...
如果我要筆對兩個sheet頁面
sheet1有兩百筆資料...sheet2有1萬筆資料
sheet1每一筆資料..都要和sheet2 1萬筆資料去比..再把相異點匯出
但是我發現一個問題
原本我是用cells寫一個迴圈去比...
需要大約3~4分鐘
For i = 1 To 200
For j = 1 To 10000
If Worksheets(sheet2).Cells(j, 1) = Cells(i, 1) And Cells(i, 1) <> "" Then
If Worksheets(sheet2).Cells(j, 2) <> Cells(i, 2) Then
Worksheets("不同的").Cells(k, m) = Cells(i, 1)
Worksheets("不同的").Cells(k, m + 1) = Cells(i, 2)
Worksheets("不同的").Cells(k, m + 2) = Worksheets(sheet2).Cells(j, 2)
k = k + 1
End If
End If
Next j
Next i
但是我看到一個類似的巨集...是用陣列去比較的
卻只要幾秒鐘....
這差別是什麼呢...
就我的認知...不是都是用系統記憶體去當暫存嗎???
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.213.140
→ MOONRAKER:大概因為cells()涉及物件的操作所以較慢。 01/25 12:00
→ auxmathew:你的if條件就可以在精簡了 01/25 16:57
→ zchien:我把上面改寫成陣列的方式..程式執行快非常非常多.. 01/26 20:02
→ zchien:我之前有看到別人寫一個程式..去填滿整個sheet儲存格... 01/26 20:02
→ zchien:用陣列大約40秒...用cells大約要900秒.. 01/26 20:03
→ MOONRAKER:你到底是講陣列還是矩陣… 01/26 22:38
→ zchien:抱歉..我要表達的應該是陣列 01/27 18:29
※ 編輯: zchien 來自: 114.40.69.95 (01/27 18:31)
→ fumizuki:陣列是直接記憶體存取 cells還要經過物件的屬性去存取... 01/27 19:06