ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1208|回复: 15

[求助] 数组赋值,报内存溢出,怎么解决

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-6 14:44 | 显示全部楼层 |阅读模式
本帖最后由 ncow 于 2023-7-6 14:47 编辑

各位好,这样的通过程序对数组arr2进行了赋值,现arr2里大概有15万行,13列的数据,现在想把数组的数据赋值到工作表上,但提示内存溢出,请问可以怎么处理?


代码大概如下:
dim arr2
ReDim arr2(1 To mmm, 1 To 13)
……通过循环对arr2进行了赋值,大概有15万行(k是行数),13列的数据
然后就是要把arr2的值放在工作表上
ActiveSheet.Range("a1").Resize(k, 13) = arr2          运行到这里报错“内存溢出”


我尝试过改成 ActiveSheet.Range("a1").Resize(k, 12) = arr2  少一列数据就可以运行成功,
又尝试了分两个数组,一个数组9列,一个4列
dim arr2,arr3
ReDim arr2(1 To mmm, 1 To 9)
ReDim arr3(1 To mmm, 1 To 4)
ActiveSheet.Range("a1").Resize(k, 9) = arr2
ActiveSheet.Range("j1").Resize(k, 4) = arr3       运行到这里还是会报错“内存溢出”



请问怎么解决。

TA的精华主题

TA的得分主题

发表于 2023-7-6 15:25 | 显示全部楼层


测试了一下生成15万行13列的数据,EXCEL可以的!

Public Sub 数组()
    Dim arr()
    ReDim arr(1 To 150000, 1 To 13)
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)
            arr(i, j) = i & "-" & j
        Next j
    Next i
    [a1].Resize(UBound(arr), UBound(arr, 2)) = arr
End Sub

数组溢出测试.rar

16 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2023-7-6 16:40 | 显示全部楼层
15万行13列运行多久?

TA的精华主题

TA的得分主题

发表于 2023-7-6 17:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-7 03:18 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
百万行应该还不至于溢出吧

TA的精华主题

TA的得分主题

发表于 2023-7-7 08:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-7 08:29 | 显示全部楼层
本帖最后由 ncow 于 2023-7-7 08:34 编辑

谢谢各位回复。
后面测试了一下,发现是最后一列的数据的问题,前面试过12列的数据可以赋值,后面再尝试单独只赋值最后一列,也出现内存溢出的报错,然后再尝试用循环的方式一条一条赋值最后一列,运行到一定数量后,报错了,报“应用程序定义或对象定义错误”,然后看报错的时的数据,发现该数据有符号“===========”,可能是因为有“=”,工作表认为是公式,然后该公式是错误的,最终导致赋值不成功。

再测试了一下,如果数据只含有一个“=”,是可以赋值的,但如果有两个或以上“=”时,就报错了。
那问题就改变了,如果数组的数值中含有“==”号,怎样可以赋值成功呢?

TA的精华主题

TA的得分主题

发表于 2023-7-7 08:29 | 显示全部楼层
ActiveSheet.Range("a1:h1").Resize(k) = arr2

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-7 09:13 | 显示全部楼层

谢谢,你发现的问题是对的,就是第13列数据有问题,有数据开头有“========”。

按你的方法,dim arr2() 加上 as string后
运行到redim arr2(1 to mmm,1 to 13)时,报错“缺少数组”,未能解决

TA的精华主题

TA的得分主题

发表于 2023-7-7 10:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
发现只输入===是输入不进去的,自动修改为'===,这样可以放到数组里。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 23:39 , Processed in 0.034080 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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