分享

Excel公式:获取列表中最大数值和对应的条目

 hercules028 2022-11-10 发布于四川

excelperfect

引言:本文的练习整理自chandoo.org。多一些练习,想想自己会怎么解决这个问题,看看别人又是怎样解决的,这样能够快速提高Excel公式编写水平。

本次的练习是:给定一个包含数字和文本条目的单列列表,查找数字总和最大值对应的条目。示例数据如下图1所示,公式应该返回“c”,因为其对应的数字总和9是最大的。

Image

1

公式应该是仅涉及Excel函数的单个公式,该公式引用一个包含值列表的命名区域x(示例中,该命名区域代表单元格区域A1:A12)。

同时,假设数字都是正的。

请写下你的公式。

解决方案

公式1数组公式。

=INDEX(x,MATCH(MAX(MMULT(TRANSPOSE(ROW(x)^0),IFERROR((LOOKUP(ROW(x),1/ISERR(-x)*ROW(x),x)=TRANSPOSE(x))*x,0))),MMULT(TRANSPOSE(ROW(x)^0),IFERROR((LOOKUP(ROW(x),1/ISERR(-x)*ROW(x),x)=TRANSPOSE(x))*x,0)),0))

公式2数组公式。

=INDEX(x,ROUND(MOD(MAX(MMULT(IFERROR((TRANSPOSE(LOOKUP(ROW(x),1/ISERR(-x)*ROW(x),x))=x)*TRANSPOSE(x),0),ROW(x)^0)+MATCH(ROW(x),ROW(x),0)%),1)*100,0))

公式3数组公式。

=INDEX(x,INDEX(SMALL(IF(ISTEXT(x),ROW(x)),ROW(INDIRECT('1:'&SUM(--ISTEXT(x))))),MATCH(MAX(SUMIF(OFFSET(x,SMALL(IF(ISTEXT(x),ROW(x)),ROW(INDIRECT('1:'&SUM(--ISTEXT(x))))),,IFERROR(SMALL(IF(ISTEXT(OFFSET(x,1,)),ROW(OFFSET(x,1,))),ROW(INDIRECT('1:'&SUM(--ISTEXT(x)))))-1,ROWS(x))-SMALL(IF(ISTEXT(x),ROW(x)),ROW(INDIRECT('1:'&SUM(--ISTEXT(x))))),),'<>0')),SUMIF(OFFSET(x,SMALL(IF(ISTEXT(x),ROW(x)),ROW(INDIRECT('1:'&SUM(--ISTEXT(x))))),,IFERROR(SMALL(IF(ISTEXT(OFFSET(x,1,)),ROW(OFFSET(x,1,))),ROW(INDIRECT('1:'&SUM(--ISTEXT(x)))))-1,ROWS(x))-SMALL(IF(ISTEXT(x),ROW(x)),ROW(INDIRECT('1:'&SUM(--ISTEXT(x))))),),'<>0'),)))

公式4数组公式。

=INDEX(x,MATCH(1,FREQUENCY(-9999,-MMULT(IFERROR((TRANSPOSE(LOOKUP(ROW(x),1/ISERR(-x)*ROW(x),x))=x)*TRANSPOSE(x),0),ROW(x)^0)),0))

公式5数组公式。

=LOOKUP(1,1/FREQUENCY(-9999,-MMULT(IFERROR((TRANSPOSE(LOOKUP(ROW(x),1/ISERR(-x)*ROW(x),x))=x)*TRANSPOSE(x),0),ROW(x)^0)),x)

或者:

=LOOKUP(1,1/FREQUENCY(-9^9,-MMULT((TRANSPOSE(LOOKUP(ROW(x),ROW(x)/ISERR(-x),x))=x)*N(TRANSPOSE(x)),ROW(x)^0)),x)

或者:

=LOOKUP(1,1/FREQUENCY(-9^9,MMULT(N(TRANSPOSE(LOOKUP(ROW(x),ROW(x)/ISERR(-x),x))=x),IFERROR(-x,0))),x)

公式6数组公式。

=LOOKUP(1,1/FREQUENCY(-9^9,MMULT(N(TRANSPOSE(LOOKUP(ROW(x),ROW(x)/ISERR(-x)))=ROW(x)),IFERROR(-x,0))),x)

公式7数组公式。

=LOOKUP(1,1/FREQUENCY(0,IFERROR(1/SUBTOTAL(9,OFFSET(x,ROW(x)-MIN(ROW(x)),,FREQUENCY(-ROW(x),-ISTEXT(x)*ROW(x)))),-1)),x)

或者:

=LOOKUP(1,1/FREQUENCY(-9^9,-IFERROR(SUMIF(OFFSET(x,ROW(x)-ROW(INDEX(x,1)),,FREQUENCY(-ROW(x),-ISTEXT(x)*ROW(x)),1),'<>'),0)),x)

……

公式并没有给出详细的解析,有兴趣的朋友可以参照前面推送的有关分析公式的文章对这些公式进行解析,相信对理解Excel函数,编写公式解决问题会有很大的帮助。

也许有人会问,为什么要编写这么复杂的公式?其实,在这里的主要目的,是通过编写公式解决复杂的Excel问题来磨练公式与函数应用技能,也让研究Excel的大脑时刻保持良好的状态。


欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多