Excel 找到具有额外条件的范围的顶部和底部n%的平均值

Excel 找到具有额外条件的范围的顶部和底部n%的平均值,excel,excel-formula,excel-udf,vba,Excel,Excel Formula,Excel Udf,Vba,例如: Part, Qty Book, 1 Book, 2 Book, 3 Book, 4 Book, 5 Book, 6 Book, 7 Book, 8 Book, 9 Book, 10 Pen, 4 Pen, 7 我正在计算B:B范围内前10%的平均图书数量。 已尝试使其使用基于以下内容的数组公式: {=AVERAGE(IF(B:B>PERCENTILE(B:B,0.9),B:B))} 当我尝试使用数组公式时,我意识到我有很多

例如:

Part, Qty  
Book, 1  
Book, 2  
Book, 3  
Book, 4  
Book, 5  
Book, 6  
Book, 7  
Book, 8  
Book, 9  
Book, 10  
Pen, 4  
Pen, 7  
我正在计算B:B范围内前10%的平均图书数量。
已尝试使其使用基于以下内容的数组公式:

{=AVERAGE(IF(B:B>PERCENTILE(B:B,0.9),B:B))}  
当我尝试使用数组公式时,我意识到我有很多数据,当添加新数据时,计算会花费很多时间


这可以通过VBA中的用户定义函数来实现以加快速度吗?

要隔离B列中与已排序零件上的“book”相关的值,您可以引用B列中的单元格,如下所示:

INDEX(B:B, MATCH("book", A:A, 0):INDEX(B:B, MATCH("book", A:A)
B2:INDEX(B:B, MATCH("zzz", A:A)

要分离B列中与未排序的零件数据中的任何零件相关的值,您可以引用B列中的单元格,如下所示:

INDEX(B:B, MATCH("book", A:A, 0):INDEX(B:B, MATCH("book", A:A)
B2:INDEX(B:B, MATCH("zzz", A:A)
这些范围将在添加新值时动态更新,但第一个范围仅在重新使用A列中的值后才准确

排序的标准公式

在下图中,E4:F4中的标准公式为:

=PERCENTILE(INDEX(B:B, MATCH(D4,A:A, 0)):INDEX(B:B, MATCH(D4,A:A )), 0.9)
=AVERAGEIF(INDEX(B:B, MATCH(D4,A:A, 0)):INDEX(B:B, MATCH(D4,A:A  )), ">"&PERCENTILE(INDEX(B:B, MATCH(D4,A:A, 0)):INDEX(B:B, MATCH(D4,A:A )), 0.9))
'alternate standard formula for F4
=AVERAGEIF(INDEX(B:B, MATCH(D4,A:A, 0)):INDEX(B:B, MATCH(D4,A:A  )), ">"&E4)
根据需要填写


分拣机上的标准公式

未排序的数组ª公式

在下图中,E10:F10中的阵列公式为:

=PERCENTILE(IF(A$2:INDEX(A:A, MATCH("zzz",A:A ))=D10, B$2:INDEX(B:B, MATCH("zzz",A:A ))), 0.9)
=AVERAGEIFS(B:B,A:A, D10,B:B, ">"&PERCENTILE(IF(A$2:INDEX(A:A, MATCH("zzz",A:A ))=D10, B$2:INDEX(B:B, MATCH("zzz",A:A ))), 0.9))
'alternate standard formula for F10
=AVERAGEIFS(B:B,A:A, D10,B:B, ">"&E10)

未排序上的数组公式



imk_数组公式需要使用Ctrl+Shift+Enter完成↵. 正确输入第一个单元格后,可以像任何其他公式一样填充或向下或向右复制它们。尝试将整列引用减少到更接近实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将参考范围缩小到最小值。有关更多信息,请参阅。

您是否使用[Ctrl]+[Shift]+[Enter]而不是简单的[Enter]来完成此操作?这是一个数组公式。也许这个标准公式会更好
=AVERAGEIF(B:B,“>”&百分位数(B:B,0.9))
。是的,我正在用Ctrl+Shift+Enter完成。我怎样才能使用你的公式,只找到一种零件类型的值而不使用数组?那么,
=AVERAGEIFS(B:B,A:A,“book”,B:B,“>”&百分位数(B:B,0.9))
这将是一种简单的方法,但它使用了B整列的百分位数,而不仅仅是B账面价值的百分位数。你说的是多少行,A列是按一定的顺序排列的,所以各部分总是在一起的?现在大约有2500行,有30个不同的“部分”。不幸的是,它们没有被排序。如果它们没有被排序,那么您需要一个引用数据完整范围的数组公式;没有完整列引用那么糟糕,但并不理想。如果对它们进行了排序,那么您可以选择第一本“书”和最后一本“书”的行号,并最小化标准公式计算。