|
[广告] 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
查看全部评分
-
|