-1

例子:

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 中的用户定义函数来加快速度吗?

4

1 回答 1

1

要隔离 B 列中与已排序零件数据上的“书”相关的值,您可以将 B 列中的单元格引用为:

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

要隔离 B 列中与未排序零件数据上的任何零件相关的值,您可以将 B 列中的单元格引用为:

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)

根据需要填写。

    使用额外条件查找范围的顶部和底部 n% 的平均值2
            排序的标准公式

未排序的数组¹公式

在以下示例图像中,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)

    使用额外条件查找范围的顶部和底部 n% 的平均值
            未排序的数组公式


¹数组公式需要用Ctrl+ Shift+完成Enter↵</kbd>. Once entered into the first cell correctly, they can be filled or copied down or right just like any other formula. Try and reduce your full-column references to ranges more closely representing the extents of your actual data. Array formulas chew up calculation cycles logarithmically so it is good practise to narrow the referenced ranges to a minimum. See Guidelines and examples of array formulas for more information.

于 2015-12-16T12:36:36.837 回答