EXCEL-使用名称和日期的上次出现之间的天数

时间:2018-10-11 03:30:34

标签: excel date

我想使用我认为的“匹配”来找到上次出现之间的日期,并找出当前日期和它们出现的最后日期之间的差额。不过,我想对其进行自定义。如果它们分别出现在10/12和10/13上,我希望是0。因为没有休息日。但是对于10/12以及再次在10/14上,它将是1。我希望最多6天,而我希望它超过6天。

C2=IFERROR(DAYS($B2,INDIRECT("A"&MAX(IF(A2=$A$1,ROW($A$1),0)))),0)

数据:

Team  Date
BOS   1980-10-10
BUF   1980-10-10
CGY   1980-10-10
CHI   1980-10-10
HFD   1980-10-10
NYR   1980-10-10
DET   1980-10-11
EDM   1980-10-11
BOS   1980-10-12
CGY   1980-10-12
CHI   1980-10-12
CLR   1980-10-12
DET   1980-10-12
HFD   1980-10-12
LAK   1980-10-12
LAK   1980-10-12
MNS   1980-10-12
MTL   1980-10-12
NYI   1980-10-12
NYR   1980-10-12
BOS   1980-10-13
BUF   1980-10-13
CGY   1980-10-13
CHI   1980-10-13
CLR   1980-10-13
EDM   1980-10-13
HFD   1980-10-13
MTL   1980-10-13
NYI   1980-10-13
NYR   1980-10-13

结果

Team    Date    Days Rest
BOS 1980-10-10  6
BUF 1980-10-10  6
CGY 1980-10-10  6
CHI 1980-10-10  6
HFD 1980-10-10  6
NYR 1980-10-10  6
DET 1980-10-11  6
EDM 1980-10-11  6
BOS 1980-10-12  1
CGY 1980-10-12  1
CHI 1980-10-12  1
CLR 1980-10-12  6
DET 1980-10-12  0
HFD 1980-10-12  1
LAK 1980-10-12  6
LAK 1980-10-12  0
MNS 1980-10-12  6
MTL 1980-10-12  6
NYI 1980-10-12  6
NYR 1980-10-12  1
BOS 1980-10-13  0
BUF 1980-10-13  2
CGY 1980-10-13  0
CHI 1980-10-13  0
CLR 1980-10-13  0
EDM 1980-10-13  1
HFD 1980-10-13  0
MTL 1980-10-13  0
NYI 1980-10-13  0
NYR 1980-10-13  0

1 个答案:

答案 0 :(得分:1)

编辑:发布后,我意识到从您那里得到的结果截然不同。与今天的日期相比,您的第一笔记录返回了6,远远超过了6天的限制。
我的公式是将当前的团队日期与上一个团队日期进行比较,而不考虑下一个尚未玩过的游戏。
我会保留答案,因为它可能会有用。

在每一行中,您需要在当前队伍以下的队伍中执行MATCH

要获取当前行下方的团队其他数据的引用,可以使用INDEXCOUNTA
在第2行中输入的以下公式将引用单元格A3:A31,向下拖动到第3行将引用A4:A31,依此类推。在大多数情况下,单独使用它会返回#VALUE错误。

=$A3:INDEX($A:$A,COUNTA($A:$A))  

MATCH函数结合使用,它将返回下一次出现Team的行数,或者返回#N/A错误。

=MATCH($A2,$A3:INDEX($A:$A,COUNTA($A:$A)),0)  

将当前行号添加到结果中,以给出下一次出现的实际行:

=MATCH($A2,$A3:INDEX($A:$A,COUNTA($A:$A)),0)+ROW()

接下来,需要引用返回的行号B列中的日期。 INDEX可用于引用所有B列,并从正确的行返回值:

=INDEX($B:$B,MATCH($A2,$A3:INDEX($A:$A,COUNTA($A:$A)),0)+ROW())  

然后可以将其与当前行上的日期进行比较以找出差异(减去1则第二天= 0):

=DATEDIF($B2,INDEX($B:$B,MATCH($A2,$A3:INDEX($A:$A,COUNTA($A:$A)),0)+ROW()),"d")-1 

处理有任何错误(如果最后提及团队则#N/A,如果列表中最后一项则#NUM!):

=IFERROR(DATEDIF($B2,INDEX($B:$B,MATCH($A2,$A3:INDEX($A:$A,COUNTA($A:$A)),0)+ROW()),"d")-1,"-")  

现在,第16行上的 LAK 只有-1处理。我能想到的最短的方法是使用下一列作为最终结果:

=IF($C2<0,0,$C2)