Excel精英培训网

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

[已解决]数组ReDim arr值最大支持多少

[复制链接]
发表于 2022-3-18 11:57 | 显示全部楼层 |阅读模式
  1. Sub 竖C() '--竖向输出1

  2.     '

  3.     Dim data, arr(), I As Integer, J As Integer, k As Single

  4.     '指定Sheets("C")页面

  5.     data = Sheets("C").Range("B2:CKU2475").Value '--指定区域

  6.     ReDim arr(1 To 16370)

  7.     For I = 1 To UBound(data)

  8.         For J = 1 To UBound(data, 2)

  9.             If data(I, J) <> "" Then

  10.                 k = k + 1

  11.                 arr(k) = data(I, J)

  12.             End If

  13.         Next

  14.     Next

  15.     Range("A2").Resize(k, 1) = Application.Transpose(arr) '--竖向输出

  16. End Sub
复制代码
上面代码:是数据转竖向输出
ReDim arr(1 To 16370) 中16370改大于10万就出错误13
有时内存溢出
运行内存是32GB
求大佬帮忙改下,想要数组最大支持值,能达到行值100万个数据



最佳答案
2022-3-18 21:14
love586 发表于 2022-3-18 15:27
可我不会vb啊,都是乱改,能帮忙弄一下吗,谢谢

代码更改如下:
  1. Sub 竖C() '--竖向输出1
  2.     Dim data, arr(), I As Long, J As Long, k As Long
  3.     '指定Sheets("C")页面
  4.     data = Sheets("C").Range("B2:CKU2475").Value '--指定区域
  5.     ReDim arr(1 To 200000, 1 To 1)
  6.     For I = 1 To UBound(data)
  7.         For J = 1 To UBound(data, 2)
  8.             If data(I, J) <> "" Then
  9.                 k = k + 1
  10.                 arr(k, 1) = data(I, J)
  11.             End If
  12.         Next
  13.     Next
  14.     Range("A2").Resize(k, 1) = arr
  15. End Sub
复制代码


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-3-18 13:39 | 显示全部楼层
重点应该是 "Transpose"吧 ,
这个范围应该不太大
回复

使用道具 举报

 楼主| 发表于 2022-3-18 13:51 | 显示全部楼层
砂海 发表于 2022-3-18 13:39
重点应该是 "Transpose"吧 ,
这个范围应该不太大

怎么改的,转置数据大于30万,这里Transpose就出错
回复

使用道具 举报

发表于 2022-3-18 14:19 | 显示全部楼层
Dim  arr()
...
ReDim arr(1 To 16370)
...
Range("A2").Resize(k, 1) = Application.Transpose(arr) '--竖向输出
=============================================
在提前不知道数组 大小的情况下 才 dim arr() , 再 Redim

本题中
直接
dim arr(1 to 16370 , 1 to 1) 就可以,
...
结果也不用 , .Transpose
回复

使用道具 举报

 楼主| 发表于 2022-3-18 14:51 | 显示全部楼层
砂海 发表于 2022-3-18 14:19
Dim  arr()
...
ReDim arr(1 To 16370)
  1. Sub 竖C() '--竖向输出1
  2.     '
  3.     Dim data, arr(1 To 16370, 1 To 1), I As Integer, J As Integer, k As Single
  4.     '指定Sheets("C")页面
  5.     data = Sheets("C").Range("B2:CKU2475").Value '--指定区域
  6.     For I = 1 To UBound(data)
  7.         For J = 1 To UBound(data, 2)
  8.             If data(I, J) <> "" Then
  9.                 k = k + 1
  10.                 arr(k) = data(I, J)
  11.             End If
  12.         Next
  13.     Next
  14.     Range("A2").Resize(k, 1) = Application(arr) '--竖向输出
  15. End Sub
复制代码
改后arr(k) = data(I, J)维数错误

回复

使用道具 举报

发表于 2022-3-18 15:24 | 显示全部楼层
love586 发表于 2022-3-18 14:51
改后arr(k) = data(I, J)维数错误

arr(k)不对,你定义 的是arr(,)
回复

使用道具 举报

 楼主| 发表于 2022-3-18 15:27 | 显示全部楼层
roserice 发表于 2022-3-18 15:24
arr(k)不对,你定义 的是arr(,)

可我不会vb啊,都是乱改,能帮忙弄一下吗,谢谢
回复

使用道具 举报

发表于 2022-3-18 21:14 | 显示全部楼层    本楼为最佳答案   
love586 发表于 2022-3-18 15:27
可我不会vb啊,都是乱改,能帮忙弄一下吗,谢谢

代码更改如下:
  1. Sub 竖C() '--竖向输出1
  2.     Dim data, arr(), I As Long, J As Long, k As Long
  3.     '指定Sheets("C")页面
  4.     data = Sheets("C").Range("B2:CKU2475").Value '--指定区域
  5.     ReDim arr(1 To 200000, 1 To 1)
  6.     For I = 1 To UBound(data)
  7.         For J = 1 To UBound(data, 2)
  8.             If data(I, J) <> "" Then
  9.                 k = k + 1
  10.                 arr(k, 1) = data(I, J)
  11.             End If
  12.         Next
  13.     Next
  14.     Range("A2").Resize(k, 1) = arr
  15. End Sub
复制代码


评分

参与人数 1学分 +2 收起 理由
love586 + 2 学习了

查看全部评分

回复

使用道具 举报

发表于 2022-3-18 21:24 | 显示全部楼层
love586 发表于 2022-3-18 15:27
可我不会vb啊,都是乱改,能帮忙弄一下吗,谢谢

transpose是EXCEL的内置函数,它的最大转置行数为65536行,超出就会出错。另外如果不确定数组最终要多大容量,就在开始声明变量时直接把它声明的大些,然后用多少就取多少即可。例如:声明一个二十万行且一列的二维数组 ——  dim arr(1 to 200000,1 to 1)
回复

使用道具 举报

 楼主| 发表于 2022-3-19 11:50 | 显示全部楼层
金樽空对月 发表于 2022-3-18 21:24
transpose是EXCEL的内置函数,它的最大转置行数为65536行,超出就会出错。另外如果不确定数组最终要多大 ...

谢谢,非常详细
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 22:26 , Processed in 0.386266 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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