Excel精英培训网

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

数组使用Index,Transposes受到65536限制?【e2010求教】

[复制链接]
发表于 2011-8-17 03:09 | 显示全部楼层 |阅读模式
20学分
本帖最后由 xdwy81129 于 2011-8-17 03:12 编辑

附件是excel2010版本的,有2组4个宏,宏语句可见帖二楼

发现问题如下
1.在二维数组中,如果ubound(arr)大概超过65536下面的语句就出现错误
[k1].Resize(n - 2, 1) = Application.Index(arr, , 3)
2.在一维数组中,如果ubound(arr)大概超过65536下面的语句就出现错误
[N1].Resize(n - 2, 1) = Application.Transpose(arr1)

两者的错误类型都是:类型不匹配,如图
未命名.JPG

求帮助的是
怎么最后的解决实际这个问题,因为我实际编制的宏就是这样,而且比较多,而且数据也超过65536
感谢解答
数组限制.rar (104.74 KB, 下载次数: 8)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-8-17 03:09 | 显示全部楼层

第1组宏
Sub 簿4()
Dim arr, i&, n&

arr = Range("A1:E44444") ' & Cells(2, 2).End(4).Row)
n = UBound(arr)

Columns("k").ClearContents
[k1].Resize(n - 2, 1) = Application.Index(arr, , 3)
End Sub

Sub 簿666666()
Dim arr, i&, n&

arr = Range("A1:E666666") ' & Cells(2, 2).End(4).Row)
n = UBound(arr)

Columns("k").ClearContents
[k1].Resize(n - 2, 1) = Application.Index(arr, , 3)
End Sub



第2组宏
Sub 一维数组()
Dim i&, n&
Dim arr1(0 To 44444)
n = 44445
For i = 1 To 44445
arr1(i - 1) = i
Next i


Columns("N").ClearContents
[N1].Resize(n - 2, 1) = Application.Transpose(arr1)
End Sub


Sub 一维数组66666()
Dim i&, n&
Dim arr1(0 To 66666)
n = 66667
For i = 1 To 66667
arr1(i - 1) = i
Next i


Columns("N").ClearContents
[N1].Resize(n - 2, 1) = Application.Transpose(arr1)
End Sub
回复

使用道具 举报

发表于 2011-8-17 07:23 | 显示全部楼层
用其他方法代替,transpose本来就是工作表函数,他本意是转换单元格,所以会受最大行数限制,后来的版块延续了这个限制
回复

使用道具 举报

 楼主| 发表于 2011-8-17 17:31 | 显示全部楼层
回复 兰色幻想 的帖子

Application.Index呢???

我只希望输出之间的数组,应该怎么办呢??
回复

使用道具 举报

发表于 2011-8-17 17:34 | 显示全部楼层
循环啊,循环基本不占用时间的,几万次的循环的时间可以忽略
回复

使用道具 举报

 楼主| 发表于 2011-8-17 20:30 | 显示全部楼层
没有更好的办法了??顶顶看
回复

使用道具 举报

 楼主| 发表于 2011-8-18 19:13 | 显示全部楼层
顶顶看看情况
回复

使用道具 举报

发表于 2011-8-19 00:21 | 显示全部楼层
xdwy81129 发表于 2011-8-17 17:31
回复 兰色幻想 的帖子

Application.Index呢???

在条件不受限制的时候,类似如你1楼:[k1].Resize(n - 2, 1) = Application.Index(arr, , 3)
在条件受限制的时候,如5楼

我觉得是这样的

回复

使用道具 举报

 楼主| 发表于 2011-8-20 13:47 | 显示全部楼层
问的就是怎么解决,现在有现在了
回复

使用道具 举报

发表于 2011-8-20 13:57 | 显示全部楼层
是循环了。
数组在内存中就是按一维连续存放的,实际上Index就是循环的,只是他用指针可能比VBA中的循环要快那么一点。
象你经常这样可以专门写一个函数,如果速度对你很重要,也可以花钱找人用编译语言写一个与Index速度差不多的加载宏函数

评分

参与人数 1 +10 收起 理由
xdwy81129 + 10 谢谢建议和关注

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 11:22 , Processed in 0.235565 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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