INDEX / MATCH仅查找具有多个条目的列中的第一个值

时间:2016-04-29 15:01:44

标签: excel vba excel-vba excel-formula

列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个值。

1 个答案:

答案 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,依此类推。

enter image description here

根据您的评论,此公式是动态的,可将参考数据限制为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)))

enter image description here