列举出现在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了解更多详情:
另一种方法是使用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),"")