作者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/cn.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