ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 警惕工作表函数Transpose的隐含陷阱

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-5 14:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  近日,在解决“对比差异差异(数据量超过1百万行)”这个帖子提出的问题时,模拟数据运行没问题,使用实际数据时结果不对。使用楼主提供的实际数据,用自己的代码跑一遍,耗时6分钟上下,结果中有许多数值是“#N/A”。经调试代码,随时查看各字典、数组的即时状态,最终将矛头指向了这几句代码:

   
    With Sheet1
        .Cells(15, "E").Resize(dict3.Count, 1) = WorksheetFunction.Transpose(dict3.keys)
    End With



  经查找资料,得出如下未曾掌握的知识点:
  1、因为Transpose为WorksheetFunction表函数,受Excel限制,如:65536行、16384列之类的。例如:我们在调试代码的时候,在本地窗口中,查询字典数据的时候,Item只显示256行。因此,当字典中的Key数量很多时,在使用Transpose函数转置时,就受到了限制,将转置后的数组写入工作表时,就出现“#N/A”这样的数据。
  此前曾多次使用字典处理实际业务,好在字典中的Key数量不多,没有造成错误。
  2、Transpose所能够处理的数组元素字符长度最大为255。这个知识点也是盲区,也未曾经历过。
  3、在VBA中使用工作表函数,效率偏低。


  解决方法:自己编写一小段代码,将字典中的数据逐个写入数组中。代码类似于:



    ReDim jgarr(1 To dict3.Count, 1 To 1)
    I = 1
    For Each Key In dict3
        jgarr(I, 1) = dict3(Key)
        I = I + 1
    Next



  牢记上述知识点,防止在实际工作中犯临界点错误。
  与诸君共勉。









评分

4

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-5 14:41 | 显示全部楼层
第一个主题帖。

TA的精华主题

TA的得分主题

发表于 2024-7-5 15:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 perfect131 于 2024-7-5 15:04 编辑

是的 vba有三大不要用
1. 不要用 on error resume next (逃避bug不是好码农
2.
不要用 Transpose (慢而且 长度一旦过3万行 写入就变 #N/A 了
3. 不要用 redim preserve (每次都会重新写入数组 非常 very 降速

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-5 15:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-5 16:03 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
perfect131 发表于 2024-7-5 15:03
是的 vba有三大不要用
1. 不要用 on error resume next (逃避bug不是好码农)
2. 不要用 Transpose (慢 ...

on error resume next又不只是用来逃避bug

TA的精华主题

TA的得分主题

发表于 2024-7-5 16:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在VBA中,Application.Transpose以前也困扰了很久。

TA的精华主题

TA的得分主题

发表于 2024-7-5 16:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wang-way 发表于 2024-7-5 16:03
on error resume next又不只是用来逃避bug

那不然呢?

TA的精华主题

TA的得分主题

发表于 2024-7-5 16:30 | 显示全部楼层
perfect131 发表于 2024-7-5 15:03
是的 vba有三大不要用
1. 不要用 on error resume next (逃避bug不是好码农)
2. 不要用 Transpose (慢 ...

遇到除数0了,真没办法了,用了on error resume next
不知道还有没有其它方法。

TA的精华主题

TA的得分主题

发表于 2024-7-5 16:47 来自手机 | 显示全部楼层
skiss 发表于 2024-7-5 16:30
遇到除数0了,真没办法了,用了on error resume next
不知道还有没有其它方法。

'跳转提示一下错误!
Sub ErrorGoto()
On Error GoTo errHandler

'…………………………

errHandler:
  MsgBox (Err.Description)
  Err.Clear
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-5 17:17 来自手机 | 显示全部楼层
lss001 发表于 2024-7-5 16:47
'跳转提示一下错误!
Sub ErrorGoto()
On Error GoTo errHandler

还可以在尾部做完错误处理以后。resume 回原来的地方
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 00:22 , Processed in 0.046131 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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