我来看看:)
首先,数组公式的思路是正确的,做得不错!你的明细数据这么规整(已经按业务员排序),有几个建议给你(可能有点就事论事儿):
1、对于此类明细数据一般可能数据量会很大,使用辅助列是一个好方法,但是既然使用了辅助列,那么就应该好好利用其辅助性,将一个数组公式可以完成的工作让其他辅助来分担,因此,建议用一个简单公式来代替辅助列公式,如:
C2=(B2<>B1)+N(C1),
那么辅助表中业务员的公式就简单了,如:
=IF(ROW(A1)<=MAX(资料表!C:C),INDEX(资料表!B:B,MATCH(ROW(A1),资料表!C:C,0)),"")
如果即使用了辅助列,最终还是要用数组公式来处理,那么辅助列是否有点得不偿失?:)
2、由于你的明细表已经排序,那么对于取客户的辅助公式就有些多余了,为什么呢?因为我们可以用公式直接在明细表中取得相应的客户,如客户公式为:
客户名称=OFFSET(资料表!$A$1,MATCH(业务员,资料表!$B:$B,0)-1,0,COUNTIF(资料表!$B:$B,业务员))
3、以上想法是在你的明细数据在排序情况下的普通公式的用法,但如果真正工作中的明细表可能就并非如此(可能是无序的),那么“明细表”辅助列的公式可以为:=(MATCH($B2,B:B,0)=ROW())+N(C1),业务员辅助公式不变;在这种情况,你的客户公式就起作用了。
4、最后我们再看看“客户名称”的定义,介绍一个Fieldsun版主的公式(对字符型数据有效),挺有意思的:)
=OFFSET(辅助表!$B$2,0,0,COUNTIF(辅助表!$B:$B,"?*")-1,)
另外:对于数据量大的工作表中,我们最好少用Countif()函数,因为Countif()是个易失函数,每次操作工作表后都会自动运算一次,在数据海量的情况下我们最好少用(如果确实需要,建议最好指定范围),有兴趣的话你可以将数据增加到上千行试试。
如果我们是练习数组公式,没有问题,如果是在工作中,那么运算速度问题就必须考虑,没有任何一个老板会花时间来等待公式的运算的,他希望是越快越好!呵呵~~~就写这么多了,有问题可以共同探讨:)
[此贴子已经被作者于2004-11-8 20:22:33编辑过] |