[VBA ] 比對文件用陣列和用cells..時間差很多

看板Visual_Basic作者 (小建)時間14年前 (2012/01/25 02:21), 編輯推噓0(008)
留言8則, 4人參與, 最新討論串1/1
最近我遇到一個疑問... 如果我要筆對兩個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

01/25 12:00, , 1F
大概因為cells()涉及物件的操作所以較慢。
01/25 12:00, 1F

01/25 16:57, , 2F
你的if條件就可以在精簡了
01/25 16:57, 2F

01/26 20:02, , 3F
我把上面改寫成陣列的方式..程式執行快非常非常多..
01/26 20:02, 3F

01/26 20:02, , 4F
我之前有看到別人寫一個程式..去填滿整個sheet儲存格...
01/26 20:02, 4F

01/26 20:03, , 5F
用陣列大約40秒...用cells大約要900秒..
01/26 20:03, 5F

01/26 22:38, , 6F
你到底是講陣列還是矩陣…
01/26 22:38, 6F

01/27 18:29, , 7F
抱歉..我要表達的應該是陣列
01/27 18:29, 7F
※ 編輯: zchien 來自: 114.40.69.95 (01/27 18:31)

01/27 19:06, , 8F
陣列是直接記憶體存取 cells還要經過物件的屬性去存取...
01/27 19:06, 8F
文章代碼(AID): #1F7lQw18 (Visual_Basic)
文章代碼(AID): #1F7lQw18 (Visual_Basic)