Excel – 根据相邻的单元格值select一个单元格

我有以下excel电子表格,我正在努力研究如何编写一个公式,以便提供列D中的值。

在每一行中,都有一个testingdate,我试图计算每个testingdate到每个主题特定的主要date的日差。

我假设这将涉及基于列C中的值select主要testingdate,我不知道我怎么能做到这一点。

任何帮助,将不胜感激。

ABCD Subject TestDate Principal date Day difference from Principal date Subject 1 01/12/2014 -3 Subject 1 02/12/2014 -2 Subject 1 03/12/2014 -1 Subject 1 04/12/2014 Yes 0 Subject 2 07/12/2014 -1 Subject 2 08/12/2014 Yes 0 Subject 2 11/12/2014 3 Subject 3 17/12/2014 -1 Subject 3 18/12/2014 Yes 0 Subject 3 24/12/2014 6 

这里的逻辑是:(1)找出每个主体的主date的date,并返回每一行; (2)从col B的当前date中减去这个date。 (2)很容易,但(1)需要一种方法来匹配SubjectPrincipal Date B值。 您可以使用具有多个MATCH条件的INDEX-MATCH函数来执行此操作。

使用A2:C11数据和row 1的列标题,在D2input此公式并填写:

{=B2-INDEX($A$2:$C$11,MATCH(1,($A$2:$A$11=$A2)*($C$2:$C$11="Yes"),0), 2)}

请注意,您需要使用Ctrl Shift Enter将其作为数组公式input


INDEX-MATCH函数的逻辑是:

  • A2:C11是你的整个原始数据表; 该函数查看整个表。
    • 请注意,如果需要,可以包含标题,这可以通过匹配列标题名称定义查找列。 如果你这样做,你需要确保所有的数组具有相同的维度(例如,如果你的数据表是A1:C11 ,你的MATCH函数中的row 1需要从第一row 1开始)。
  • MATCH函数从通过乘以多个逻辑条件而提供的查找数组中查找值1 。 它将评估A2=A2A3=A2A4=A2等,并创build一个TRUE / FALSE值的列。 然后, C2="Yes"C3="Yes"等等,逻辑数组的乘积在两个条件满足时都是1 。 ( 0告诉MATCH寻找完全匹配。)
  • 2告诉INDEX函数在MATCH函数指定的行中查找第二列( B )中的值 – 满足两个条件。

然后从B2的值中减去该值以给出date差异。


正如在评论中指出的那样,这个公式也可以被简化为仅索引期望的查找列:

=B2-INDEX($B$2:$B$11,MATCH(1,($A$2:$A$11=$A2)*($C$2:$C$11="Yes"),0))

与@Brendan大致相同,但略短一些。 这仍然是使用Ctrl + Shift + Enterinput的数组公式

 =B2-SMALL(IF(IF($A$2:$A$11=A2,$C$2:$C$11)="Yes",$B$2:$B$11),1) 

内部的IF($A$2:$A$11=A2,$C$2:$C$11)可以让你得到一个只有主体对应的主体的数组。下一个IF(IF(...)="Yes",$B$2:$B$11)得到一个只有主体date的数组,其他所有值都是FALSE。 SMALL(...,1)可以获取您可以从当前testingdate减去的主要date: B2-SMALL(...)

从TestDate中提取DAY(),并添加Day差异:

公式栏目主要date:= DAY(B2)+ D2

  ABCD 1 Subject TestDate Principal date Day difference from Principal 2 Subject 1 2014-06-01 28 -3 

现在你有正确的一天,你可以在一个新的列中创build一个新的date,或者结合这两个function。