发信人: oicu (Oh! I see you!), 信区: OfficeSoft
标 题: Re: 求助一个统计同一列不重复名字的问题
发信站: 水木社区 (Tue Jan 13 10:48:50 2015), 站内
不过countif的效率还是差很多,换一个时间复杂度小一点的方法,
以下2种方法,测试100万行,还是勉强可以用,10万行压力不大:
{=SUM(IF(MATCH(A1:A1000,A1:A1000,)=ROW(1:1000),1,))}
或者
=SUM(IF(FREQUENCY(MATCH(A1:A1000,A1:A1000,0),MATCH(A1:A1000,A1:A1000,0))>0,1))
用countif的话1万行都吃力~
{=SUM(1/COUNTIF(A1:A1000,A1:A1000))}
或者
=SUMPRODUCT(1/COUNTIF(A1:A1000,A1:A1000))
以上公式,有空的单元格时会出错,需要打个补丁,比如
{=SUM(IF(COUNTIF(A1:A1000,A1:A1000)=0,0,1/COUNTIF(A1:A1000,A1:A1000)))}
http://iknow.baidu.com/question/108209201.html
统计不重复项的Excel数组公式
{=SUM(1/COUNTIF(A1:A7,A1:A7))}
举个简单的例子,比如,A1:A7中有A,A,A,B,C,D,D
首先 COUNTIF(A1:A7,A1:A7) 返回对每个单元格里面的数值统计的个数,返
回{3,3,3,1,1,2,2},对应 {A,A,A,B,C,D,D} 就很容易明白,返回的是这组数据
每个所对应的个数。
其次,用1去除,如果返回个数是1的,就还等于1,如果返回个数是大于1的,
比如是n,就会变成1/n ,一共会有n个1/n(这点明白很关键),比如上面就返回
{1/3,1/3,1/3,1,1,1/2,1/2}
最后,用SUM去求和,n个1/n相加,就等于1,意思是,有重复项的,只计作了1,
所以就能统计不重复项了。
发信人: trends (英朗 1.6T), 信区: OfficeSoft
标 题: Re: excel如何返回指定一行内容不同的单元格个数?
发信站: 水木社区 (Wed Apr 7 15:40:32 2010), 站内
=SUMPRODUCT(1/COUNTIF(A1:I1,A1:I1))
【 在 comego (来是come去是go) 的大作中提到: 】
: 比如 10 23 25 26 14 58 10 23 25
: 返回 6
评论