示例:
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中的用户定义函数来加速吗?
答案 0 :(得分:1)
要隔离B列中与已排序的零件数据上的“预订”相关的值,您可以将B列中的单元格引用为:
INDEX(B:B, MATCH("book", A:A, 0):INDEX(B:B, MATCH("book", A:A)
要隔离B列中与未排序的 Part 数据的任何部分相关的值,您可以将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)
根据需要填写。
数组¹未排序的公式
在下面的示例图像中,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)
¹数组公式需要用 Ctrl + Shift + Enter↵完成。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas。