我有一个电子表格,我已经工作了一个多月来排序和优化坐标(有时超过100,000行),一旦我开始导入超过5,000行的文件,它是不可靠的慢(它花了几个小时来完成计算和对超过25,000行的数据集进行排序过程).处理时间随着导入的坐标数呈指数增长.我已经研究过Stack Overflow以帮助我处理一些代码,并包含一些用于错误处理的安全网,如果没有数据则退出sub.
我用来实际排序坐标以查找最近邻居坐标并且我需要帮助的' Sort coordinates in Point List Data looking for shortest distance between points代码位于下面的代码中位于109的大约第58行的备注
下.
简单象限坐标(X,Y和Z)分别位于H,I和J列中,从第6行开始.命名范围为PosXYZ,此命名范围的公式为:
=INDEX(Optimizer!$H:$H, ROW(Optimizer!$H$5) + 1):INDEX(Optimizer!$L:$L, MATCH(bignum, Optimizer!$I:$I)).
Run Code Online (Sandbox Code Playgroud)
bignum定义为=1E+307*17.9769313486231.
Column K 用毕达哥拉斯定理填充以计算当前数据点X,Y与列表中先前数据点X,Y之间的距离.
Column L 将填充导入数据时创建的连续行号列表,以便可以使用单独的VBA代码恢复数据的原始排序顺序.
我正在尝试查看使用数组是否会大大加快运行此点列表优化器所需的时间,我希望有人可以帮助我弄清楚如何让我的代码部分运行指数级更快.
我发现了以下类似的问题,我想知道这种方法是否可以用来帮助加快我的处理时间: 你如何加速命名范围的VBA代码?
我从这个网站上学到了很多东西,我希望有人有耐心和知识来帮我解决这个问题.我在VBA中使用数组的经验不多.
可在此处找到带有2904个数据点和VBA代码的示例Excel文件.
Sub Optimize_PL()
' Add an error handler
On Error GoTo ErrorHandler
' Speed up sub-routine by turning off screen updating and auto calculating until the end of the sub-routine
Application.ScreenUpdating = False …Run Code Online (Sandbox Code Playgroud)