ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

《别怕,excel VBA其实很简单》内容错误

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-10 03:41 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我买的是第二版《别怕,excel VBA其实很简单》
最后一页(313页)7.5.5 合理使用数组
我用excel2019 照着书上的代码写的,结果从34465行开始显示的是#N/A,这是为什么
我比对了几遍代码,除了MSGBOX里的代码我少了一点,其余的没变。

谁能帮我看看

输入的代码

输入的代码

书上的代码

书上的代码

出现错误

出现错误

TA的精华主题

TA的得分主题

发表于 2019-9-10 07:35 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
因为早期Excel的表格只有65536行,所以TRANSPOSE函数只能转置65536行数据,后来改版后虽然表格行数增加到1048576行了,但这个函数能转置的行数好像没有改变。

这个例子中用它来转置100000行数据,最后部分的结果是错误值,应该就是这个原因。

当时写代码时一下子没想起来,把数字弄大了,误导了大家,抱歉!

TA的精华主题

TA的得分主题

发表于 2019-9-10 07:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Transpose 貌似支撑转置65536行数据吧
楼主不用纠结这个,明白意图就好了
建议修改成10000测试吧

TA的精华主题

TA的得分主题

发表于 2019-9-10 08:30 | 显示全部楼层
试试这个(原因是Transpose引起,不转就行,同结构丢回去)
  1. Sub InputArr()
  2.     Dim arr&(1 To 100000, 0), sTime
  3.     sTime = Timer
  4.     For i = 1 To 100000
  5.         arr(i, 0) = i
  6.     Next
  7.     Cells(1).Resize(100000, 1) = arr
  8.     Debug.Print Format(Timer - sTime, "0.000")
  9. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-10 10:34 | 显示全部楼层
谢谢各位的回答。如果说是transpose引起,只能转65536行数据,可是我这里是从第34465行就出错了。我用的是EXCEL2019.

TA的精华主题

TA的得分主题

发表于 2020-1-14 18:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
类似的写法,10w*1的数组transpose到表格,也是从34465行也始错误。mark一下

TA的精华主题

TA的得分主题

发表于 2020-2-3 22:11 | 显示全部楼层
新冠病毒厉害,过年在家就把Excel VBA的书看了一下,第二版最后的示例的确有问题,在Excel 2007/2010/2013/office 365个人版都试了,Excel 2007/2010/2013 直接蹦出运行时错误 "类型不匹配“, excel 2016是可以运行,但是如楼主所说在第34465单元格就是"#N/A",用debug.print 或者将数组arr中的arr(34465)到arr(100000)循环读出来,写到别的列是ok的,看起来是transpose搞不了。这个也算把这个问题理解了。

Dim j As Long
    For j = 34465 To 100000
        Cells(j, "G").Value = arr(j)
    Next j
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-15 11:48 , Processed in 0.035495 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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