ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何求当前行与上一有特定内容单元格的行中间隔几行?

如何求当前行与上一有特定内容单元格的行中间隔几行?

作者:绿色风 分类: 时间:2022-08-17 浏览:150
楼主
wjc2090742
Q:如何求当前行与上一有特定内容单元格的行中间隔几行?如下图,A列为数据,B列所算为对应的A列单元格与上面一个“不合格”中间相隔几行。

 
A:数组公式:
  1. =MATCH(1,COUNTIF(OFFSET(A1,,,-ROW(A$1:A1)),"不合格"),)-1

叶版的公式:
  1. =COUNT(OFFSET(A1,,,-(ROW()-LOOKUP(1,0/(A$1:A1="不合格"),ROW($1:1)))))

与上个不合格相隔的行数.rar
2楼
wangg913
  1. =LOOKUP(8,0/(A$1:A1="不合格"),ROW()-ROW($2:2))
3楼
wjc2090742



恰好呢,lookup是一点都不会的,尤其用来构建数组的那种用法,正好跟大头兄学习下。我只想得出match的:

  1. =MATCH("不合格",T(OFFSET(A2,-ROW($1:1),,)),)-1


一直喜欢countif的,觉得扩展性比较好,比如下面的情况,求2列中,与其中任何一列上一个“不合格”相隔行数,稍微变动下就行了,公式长度也差不多,如果处理一个区域,这个写法就有优势了。


 

  1. =MATCH(1,N(COUNTIF(OFFSET(A1:B1,,,-ROW($1:1)),"不合格")>0),)-1
4楼
wangg913
Match(,t(offset(,,,
我原先常用来求最后连续个数。其实lookup更简便。
countif 区域性能好。可能也更快。
不过直接求最大值与当前行比较也行。
方法有几个。哈哈。
5楼
zhanghi
怎么全都是高手呀
6楼
wjc2090742



大头兄写写分享下吧,我只想的出来一个。单列:

  1. =ROW(A1)-MAX((A$1:A1="不合格")*(ROW($1:1)))
7楼
wangg913
=ROW(A1)-MAX(MOD(SMALL((A$1:C1="不合格")*ROW($1:1)+{1,2,3}/1%,{1,2,3}*ROW(A1)),100))
8楼
wjc2090742
以下面图中3列情况来说

 

countif的算法,将offset的第一个参数稍作修改即可。
  1. =MATCH(1,N(COUNTIF(OFFSET(A1:C1,,,-ROW($1:1)),"不合格")>0),)-1


max的算法刚刚想到,扩展性也不错:
  1. =ROW(A1)-MAX((MMULT(N(A$1:C1="不合格"),{1;1;1})>0)*ROW(A$1:A1))




我看到题目就一直想着从下往上,大头兄提示后才想到自上而下的取值计算也是可以的。十分感谢,热盼兄弟多来发挥才是

与上个不合格相隔的行数.rar
9楼
wangg913
  1. =MATCH(TRUE,3>SUBTOTAL(2,OFFSET(A2:C2,-ROW($1:1),)),)-1
10楼
wjc2090742
我还是喜欢countif,不止一种文本时也适用。题目规定了一种文本的,只是自己特别喜欢countif吧,算是小癖好,莫要见笑啊。




大头兄厉害,用3>count来判断,思路非常巧妙,学习了。其实是第一次在offset里用负的参数呢,一天里遇到2个这样的提问,特别兴奋。写了之后,又见到叶版和兄弟的思路,这个题目收获真是不少。
11楼
wangg913
叶版是谁?
全名是??
12楼
wise
yfan17.
叶凡
13楼
wangg913
EH见过,百度一下。哈哈。

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap