Excel精英培训网

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

[已解决]arr内存溢出

[复制链接]
发表于 2014-2-4 19:40 | 显示全部楼层 |阅读模式
本帖最后由 ugeso 于 2014-2-8 12:59 编辑

Sub b()
    arr = Range("a1:if65536")
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
       For j = 1 To UBound(arr, 2)
       For i = 1 To UBound(arr)
          If arr(i, j) = 1 Then
             brr(i, j) = "A"
          ElseIf arr(i, j) = 2 Then
             brr(i, j) = "B"
          ElseIf arr(i, j) = 3 Then
             brr(i, j) = "C"
          ElseIf arr(i, j) = 4 Then
             brr(i, j) = "D"
          ElseIf arr(i, j) = 5 Then
             brr(i, j) = "E"
          End If
        Next
        Next
    Range("a1").Resize(UBound(brr), UBound(brr, 2)) = brr
End Sub


ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))   这一句提示内存溢出,前天还在用的,是不是哪里出问题了?

最佳答案
2014-2-4 23:07
ugeso 发表于 2014-2-4 22:38
不是所有 的,a2:if65536 中,只有偶数行是要替换的,奇数列是空白的。

For j = 1 To 240 Step 2

2步一跳的遍历
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-2-4 20:12 | 显示全部楼层
    arr = Range("a1:if65536")
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
l两句代码就在内存里设置了,两张65536*240的矩阵以及相关的信息,加上E在内存里的占用和楼主电脑运行的其他窗口,楼主需要个N强大的电脑内存啊
弱弱的说,就5个数,用查找替换不好吗?
回复

使用道具 举报

发表于 2014-2-4 20:13 | 显示全部楼层
arr = Range("a1:if65536")范围太大,改一下就可以 了
回复

使用道具 举报

 楼主| 发表于 2014-2-4 20:49 | 显示全部楼层
风林火山 发表于 2014-2-4 20:13
arr = Range("a1:if65536")范围太大,改一下就可以 了

改范围是可以实现,可数据就是这么大,改了后也会变麻烦的,因为不只是一个这样的表。
回复

使用道具 举报

 楼主| 发表于 2014-2-4 20:51 | 显示全部楼层
bbwsj 发表于 2014-2-4 20:12
arr = Range("a1:if65536")
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
l两句代码就在内 ...

因为我不是只有一个表,还有好多个这样的表需要替换,所以直接替换会好麻烦的。这个宏之前也是可以完美运行的,不知道现在还有救么?
回复

使用道具 举报

发表于 2014-2-4 20:59 | 显示全部楼层
那你的表真的太大了
回复

使用道具 举报

 楼主| 发表于 2014-2-4 21:01 | 显示全部楼层
风林火山 发表于 2014-2-4 20:59
那你的表真的太大了

蒽蒽,好大的。所以不能解决这个问题,会做得好惨的。
回复

使用道具 举报

发表于 2014-2-4 21:38 | 显示全部楼层
本帖最后由 bbwsj 于 2014-2-4 21:45 编辑
ugeso 发表于 2014-2-4 20:51
因为我不是只有一个表,还有好多个这样的表需要替换,所以直接替换会好麻烦的。这个宏之前也是可以完美运 ...


你的表不会有65536行吧,弱弱的说,你的表真有数据达到10000多行了,就不适合用EXCEL了,改用数据库吧
猜,你的问题是你不确定表有多少行,只能选全表来解决你的问题吧
对于不确认表的行数和列数,可以用单元格的END参数解决,也可以用最后单元格来解决。

给楼主一个用最后单元格定位的法子
a = Selection.SpecialCells(xlCellTypeLastCell).Row       来得到最后单元格的行号
b = Selection.SpecialCells(xlCellTypeLastCell).Column  来得到最后单元格的列号
Range([a1], Cells(a, b)).Select                                    来选中整个已经用的区域

这样,套上数组代码楼主的电脑一定会轻松很多


==========================

另说句,楼主如果只是要把12345替换为ABCDE,用查找替换就可以了,就算有N多个工作表需要操作,录个查找替换的宏,就行了
保证比你写数组代码快N多了
回复

使用道具 举报

发表于 2014-2-4 21:40 | 显示全部楼层
数据库到可以解决数据行超多的问题
回复

使用道具 举报

 楼主| 发表于 2014-2-4 21:42 | 显示全部楼层
bbwsj 发表于 2014-2-4 21:38
你的表不会有65536行吧,弱弱的说,你的表真有数据达到10000多行了,就不适合用EXCEL了,改用数据库吧
...

我的数据真的有65536行,240列宽。好吧,看来我要用下您建议的数据库了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 00:53 , Processed in 0.331880 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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