优化多标准IF

时间:2010-10-30 14:43:53

标签: excel worksheet-function array-formulas

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

     A             B                C            D          E
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,......使用相同的方法,选择不同的值进行操作或执行不同的功能。我的数据集非常大,只有少数几个电子表格需要一个小时的时间来计算。我经常会添加第四个标准,所有其他标准都是相同的。

有效率吗?一些想法:

  1. 我可以每列使用一个数组而不是每列数千个吗?
  2. 我可以压缩前三个条件,以便输出是行号吗?也许随后的公式不必搜索多个条件,但只能执行函数?
  3. 或以某种方式建立crtieria?因此,新列将返回公司相同的所有行。另一列返回第一列中生成相同的所有行......依此类推......

2 个答案:

答案 0 :(得分:1)

对于平均值,您可以不使用数组:

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

由于还有COUNTIFS和SUMIFS,我认为你的斜率可以用同样的方式计算。

对于其余的功能(max,min等),我们应该逐个分析。

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

HTH!

注意:仅限Excel 2007及以上版本!

编辑 - 回答您的评论。

不知道问题的维度很难给出建议,但我还是冒险了:

您可以编写一个VBA函数:

1)为每个公司代对生成新表 2)按日期对这些表中的数据进行排序 3)将公式添加到这些表中(在此上下文中不需要条件)
4)重新计算并获取这些公式的结果并填充原始表格
5)删除辅助表

答案 1 :(得分:1)

要捕获行并重复使用,请尝试以下方法:
按公司和公司排序数据代。
制作一份独特的公司名单&amp;世代(使用高级过滤器,仅限唯一,复制)
对于列表中的每个公司生成对,构建2列公式。
第一列给出该对数据中的行数(使用COUNTIFS),第二列给出该对数据中的第一行(=前一对的第一行+前一对的行数。)然后,您可以使用像OFFSET这样的函数仅返回公司生成对的数据行,并将其嵌入到最终的函数/数组公式中( AVERAGEIFS等)如果您愿意,可以扩展此类型和计数方法以包含日期。
有一个缺点,如果城市和世代的名单发生变化,你必须改变唯一的和相关的公式列表。
在我的网站上有这种方法的例子:http:/ /www.decisionmodels.com/optspeedk.htm
http://www.decisionmodels.com/optspeedj.htm

相关问题