作者Kenchun (suu)
看板Visual_Basic
標題[VBA ] 微巨量資料處理
時間Tue Jun 18 17:18:34 2019
大家好,首發若有違反版規,還請見諒。
我目前需要以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?感覺明顯不成比例,應該不會耗盡才對?
所以想請問各位前輩們,遇到這種狀況如何解決,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.244.185.26 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1560849516.A.C1F.html
1F:→ newton41: Excel的有些版本有記憶體限制,可能換成64bit版本會改善 06/18 18:14
2F:→ newton41: 。 06/18 18:14
3F:→ Kenchun: 您好,我自己本身已經使用Office 2019 64位元版本了QQ 06/18 22:36
4F:→ Kenchun: 不知道有沒有修改內部設定的方式可以解除限制 06/18 22:36
5F:→ MOONRAKER: 自己寫個for each跑26萬筆卡實在 06/19 10:26
6F:→ Kenchun: 我之前是使用for loop的方式一個一個跑,但發現所需時間 06/19 11:56
7F:→ Kenchun: 過久,不如我自己手動使用filter,而在這樣做之後想到可 06/19 11:57
8F:→ Kenchun: 以錄巨集,就錄了,但手動並不會發生這種狀況@@ 06/19 11:57
9F:→ newton41: 有試著把後面copypaste的部分拿掉測試看看是不是問題出 06/19 14:07
10F:→ newton41: 在filter上嗎?如果把需要做filter的範圍指定好會不會也 06/19 14:07
11F:→ newton41: 有幫助。 06/19 14:07
12F:→ newton41: 用loop的方式不要用copypaste而是用傳值的方式效果應該 06/19 14:08
13F:→ newton41: 會改善。 06/19 14:08
14F:推 Marty: SELECT => COPY => PASTE => GG 06/21 09:44