请教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格的范围?
谢谢啦!
展开
 我来答
山桑弓
2012-03-12 · TA获得超过1.2万个赞
知道大有可为答主
回答量:7793
采纳率:66%
帮助的人:2748万
展开全部
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)
追问
先谢谢了!但是这里-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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mengdanmengdan
2012-03-12 · TA获得超过2333个赞
知道大有可为答主
回答量:2000
采纳率:0%
帮助的人:1301万
展开全部
因为是排序的,输入countif(B1:B50,B25),这样数据量应该小很多的。你试试拿一个1万个数据的表试试。
前24行可以用原来的公式countif(B:B,B2)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式