ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何提取所有指定符合条件单元格前一单元格内数字中的第二大值?

如何提取所有指定符合条件单元格前一单元格内数字中的第二大值?

作者:绿色风 分类: 时间:2022-08-17 浏览:357
楼主
悟空师弟
Q:如何提取所有指定符合条件单元格前一单元格内数字中的第二大值?
    即:
     用公式求出B""前面的第二大值,如本例的结果为5(按中国式排名算法)。


A:公式如下:(数组公式

  1. =LARGE(IF(B2:B31="一",B1:B30)*(MATCH(B1:B30,B1:B30,)=ROW(1:30)),2)
  2. =LARGE(IF(B2:B31="一",B1:B30),SUM(N(MAX(IF(B2:B31="一",B1:B30))=IF(B2:B31="一",B1:B30)))+1)
  3. =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
稍微改下公式即可
  1. =LARGE(IF(ISNUMBER(0/(MATCH(IF(B2:B31="一",B1:B30),B:B,)=ROW(1:30))),B1:B30),2)
6楼
悟空师弟
的确如此,因附件中没出现这种情况,被忽略了,感谢草版指导!
按我的思路更正一下公式:
  1. =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

恩,欠考虑了,修改下
  1. =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总版主之一

评论列表
sitemap