嵌套数组公式
Nested array formulas
我想要汇率总和。让我解释一下:我想对 D 列中符合 2 个条件的数字求和(excel 中的绿色行)。第一个:F 列等于 "closed"。第二个:C 列等于那些符合以下条件的数字:F 列等于 "Partial Sold"。同时,之前求和中的 EACH 数字可能会除以与列 F 中的 "Partial Sold" 匹配的列 D 的数字。
我附上 table/figure 的示例:(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 / D9)
.. 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:C*(F:F="Partial Sold"), , )), F66="Closed"), D66/INDEX(D:D, AGGREGATE(15, 6, ROW(:)/((C:C=C66)*(F:F="Partial Sold")), 1)), "")
根据需要填写。结果将是那些 'helper' 个数字的总和。
即使这可以在一个公式中完成,计算开销也可能会令人望而却步。将数组计算的一部分拆分到可以直接引用 C 列中的值以进行另一次查找的辅助列可以显着减少这种情况。
¹ 数组公式需要用Ctrl+Shift+Enter↵。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将 full-column 引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关详细信息,请参阅 Guidelines and examples of array formulas。
要使用数组公式一步完成,您可以使用:
=SUM(IFERROR((D66:D86*(F66:F86="Closed"))/((C66:C86=TRANSPOSE(C66:C86))*TRANSPOSE(D66:D86*(F66:F86="Partial Sold"))),0))
This is an array formula and must be confirmed with Ctrl+Shift+Enter↵.
它将生成一个二维数组,其中包含封闭的行的原始值,并且div通过以下方式来处理这个一维数组:
- 通过col C =转置col C构建二维数组
- 将每一行乘以列 D
- 如果不是 "Partial Sold"
,则将每行中的所有项目设置为 0
对于每个 div by 0,IFERROR
会将其设置为 0
SUM
中的所有内容将为您提供输出
我也建议使用辅助列。不过,您不需要使用数组公式来获得答案。您可以在下一个可用列中使用以下内容:
=IF(F66="Closed",IFERROR(D66/SUMIFS($D:$D,$F:$F,"Partial Sold",$C:$C,C66),0),0)
这将为符合您条件的所有内容 return 值,并将其他所有内容归零。然后,您可以将此辅助列的总和作为最终的费率总和。
如果您真的不想使用辅助列,您可以将辅助列公式包装在 SUM
中,并换出单个单元格引用数组(即交换 F66
为 $F:$F
,依此类推),然后使用 Ctrl+Shift[=29 将其作为数组公式输入=]+输入↵。整个事情看起来像这样:
=SUM(IF($F:$F="Closed",IFERROR($D:$D/SUMIFS($D:$D,$F:$F,"Partial Sold",$C:$C,$C:$C),0),0))
我想要汇率总和。让我解释一下:我想对 D 列中符合 2 个条件的数字求和(excel 中的绿色行)。第一个:F 列等于 "closed"。第二个:C 列等于那些符合以下条件的数字:F 列等于 "Partial Sold"。同时,之前求和中的 EACH 数字可能会除以与列 F 中的 "Partial Sold" 匹配的列 D 的数字。 我附上 table/figure 的示例:(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 / D9)
.. 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:C*(F:F="Partial Sold"), , )), F66="Closed"), D66/INDEX(D:D, AGGREGATE(15, 6, ROW(:)/((C:C=C66)*(F:F="Partial Sold")), 1)), "")
根据需要填写。结果将是那些 'helper' 个数字的总和。
即使这可以在一个公式中完成,计算开销也可能会令人望而却步。将数组计算的一部分拆分到可以直接引用 C 列中的值以进行另一次查找的辅助列可以显着减少这种情况。
¹ 数组公式需要用Ctrl+Shift+Enter↵。一旦正确输入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试将 full-column 引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关详细信息,请参阅 Guidelines and examples of array formulas。
要使用数组公式一步完成,您可以使用:
=SUM(IFERROR((D66:D86*(F66:F86="Closed"))/((C66:C86=TRANSPOSE(C66:C86))*TRANSPOSE(D66:D86*(F66:F86="Partial Sold"))),0))
This is an array formula and must be confirmed with Ctrl+Shift+Enter↵.
它将生成一个二维数组,其中包含封闭的行的原始值,并且div通过以下方式来处理这个一维数组:
- 通过col C =转置col C构建二维数组
- 将每一行乘以列 D
- 如果不是 "Partial Sold" ,则将每行中的所有项目设置为 0
对于每个 div by 0,IFERROR
会将其设置为 0
SUM
中的所有内容将为您提供输出
我也建议使用辅助列。不过,您不需要使用数组公式来获得答案。您可以在下一个可用列中使用以下内容:
=IF(F66="Closed",IFERROR(D66/SUMIFS($D:$D,$F:$F,"Partial Sold",$C:$C,C66),0),0)
这将为符合您条件的所有内容 return 值,并将其他所有内容归零。然后,您可以将此辅助列的总和作为最终的费率总和。
如果您真的不想使用辅助列,您可以将辅助列公式包装在 SUM
中,并换出单个单元格引用数组(即交换 F66
为 $F:$F
,依此类推),然后使用 Ctrl+Shift[=29 将其作为数组公式输入=]+输入↵。整个事情看起来像这样:
=SUM(IF($F:$F="Closed",IFERROR($D:$D/SUMIFS($D:$D,$F:$F,"Partial Sold",$C:$C,$C:$C),0),0))