列A具有需要与列B匹配的值列表。如果匹配,则应返回列C中的相邻值。我正在使用INDEX / MATCH来执行此操作。但是,如果列A具有重复的值,则INDEX / MATCH函数返回列B中的第一个值,而不是列B中查找的第二个或第三个值。是否可以找到其他值(除了第一个)在B列中使用INDEX / MATCH函数?
以下是示例表:
$this->dbforge->add_field('id INT NOT NULL AUTO_INCREMENT PRIMARY KEY');
$this->dbforge->add_field('CONSTRAINT FOREIGN KEY (id) REFERENCES table(id)');
$this->dbforge->add_field('INDEX (deleted)');
$this->dbforge->add_column('table',[
'COLUMN id INT NULL AFTER field',
'CONSTRAINT fk_id FOREIGN KEY(id) REFERENCES table(id)',
]);
所以在这里,如果我从A列中寻找第4个值,它会匹配B列的第3个值而不是第4个值。
答案 0 :(得分:1)
您将使用AGGREGATE()函数代替MATCH:
=INDEX($C$1:$C$8,AGGREGATE(15,6,ROW($A$1:$A$8)/($A$1:$A$8=B1),COUNTIF($B$1:$B1,B1)))
AGGREGATE(15,6,...)模拟SMALL(IF())函数。 ROW($A$1:$A$8)/($A$1:$A$8=B1)
创建一个行号数组,其中B1 = $ A $ 1:$ A $ 8。
COUNTIF($ B $ 1:$ B1,B1)将告诉AGGREGATE()函数返回哪个行号数组。当它被拖下来时,计数将从1变为2到3,依此类推。
根据您的评论,此公式是动态的,可将参考数据限制为A列的范围。
INDEX(C:C,MATCH("ZZZ",A:A))
返回C列中的最后一行,其中A列中有数据
将其放入D2并复制下来。
=INDEX($C$1:INDEX(C:C,MATCH("ZZZ",A:A)),AGGREGATE(15,6,ROW($A$1:INDEX(A:A,MATCH("ZZZ",A:A)))/($A$1:INDEX(A:A,MATCH("ZZZ",A:A))=B2),COUNTIF($B$1:$B2,B2)))
修改2
我显然让我的专栏倒了。
将其放入D2并复制下来。
=INDEX($C$1:INDEX(C:C,MATCH("ZZZ",A:A)),AGGREGATE(15,6,ROW($B$1:INDEX(B:B,MATCH("ZZZ",A:A)))/($B$1:INDEX(B:B,MATCH("ZZZ",A:A))=A2),COUNTIF($A$1:$A2,A2)))