无忧启动论坛

标题: (分享)VBA中不规则嵌套数组转为二维数组 [打印本页]

作者: likeyouli    时间: 2024-5-6 16:17
标题: (分享)VBA中不规则嵌套数组转为二维数组
本帖最后由 likeyouli 于 2024-5-6 16:22 编辑

见图,  t1为一个不规则嵌套数组,t1(0)对应0-6 7个元素,t1(1)对应0-9 10个元素,后边的t1(n)可能会对应20个元素,
如果使用Transpose两次转置,即:t = WorksheetFunction.Transpose(WorksheetFunction.Transpose(t1)) 会提示错误,,当然就是不提示错误,一般也不提倡用transpose,原因是transpose有很多限制,比如限制数量不超过6万多,元素的内容不超过多少字节什么的。

sub 不规则嵌套转二维()
dim t(), t1()
'重新定义二维数组,t1其实是一个一维数组的嵌套,ubound(t1)可以显示出t1第一个元素的最大数量,但ubound(t1,2)却不行,因为t1不是二维数组。下边用的30,其实只要是用一个大点的数,只要大于等于t1第二个括号中最大的数就行。
redim t(1 to ubound(t1), 30)
for z= 0 to ubound(t1)  '用z循环t1的第一个括号
   for each ss in t1(z)  '这里是重点,也就是数组t1的第一个括号对应的内容我看成一个集合。这里只能用for each,因为不能确定第二个括号的元素数量。
   e = e+1
  t(z+1,e)=ss
   next ss
   e=0 '这里的e其实就是为了确定t1第二个括号的元素数量
next z
Range("a1").Resize(UBound(t), UBound(t, 2)) = t  '最后将数组t写入单元格即可
end sub

..png (21.63 KB, 下载次数: 1)

..png

作者: yyz2191958    时间: 2024-5-6 16:22
谢谢分享
作者: 邪恶海盗    时间: 2024-5-6 16:35
复杂的系统还是别用VBA的好,或者用更简单一些方式来实现...
作者: likeyouli    时间: 2024-5-6 17:17
邪恶海盗 发表于 2024-5-6 16:35
复杂的系统还是别用VBA的好,或者用更简单一些方式来实现...

excel中的数据不用vba用啥?
   数据量很大的时候,我也曾导入到sql server或oracle中,用select语句查询,,但这次就几十万条数据,用数组或字典完全够用,没必要惊动数据库。其它的,python我不会,别的我就想不到能用什么了。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3