Excel-从您的对应数据中获取第二个或第n个匹配的字符串

时间:2019-05-08 06:08:44

标签: php excel laravel codeigniter phpspreadsheet

我以前的帖子
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 Columns

问题是,文章计数列(在右侧)包含2个 54 值,该值应该属于2个不同的出版物(在左侧),但是使用公式=INDEX(E$4:E$38,MATCH(M4,J$4:J$38,0)),它只会获取第一个匹配的出版物

输出应如下所示:
output

原始表格
raw

我的问题是,Excel中什么是正确的函数或代码,以便我可以检索匹配数据的 SECOND 发布? 我的目标是文章数 54 的那些出版物,但我想针对的是第二个,即字母 D ,不使用Excel的 Aggregate()功能

这是我使用的代码
1)=LARGE(J4:J38,1)-J4:J38是我的原始数据范围,我正在使用它来按降序获得5个最高数字
2)=INDEX(E4:E38,MATCH(M4,J4:J38,0))-我正在使用它来检索与文章计数

相匹配的出版物名称

2 个答案:

答案 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)))

enter image description here