我以前的帖子
1. PHPSpreadsheet generates an error "Wrong number of arguments for INDEX() function: 5 given, between 1 and 4 expected"
2. Excel - Getting the Top 5 data of a column and their matching title but produces duplicates
我发现用于PHP的PHPSpreadsheet库尚未允许使用AGGREGATE()
和复杂的公式/函数,但我迫切需要它们的功能
回头,我的Excel中有2列(由我的由CodeIgniter和Laravel制作的Web应用程序生成)
问题是,文章计数列(在右侧)包含2个 54 值,该值应该属于2个不同的出版物(在左侧),但是使用公式=INDEX(E$4:E$38,MATCH(M4,J$4:J$38,0))
,它只会获取第一个匹配的出版物。
输出应如下所示:
原始表格:
我的问题是,Excel中什么是正确的函数或代码,以便我可以检索匹配数据的 SECOND 发布? 我的目标是文章数为 54 的那些出版物,但我想针对的是第二个,即字母 D ,不使用Excel的 Aggregate()功能
这是我使用的代码
1)=LARGE(J4:J38,1)
-J4:J38是我的原始数据范围,我正在使用它来按降序获得5个最高数字
2)=INDEX(E4:E38,MATCH(M4,J4:J38,0))
-我正在使用它来检索与文章计数
答案 0 :(得分:1)
在聊天中交流后,我们得到了正确的公式:
=INDEX(E$2:E$38,IF(M4=M3,MATCH(L3,E$2:E$38,0),0)+MATCH(M4,OFFSET(J$2,IF(M4=M3,MATCH(L3,E$2:E$38,0),0),0,COUNT(J$2:J$38)-IF(M4=M3,MATCH(L3,E$2:E$38,0),0),1),0))
这是如何工作的:
如果当前发布计数与上一个相同,则此IF(M4=M3,MATCH(L3,E$2:E$38,0),0)
返回上一行的发布标题在titles数组(E)中的位置。我们将此数字称为X。我们使用J(2 + X):J38代替结果使用J2:J38。此技巧是通过使用offset剪切上一行已使用的上一节来完成的。这样,在重复发布计数时,已经提到的标题就会被忽略。
答案 1 :(得分:0)
您需要使用AGGREGATE的SMALL子函数返回最小的匹配行号,并调整 k 参数以适应重复的排名。
'in M4
=LARGE(J$4:J$38, ROW(1:1))
'in L4
=INDEX(I:I, AGGREGATE(15, 7, ROW($4:$38)/(J$4:J$38=M4), COUNTIF(M$4:M4, M4)))