[VBA ] 微巨量資料處理

作者: Kenchun (suu)   2019-06-18 17:18:34
大家好,首發若有違反版規,還請見諒。
我目前需要以VBA處理rows=26萬,col = 70的大量資料。
因為所需資料其實只是database的九牛一毛,所以我打算利用VBA autofilter功能先篩選出我要的(約3600筆)
爬了很多文後發現用內建的filter以及複製「可見儲存格」的方式,似乎蠻可行的。
但由於需要撰寫成VBA Code,所以利用巨集方式自動生成code,如下:
Worksheets(1).UsedRange.AutoFilter Field:=19, Criteria1:="<>0"
Worksheets(1).UsedRange.AutoFilter Field:=66, Criteria1:=Array("condition_1", "condition_2", "condition_3"), Operator:=xlFilterValues
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("工作表1").Select
Sheets("工作表1").Cells.Select
Sheets("工作表1").Paste
不知道是不是我的資料量太大了,所以跳出錯誤:
「沒有足夠的記憶體可以完成此動作」
但是我的電腦記憶體有16G?感覺明顯不成比例,應該不會耗盡才對?
所以想請問各位前輩們,遇到這種狀況如何解決,謝謝!
作者: newton41 (Newton)   2019-06-18 18:14:00
Excel的有些版本有記憶體限制,可能換成64bit版本會改善。
作者: Kenchun (suu)   2019-06-18 22:36:00
您好,我自己本身已經使用Office 2019 64位元版本了QQ不知道有沒有修改內部設定的方式可以解除限制
作者: MOONRAKER (㊣牛鶴鰻毛人)   2019-06-19 10:26:00
自己寫個for each跑26萬筆卡實在
作者: Kenchun (suu)   2019-06-19 11:56:00
我之前是使用for loop的方式一個一個跑,但發現所需時間過久,不如我自己手動使用filter,而在這樣做之後想到可以錄巨集,就錄了,但手動並不會發生這種狀況@@
作者: newton41 (Newton)   2019-06-19 14:07:00
有試著把後面copypaste的部分拿掉測試看看是不是問題出在filter上嗎?如果把需要做filter的範圍指定好會不會也有幫助。用loop的方式不要用copypaste而是用傳值的方式效果應該會改善。
作者: Marty (DNA探針)   2019-06-21 09:44:00
SELECT => COPY => PASTE => GG

Links booklink

Contact Us: admin [ a t ] ucptt.com