Excel 嵌套数组公式
我要一个费率的总和。让我解释一下:我想对D列中与excel中两个绿色行匹配的数字求和。第一个:F列等于闭合。第二个:C列等于那些依次符合以下条件的数字:F列等于部分售出。同时,上一次求和中的每个数字可以除以D列的数字,D列的数字与F列中部分售出的数字相匹配。 附有表格/图一的示例为:4510/9820+6500/9820+9100/15400+2388/2995+12400/9820+2904/5855。 我的单元格是:D69/D66+D70/D66+D76/D74+D82/D78+D83/D66+D84/D72 @与你的细胞吉普车将是:D6/D3+D7/D3+D13/D11+D19/D15+D20/D3+D21/D9Excel 嵌套数组公式,excel,excel-formula,array-formulas,Excel,Excel Formula,Array Formulas,我要一个费率的总和。让我解释一下:我想对D列中与excel中两个绿色行匹配的数字求和。第一个:F列等于闭合。第二个:C列等于那些依次符合以下条件的数字:F列等于部分售出。同时,上一次求和中的每个数字可以除以D列的数字,D列的数字与F列中部分售出的数字相匹配。 附有表格/图一的示例为:4510/9820+6500/9820+9100/15400+2388/2995+12400/9820+2904/5855。 我的单元格是:D69/D66+D70/D66+D76/D74+D82/D78+D83/D6
.. C D E F
65 # Total Side Condition
66 1 9820 Buy Partial Sold
67 2 3850 Buy Closed
68 3 7151 Buy Partial Sold
69 1 4510 Sell Closed
70 1 6500 Sell Closed
71 4 8180 Buy Open
72 5 5855 Buy Partial Sold
73 6 2553 Buy Open
74 7 15400 Buy Partial Sold
75 2 4600 Sell Closed
76 7 9100 Sell Closed
77 8 7531 Buy Open
78 9 2995 Buy Partial Sold
79 3 3000 Sell Closed
80 10 8691 Buy Open
81 3 2500 Sell Closed
82 9 2388 Sell Closed
83 1 12400 Sell Closed
84 5 2904 Sell Closed
85 11 3848 Buy Open
86 12 7745 Buy Open
我不认为没有辅助列就可以完成此操作。在F66右侧未使用的列中,将此数组“”放入公式
=IF(AND(OR(C66=INDEX(C$66:C$86*(F$66:F$86="Partial Sold"), , )), F66="Closed"), D66/INDEX(D$66:D$86, AGGREGATE(15, 6, ROW($1:$21)/((C$66:C$86=C66)*(F$66:F$86="Partial Sold")), 1)), "")
根据需要填写。结果将是这些“助手”编号的总和
即使这可以在一个公式中完成,计算开销也可能会令人望而却步。将数组计算的一部分拆分为一个辅助列,该列可以直接引用C列中的值进行另一次查找,从而显著减少了这一问题
imk_数组公式需要使用Ctrl+Shift+Enter完成↵. 正确输入第一个单元格后,可以像任何其他公式一样填充或向下或向右复制它们。尝试将整列引用减少到更接近实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关更多信息,请参阅。我认为在没有帮助器列的情况下,无法完成此操作。在F66右侧未使用的列中,将此数组“”放入公式
=IF(AND(OR(C66=INDEX(C$66:C$86*(F$66:F$86="Partial Sold"), , )), F66="Closed"), D66/INDEX(D$66:D$86, AGGREGATE(15, 6, ROW($1:$21)/((C$66:C$86=C66)*(F$66:F$86="Partial Sold")), 1)), "")
根据需要填写。结果将是这些“助手”编号的总和
即使这可以在一个公式中完成,计算开销也可能会令人望而却步。将数组计算的一部分拆分为一个辅助列,该列可以直接引用C列中的值进行另一次查找,从而显著减少了这一问题
imk_数组公式需要使用Ctrl+Shift+Enter完成↵. 正确输入第一个单元格后,可以像任何其他公式一样填充或向下或向右复制它们。尝试将整列引用减少到更接近实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关更多信息,请参阅。要使用数组公式一步完成此操作,您可以使用:
=SUM(IFERROR((D66:D86*(F66:F86="Closed"))/((C66:C86=TRANSPOSE(C66:C86))*TRANSPOSE(D66:D86*(F66:F86="Partial Sold"))),0))
这是一个数组公式,必须用Ctrl+Shift+Enter确认↵.
它将生成一个二维数组,保存闭合为行的原始值,并将该一维数组除以:
按列C建立2D数组=转置列C
将每行乘以D列
如果未部分售出,则将每行中的所有项目设置为0
对于0的每个div,IFERROR将其设置为0
所有这些加起来会给你你的输出
要使用数组公式一步完成此操作,您可以使用:
=SUM(IFERROR((D66:D86*(F66:F86="Closed"))/((C66:C86=TRANSPOSE(C66:C86))*TRANSPOSE(D66:D86*(F66:F86="Partial Sold"))),0))
这是一个数组公式,必须用Ctrl+Shift+Enter确认↵.
它将生成一个二维数组,保存闭合为行的原始值,并将该一维数组除以:
按列C建立2D数组=转置列C
将每行乘以D列
如果未部分售出,则将每行中的所有项目设置为0
对于0的每个div,IFERROR将其设置为0
所有这些加起来会给你你的输出
我也建议使用帮助器列。不过,您不需要使用数组公式来获得答案。您可以在下一个可用列中使用以下内容:
=IF(F66="Closed",IFERROR(D66/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,C66),0),0)
这将为符合条件的所有内容返回值,并为其他内容返回零。然后,您可以将这个helper列的总和作为最终的速率总和
如果确实不想使用辅助列,则可以将辅助列公式包装为一个和,并交换数组的单个单元格引用,即将F66交换为$F$66:$F$86,依此类推,然后使用Ctrl+Shift+enter将其作为数组公式输入↵. 整个事情看起来是这样的:
=SUM(IF($F$66:$F$86="Closed",IFERROR($D$66:$D$86/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,$C$66:$C$86),0),0))
我也建议使用帮助器列。不过,您不需要使用数组公式来获得答案。您可以在下一个可用列中使用以下内容:
=IF(F66="Closed",IFERROR(D66/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,C66),0),0)
这将为符合条件的所有内容返回值,并为其他内容返回零。然后,您可以将这个helper列的总和作为最终的速率总和
如果确实不想使用辅助列,则可以将辅助列公式包装为一个和,并交换数组的单个单元格引用,即将F66交换为$F$66:$F$86,依此类推,然后使用Ctrl+Shift将其作为数组公式输入+
进来↵. 整个事情看起来是这样的:
=SUM(IF($F$66:$F$86="Closed",IFERROR($D$66:$D$86/SUMIFS($D$66:$D$86,$F$66:$F$86,"Partial Sold",$C$66:$C$86,$C$66:$C$86),0),0))
由于我的Excel版本有点旧,我没有有用的函数“聚合”。让我问你,如果我用这个公式而不是你的公式,有什么区别=如果NDORC66=INDEXC$66:C$86*F$66:F$86=部分售出,,,F66=已关闭,D66/SUMIFSD$66:D$86,C$66:C$86,C66,F$66:F$86,部分售出,我希望现在格式将正常…我看不到在没有辅助列的情况下可以完成此操作。->挑战完成:PAs我的Excel版本有点旧,我没有有用的函数聚合。让我问你,如果我用这个公式而不是你的公式,有什么区别=如果NDORC66=INDEXC$66:C$86*F$66:F$86=部分售出,,,F66=已关闭,D66/SUMIFSD$66:D$86,C$66:C$86,C66,F$66:F$86,部分售出,我希望现在格式将正常…我看不到在没有辅助列的情况下可以完成此操作。->挑战完成:PIf OP没有@Jeeped answer中所述的聚合函数,他会有IFERROR吗?我的公式版本:=sumierrorF66:F86=Closed*D66:D86/SUMIFSD66:D86,F66:F86,部分售出,C66:C86,C66:C86,0Scott,我有IFERROR函数。德克,吹嘘精彩的解决方案。有时候,你需要一个从vos中思考的人。我太专注于这个问题了,甚至想都不想改变。再次感谢!它是在我不知道他可能没有这样的功能时制作的。此外,我不建议对较大的表使用这种方法,因为它可能会将excel冻结几秒钟到几分钟,甚至在对整个列执行此操作时崩溃。最好使用一个助手列来拆分所有内容,就像jeeped提到的那样!是的,是我的错。无论如何,谢谢你完成问题和答案。那么为了避免撞车,最好把东西分开。现在我将使用矩阵公式。但现在的问题是,什么是更有效的,德克还是布拉克解决方案?我知道结果是一样的,但它们是否执行相同的操作?如果OP没有@Jeeped answer中所述的聚合函数,他会有IFERROR吗?我的公式版本:=sumierrorf66:F86=Closed*D66:D86/SUMIFSD66:D86,F66:F86,部分售出,C66:C86,C66:C86,0Scott,我有IFERROR函数。德克,吹嘘精彩的解决方案。有时候,你需要一个从vos中思考的人。我太专注于这个问题了,甚至想都不想改变。再次感谢!它是在我不知道他可能没有这样的功能时制作的。此外,我不建议对较大的表使用这种方法,因为它可能会将excel冻结几秒钟到几分钟,甚至在对整个列执行此操作时崩溃。最好使用一个助手列来拆分所有内容,就像jeeped提到的那样!是的,是我的错。无论如何,谢谢你完成问题和答案。那么为了避免撞车,最好把东西分开。现在我将使用矩阵公式。但现在的问题是,什么是更有效的,德克还是布拉克解决方案?我知道结果是一样的,但它们的表现是否相同?为了改进我们的答案,我们现在需要知道是否有可能多条线持有相同的和部分售出的产品,如果是,如何处理它们:为了改进我们的答案,我们现在需要知道是否有可能多条生产线持有相同和部分售出的产品,如果有,如何处理: