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

Excel VBA script optimization - traversal algorithm - solve this puzzle?

我有一个有点大的 excel 工作簿,其中有几个 sheet。工作簿记录员工开支。

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

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

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

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

示例 - 大师 sheet:

> EmpID1 ExpenseType1 01/02/2015 
> EmpID1 ExpenseType2 01/02/2015 
> EmpID1 ExpenseType2 01/03/2015 
> EmpID1 ExpenseType2 01/03/2015 
> EmpID1 ExpenseType2 01/04/2015 
> ...

示例 - 员工 sheet:

> Months up top: Jan Feb Mar Apr May ...   
> ExpenseType1     
> ExpenseType2      
> ExpenseType3     
> ...

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

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

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

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

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

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

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


编辑:我不知道你现在的数据操作算法是什么,所以我还不能直接评论,但是如果是为了费用的总和,你能试着把数据总结成你走了,这样你就不需要在到达 sheet 时进行任何额外的计算,你只需在正确的月份列中输入数据?