优化多标准IF

我正在执行需要很长时间才能完成的数组计算。 我想更多地优化我的公式。 所有的公式具有相同的性质 – 它们在一列值中执行一些高级函数(平均值,斜率,最小值,最大值)。 但是,并非列中的所有单元格都包含在数组中。 我使用多个IF标准来select包含哪些单元格。 所有的比较都是对当前行进行的。 这是一个数据的例子:

ABCDE 1 Company Generation Date Value ToCalculate 2 Abc 1 1/1/2010 5.6 3 ... ... ... ... ... 

E看起来像这样

 {=Average(If(A2=A2:A1000, If(B2=B2:B1000, If(C2 > C2:C1000, D2:D1000))))} 

所以一旦计算出E2,我必须自动填充列E.列F,G,H,…使用相同的方法,要么select不同的值来操作或执行不同的function。 我的数据集非常大,只有less数这些电子表格需要花费一个多小时才能计算。 每隔一段时间我会添加一个第四个标准,所有其他的标准是相同的。

有没有效率? 一些想法:

  1. 我可以使用每列而不是每列数千个单个数组吗?
  2. 我可以压缩前三个标准,以便输出行数? 也许后来的公式不必search多个标准,但可以执行该function?
  3. 或以某种方式build立crtieria? 因此,新列将返回公司相同的所有行。 另一列将返回第一列中所有生成相同的行…等等…

对于Average,你可以不用数组:

  =AVERAGEIFS(D2:D$1000,A2:A$1000,A2,B2:B$1000,B2,C2:C$1000,"<="&C2) 

因为还有一个COUNTIFS和一个SUMIFS,我认为你的斜率可以用相同的方法计算。

对于其余的function(最大,最小等),我们应该逐个分析。

我做了一个轻微的性能testing,这显然是更好的,但当然我的数据集只是嘲笑。

HTH!

注意:只有Excel 2007和!

编辑 – 回答您的评论。

不知道问题的大小很难给出build议,但我会冒一个风险:

你可以写一个VBA函数:

1)为每个公司代对生成一个新表
2)按date对这些表格中的数据进行sorting
3)将公式添加到这些表(在这种情况下不需要条件)
4)重新计算并获取这些公式的结果并填充原始表单
5)删除辅助纸张

要捕获行并重新使用,请尝试以下方法:
按公司和代码sorting数据。
制作公司和世代的独特列表(使用高级filter,唯一,复制)
对于列表中的每个公司生成对,构build2列公式。
第一列给出了这一对数据中的行数(使用COUNTIFS),第二列给出了这一对数据的第一行(=上一对的第一行+前一对的行数)。
然后你可以使用像OFFSET这样的函数来只返回Company-Generation对的数据行,并将其embedded到最终的函数/数组公式中(AVERAGEIFS等)
如果你愿意的话,你可以扩展这种方法并计算包含date的方法。
有一个缺点,如果城市和世代的名单改变,你必须改变独特的名单和相关的公式。
在我的网站上有这种方法的例子
http://www.decisionmodels.com/optspeedk.htm
http://www.decisionmodels.com/optspeedj.htm