我正在用Excel编写一个带有几个按钮的Manager .
其中之一是使用另一个Excel文件(我称之为T)作为输入生成一个选项卡。
T的一些性质
~90MB大小~350K线14月份的数据(无序)。year/month
主要关系:
我正在生成一个新的Excel选项卡,其数据来自按卖方分组的最后一个year/month的year/month的数据。
重要说明:
T是唯一可用的输入/源。total-money计算给所有这些销售者。这就足够了,现在您已经知道了已经编码了什么。
我的代码可以工作,但是,它需要大约4分钟的运行时间。
我已经使用更小的源代码(不大于2MB)编写了其他一些按钮,后者在5秒内运行。
考虑到T大小,4分钟运行时是可以接受的。
但我对此并不感到骄傲,至少现在还没有。
我的代码主要基于Scripting.Dictionary从T映射数据,然后使用for each key in obj ... next key将分组数据设置为新创建的选项卡。
我不确定,但以下是我的想法:
N是Scripting.Dictionary中的总键,那么在聚合total-money之前,我需要检查obj.Exists(str)。它将运行N字符串,比较返回false。N时,它将运行最大的Set seller = obj(seller_name)字符串。我想让我的想法出错。但是,如果我没有错,我的下一步(也是最后的希望)减少这个函数的运行时,就是用Tries编写我自己的类对象。
我只会在明天开始编码,我想要的只是一些确认如果我是正确的方式,或一些建议,如果我是在错误的方式做它。
你有什么意见建议?提前谢谢。
发布于 2020-09-30 10:22:26
我相信你已经找到了正确的解决方案,因为过去两年没有任何更新。
无论如何,我想提一提(也许这会对其他人有所帮助),您的瓶颈不是字典或二叉树。即使有数百万行,如果您有足够数量的RAM,内存中的处理速度也会非常快。
botlleneck通常是从工作表读取数据并将其写回工作表。在这里,数组非常用户满。
只需将数据从工作表读入变体数组即可。你不需要马上处理这个数组。如果您使用字典更舒服,只需将数组中的所有数据转换为字典并使用它即可。由于这个过程完全是在内存中完成的,所以不要担心性能的不利影响。
完成字典中的数据处理后,将字典中的所有数据放回数组中,并一次性将该数组写入新的工作表中。
工作表(新工作表).Range(“A1”).Value= MyArray
我很确定这只需要几秒钟
https://stackoverflow.com/questions/47019932
复制相似问题