请教EXCEL:我要用countif来计算一定范围内的某个数出现了几次,但是由于数据量太大,怎样缩小范围?
用countif(B:B,B2)这样可以计算B2里的数字在这一列中出现了多少次,但是当我的数据多达27万个时,B:B的范围太大了,27万个数字每个数字要计算一遍它在这一列...
用countif(B:B,B2)这样可以计算B2里的数字在这一列中出现了多少次,但是当我的数据多达27万个时,B:B的范围太大了,27万个数字每个数字要计算一遍它在这一列有多少个,相当于要计算270000*270000遍,因此导致运行非常慢,27万个数字用双核的电脑要计算估计要花4个小时以上,所以太慢了,不可行。而我有5张这样的含有27万的表,时间实在忍不了。
有没有一种办法可以将计算的范围缩小。因为我已经按数字升序排列,而每个数字重复的次数不超过20,也就是说,这个数字存在的范围就在该数字所在单元格的前后20个单元格内,我只需在公式中,把B:B改掉就可以,比如改为B20的前后20格的范围,我的问题就是可不可以用某个公式来表示B20周围的前20格后20格的范围?
谢谢啦! 展开
有没有一种办法可以将计算的范围缩小。因为我已经按数字升序排列,而每个数字重复的次数不超过20,也就是说,这个数字存在的范围就在该数字所在单元格的前后20个单元格内,我只需在公式中,把B:B改掉就可以,比如改为B20的前后20格的范围,我的问题就是可不可以用某个公式来表示B20周围的前20格后20格的范围?
谢谢啦! 展开
2个回答
展开全部
C20中输入
=COUNTIF(OFFSET(B20,MAX(-ROW(B20)+1,ROW(B20)-40),,40),B20)
试试,因为如果不到第21行,向上偏移20行会出错,所以增加了一个判断,公式显得长了,如果在21行或之后用,可以简化,如C21中输入
=COUNTIF(OFFSET(B21,ROW(B21)-40,,40),B21)
=COUNTIF(OFFSET(B20,MAX(-ROW(B20)+1,ROW(B20)-40),,40),B20)
试试,因为如果不到第21行,向上偏移20行会出错,所以增加了一个判断,公式显得长了,如果在21行或之后用,可以简化,如C21中输入
=COUNTIF(OFFSET(B21,ROW(B21)-40,,40),B21)
追问
先谢谢了!但是这里-40,应该是相当于往前了40格,我要的是B21格的前20格和后20格的范围,必须同时包括前20格和后20格,这样能实现吗?
追答
OFFSET(B21,ROW(B21)-40,,40)中,ROW(B21)返回行号,就是21,21-40=-19,就是向上偏19行,你如果要求向上偏20行,改为row(B20)-41,后面那个40,是把返回高度为40行,你如果想包含本身再上下20行,就改为41,其中OFFSET就分应改为
OFFSET(B21,ROW(B21)-41,,40)
整个公式为=COUNTIF(OFFSET(B21,ROW(B21)-41,,41),B21)
仅能在第21行开始使用,否则向上找不到偏移20,会出错的。所以那个通用版,C21的公式改为
=COUNTIF(OFFSET(B21,MAX(-ROW(B21)+1,ROW(B21)-41),,41),B21)
可上拉到C1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询