Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1749|回复: 3

[已解决]多维数组怎么局部导出

[复制链接]
发表于 2016-1-9 07:48 | 显示全部楼层 |阅读模式
4万多行的表,有12列,用for循环单个导出太慢了,有2W多的文件,整个宏执行一个文件要10秒多。

假如 A = RANGE("A1:G2000")
要导出 数组A 当中 对应的“B20:F1000"区域的内容,怎么表示,

能直接这样写吗
B=A(20 TO 1000,2 TO 7)
[H1].RESIZE(ubound(B),5) = B

要数组的,不要FOR循环,太慢了
最佳答案
2016-1-9 08:39
本帖最后由 砂海 于 2016-1-9 08:41 编辑

除非是很整齐的数据块.

貌似 不可以. 总得循环.
不过 变量声明类型可以减少一个循环,且 对应数据类型会快一点.

模块级
type 记录
  姓名 as string
  语文 as byte
  数学 as single
end type

sub程序中
A = RANGE("A1:G2000")
dim 当年记录 (1 to 1000 ) as 记录, i& , j&
for i=20 to 1000
j=j+1
当年记录(i).姓名=A(i , 5)
当年记录(i).数学=A(i , 6)
当年记录(i).语文=A(i , 7)
next i

下面可以
当年合格记录(1)=当年记录(12)
一句写一整行数据

感觉 这一段 适合 本段数据 要复杂处理.

也许,可以把代码贴出来,高手优化一下.
发表于 2016-1-9 08:30 | 显示全部楼层
回复

使用道具 举报

发表于 2016-1-9 08:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 砂海 于 2016-1-9 08:41 编辑

除非是很整齐的数据块.

貌似 不可以. 总得循环.
不过 变量声明类型可以减少一个循环,且 对应数据类型会快一点.

模块级
type 记录
  姓名 as string
  语文 as byte
  数学 as single
end type

sub程序中
A = RANGE("A1:G2000")
dim 当年记录 (1 to 1000 ) as 记录, i& , j&
for i=20 to 1000
j=j+1
当年记录(i).姓名=A(i , 5)
当年记录(i).数学=A(i , 6)
当年记录(i).语文=A(i , 7)
next i

下面可以
当年合格记录(1)=当年记录(12)
一句写一整行数据

感觉 这一段 适合 本段数据 要复杂处理.

也许,可以把代码贴出来,高手优化一下.
回复

使用道具 举报

 楼主| 发表于 2016-1-9 08:51 | 显示全部楼层
dsmch 发表于 2016-1-9 08:30
B = RANGE("B20:F1000")

数组不单单是引用,而且是计算的,如果用数组读到内存中进行多次计算是很快的,如果每次读取单元格信息进行计算要慢死的

点评

用数组循环速度是最快的,用附件说明一下问题  发表于 2016-1-9 08:55
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 19:10 , Processed in 0.341999 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表