algorithm - Excel VBA脚本优化——遍历算法——解决这个难题?

标签 algorithm vba sorting loops traversal

我有一个有点大的 excel 工作簿,有几张纸。工作簿记录员工开支。

我有一个 vba 宏,它可以将数据从主工作表加载到所有其他工作表,并且需要很长时间才能运行。我希望获得一些关于如何提高性能的提示。

一些快速背景信息: 每个员工都有一张单独的表格。此表包含该员工一年中每个月的所有费用 - 从 1 月到 12 月(列)。可以有多种类型的费用(行)。

主数据表包含当年所有员工的所有费用。每条记录包含员工 ID(用作员工的工作表名称)、费用类型、费用金额和日期。主表按员工 ID 排序,然后是日期,然后是费用类型。同一日期可以有重复的费用类型。

虽然主数据表上可以有重复的费用类型,但员工表上没有重复的。每个月的费用按类型汇总。

示例 - 主表:

> EmpID1 ExpenseType1 01/02/2015 $5
> EmpID1 ExpenseType2 01/02/2015 $3
> EmpID1 ExpenseType2 01/03/2015 $6
> EmpID1 ExpenseType2 01/03/2015 $10
> EmpID1 ExpenseType2 01/04/2015 $11
> ...

示例 - 员工表:

> Months up top: Jan Feb Mar Apr May ...   
> ExpenseType1 $5 $2 $10 $3 $2
> ExpenseType2 $30 $5 $1 $32 $12 
> ExpenseType3 $11 $22 $3 $1 $2
> ...

问题: 填充员工表的最佳方式是什么?

我当前的算法通过读取每条记录来遍历一次主数据表。但它随后多次遍历员工表。它会在员工的工作表上查找该费用类型,并将金额添加到之前的金额。

这是最优解吗?关于我如何改进这一点有什么想法吗?

最佳答案

请注意,无论您的数据收集和操作算法如何,您都可以通过首先在多维数组中准备数据,然后使用 .Range VBA 方法用您的数据填充给定范围来极大地加快该过程大批。

这样做的关键是您一次性将数组写出到一个范围内,而不是逐个单元格地写出。我假设现在您正在做很多单独的单元格操作,例如从一个单元格获取一段数据,将其放入另一个单元格等。excel 单元格操作和 VBA 之间的实际交互实际上非常慢(不确定为什么,但可能是由于级联单元格函数和视觉更新,但请参阅 https://www.soa.org/News-and-Publications/Newsletters/Compact/2012/january/com-2012-iss42-roper.aspx 了解有关 Excel+VBA 速度和效率规则和示例的更多信息。

有关如何使用数组和范围的更多信息:http://www.cpearson.com/excel/ArraysAndRanges.aspx
顺便说一下,C Pearson 有很多关于 Excel+VBA 的重要信息,所以我强烈推荐他的网站作为一般引用。

我以前用过它,将宏的速度从几分钟缩短到几秒。希望它也能为您做同样的事情。


编辑:我不知道你现在的数据操作算法是什么,所以我还不能直接评论,但是如果是为了费用的汇总,你能不能边走边总结数据,这样一来,当您进入工作表时就不需要进行任何额外的计算,只需在正确的月份列中输入数据即可?

关于algorithm - Excel VBA脚本优化——遍历算法——解决这个难题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181613/

相关文章:

regex - 如何确定正则表达式实现是使用 DFA 还是 NFA?

arrays - Excel VBA : What is the Maximum Number of String Elements that can be Stored in an Array

java - 这种排序算法的时间复杂度是多少?

sql - 在excel vba中使用数组或字典作为sql中的from子句

javascript - 选择.js : How to sort options on values which are integers?

php - 如何从 url 获取信息并在 php 函数中使用它?

java - AVL 树 - 找到所需的 : String,:AVL

algorithm - 在 <key, value> 对列表中查找键列表

java - 最小设定差

javascript - 远离 Excel 工作簿/VBA - 技术升级