作者:绿色风
分类:
时间:2022-08-17
浏览:357
楼主 悟空师弟 |
Q:如何提取所有指定符合条件单元格前一单元格内数字中的第二大值? 即: 用公式求出B列"一"前面的第二大值,如本例的结果为5(按中国式排名算法)。
A:公式如下:(数组公式 )
- =LARGE(IF(B2:B31="一",B1:B30)*(MATCH(B1:B30,B1:B30,)=ROW(1:30)),2)
- =LARGE(IF(B2:B31="一",B1:B30),SUM(N(MAX(IF(B2:B31="一",B1:B30))=IF(B2:B31="一",B1:B30)))+1)
- =LARGE((FREQUENCY(IF(B2:B31="一",B1:B30),ROW(1:10)-1)>0)*ROW(1:11)-1,2)
附: 公式2由rongjun 老师提供! 公式3由biaotiger1 老师提供! 详见附件: 如何提取所有指定符合条件单元格前一单元格内数字中的第二大值?.rar
效果如图:
|
2楼 gouweicao78 |
公式1解法是错误的。 |
3楼 悟空师弟 |
→→→→→→→→→→→→→→→→→→→- 经过测试没发现错误,请草版指点迷津,谢谢 |
4楼 gouweicao78 |
在B32:B37输入1~6,然后B38输入“一”,按要求应得到6,此公式得到5。 因为此处的6不是第一次出现在B列,而此解法,使用MATCH=ROW判断的是“第一次”出现的数字。 |
5楼 rongjun |
稍微改下公式即可- =LARGE(IF(ISNUMBER(0/(MATCH(IF(B2:B31="一",B1:B30),B:B,)=ROW(1:30))),B1:B30),2)
|
6楼 悟空师弟 |
的确如此,因附件中没出现这种情况,被忽略了,感谢草版指导! 按我的思路更正一下公式:- =LARGE(IF(B2:B31="一",B1:B30)*(MATCH(IF(B2:B31="一",B1:B30),IF(B2:B31="一",B1:B30),)=ROW(1:30)),2)
|
7楼 悟空师弟 |
→→→→→→→→→→→→→→→→→→→→→→→→--
这个公式还是出现错误,比如把B3改为 5 ,此公式返回的结果变在 3 ,而实际还应该是 5 。 效果如图:
|
8楼 rongjun |
恩,欠考虑了,修改下- =LARGE((MATCH(B2:B31&B1:B30,B2:B31&B1:B30,)=ROW(1:30))*IF(B2:B31="一",B1:B30),2)
|
9楼 悟空师弟 |
→→→→→→→→→→→→→→→→→→→→→→→→→→
|
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一