列举出现在excel中的下一对生日

给出以下数据

AB Steven 01/05/1958 Mike 05/12/1923 Bob 05/11/2001 Richard 10/22/1985 Maverick 12/25/1991 Ed 01/07/1954 

我想列出一个列表,让我们只是说列D,包含将出现的未来几个生日。

所以如果今天是05/05/2016,我想看看

 DE Bob 05/11/2001 Mike 05/12/1923 

我目前的做法(但不能正常工作)是创build另一列,并有计算生日的日子,使用这个公式:

 =DATE(YEAR(B2)+DATEDIF(B2+1;TODAY();"y")+1;MONTH(B2);DAY(B2))-TODAY() 

然后我列出在未来5天使用的生日:

 =IF(ISERROR(INDEX($A$2:$C$5,SMALL(IF($A$2:$C$5<5,ROW($A$2:$A$5)),ROW(1:1)),2)),"",INDEX($A$2:$C$5,SMALL(IF($A$2:$A$5<5,ROW($A$2:$A$5)),ROW(1:1)),2)) 

我宁愿接下来的5个即将到来的生日 ,不pipe今天有多远。

任何想法如何实现这一点,而不使用makros?

帮助非常感谢!

为了从今天起获得生日差异:

 =(DATEDIF($D$1,DATE(IF((DATE(YEAR($D$1),MONTH(B2),DAY(B2))>$D$1),YEAR($D$1),YEAR($D$1)+1),MONTH(B2),DAY(B2)),"D"))+0 

从当前date开始的第一个BD:

 =VLOOKUP(SMALL(A2:A8,1)+0,A2:B8,2,FALSE) 

请参阅img了解更多详情: excel_BD

另一种方法是使用Advanced Filter 。 你可以使用VBA自动化它。

对于标准:

 A2: =DATE(YEAR(TODAY()),MONTH(B6),DAY(B6))>=TODAY() B2: =(TODAY()+$C$2)>=DATE(YEAR(TODAY()),MONTH(B6),DAY(B6)) 

范围是今天显示生日之后的天数。

在这里输入图像说明

确定略有不同的方法

而不是计算助手列中的天数,请更改助手列中的date。 然后,只为前5个条目sorting帮助列。 这将显示即将到来的birthDAYS而不是birthDATES。

因此,假设A列中的名称,B列C列中的date创build为:

 =DATE(YEAR(TODAY())+IF(TODAY()>DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),1,0),MONTH(B2),DAY(B2)) 

现在我假定没有标题行,A1是第一个条目,所以显示列DI中使用的下一个5条目:

 =IF(ROW()<=5,SMALL($C$1:$C$6,ROW()),"") 

现在这不会拉名字,只是即将到来的birthDAYS不birthDATES。 今年是两者之间的差异。

如果你想拉名字,你可以使用以下内容:

 =IF(D2<>"",INDEX($A$1:$A$6,MATCH(D2,$C$1:$C$6,0)),"") 

现在它不会返回具有相同date的多个人的姓名,但有办法。 如果你需要,也让我们知道。

 (A) (B) (C) (D) (E) Steven 58/01/05 17/01/05 16/05/11 Bob Mike 23/05/12 16/05/12 16/05/12 Mike Bob 01/05/11 16/05/11 16/10/22 Richard Richard 85/10/22 16/10/22 16/12/25 Maverick Maverick 91/12/25 16/12/25 17/01/05 Steven Ed 54/01/07 17/01/07 

UPDATE

为了处理重复的生日,请尝试以下操作:

 =IF(E5<>"",INDEX($A$1:$A$6,MATCH(E5,$C$1:$C$6,0)+COUNTIF($E$1:E5,E5)-1),"") 

这是第5行的入口。我用相同的出生date进行了testing,但是我忘记检查同一生日(不同年份)。

更新2

新表下表与上次更新的公式相匹配

 (A) (B) (C) (D) (E) (F) (G) Steven 58/01/05 17/01/05 59 16/05/11 Bob 15 Mike 23/05/12 16/05/12 93 16/05/12 Mike 93 Bob 01/05/11 16/05/11 15 16/10/22 Richard 31 Richard 85/10/22 16/10/22 31 16/12/25 Maverick 25 Maverick 91/12/25 16/12/25 25 16/12/25 Ed 21 Ed 95/12/25 16/12/25 21 

我在D中插入了一列,这使得事情正确。 以下被放置在D1中。

 =year(C1)-Year(B1) 

在GI列中查找年龄

 =IF(E1<>"",INDEX($D$1:$D$6,MATCH(E1,$C$1:$C$6,0)+COUNTIF($E$1:E1,E1)-1),"")