EXCLE中最精确的计算年龄的公式--指定日期
-
EXCLE
中最精确的计算年龄的公式
中午一个同事请教我有关
EXCLE
自动计算年龄的方法,
当时告诉她应该有一堆公式但是一
时没有谁能记得清楚,答应他回来以后上网查查。
到网上一搜,大失所望。几乎没有一种方法是精确的。
网上搜到的共式大概有这么几种:
1
、计算出生日期到某一指定日期(一般选用某年的最后一天入
2
006
年
12
月
31
日)的
的天数,然后除以
360
,得到一个数值,然后用
int()
函数取整,得出需要的年龄。一般
使用的公式如下:
=IF(C12=
聪明一点的人知道使用这个公
式,
=IF(C12=
TODAY(
)
)/
360))
这个方法,这个公
式的弊端在于,一、将每个月默认为
30
天去计算两个日期之间
的天数,
二、将每年默认为
360
天去
计算年龄。这种方法显然不精确。
2
、年份直接相减
计算周岁
=YEAR(NOW())-YEAR(C12)
计算虚岁
=YEAR(NOW())-YEAR(C12)+1
这种算法的精确程度显而易见,粗略估算还算可以。
3
、使用
DATEDIF
函数
这种方法与第一种方法采用了相同的思路,
但是其的精确程度显然比第一种方法要高,
这取
决
于
DATEDIF
函数本身的精确性。
=IF(C12=
或者,
=IF(C12=
now()
,
< br>但是这种方法强行将一年固定为
365
天,
我们知道通常情况每个四年就有一年是
366
天所<
/p>
以这种算法也不是很精确。
通过认真分
析,我觉得只有结合我们计算年龄的实际方法,才能编制出准确无误的公式。
首先分析人们计算年龄的方法。
例如
笔者系
1983
年
3
< br>月
20
日生人,
如果要在
2007
年
3
月
p>
23
日这天计算他的年龄,
通
常采用这样的方法。
首先,人们会用
2007
减去
1983
得出
的年龄为
24
岁,然后再看看他
“
p>
满没满
”24
岁,就
是看看出生的月份和日期比今天早还是晚,
如果出生日期晚于今天则表示没有满,
p>
那么他的
年龄就应该是
2007-1983
-1=23
岁。如果出生日期早于今天或者就是今天,就说明他已
经满了
24
岁或者正好满
24
岁,则他的年龄就是
2007-1983=24
岁。
分析清楚了计算年龄的过程我们再根据这个过程编写公
式就很容易了。
综上,我编写了如下公式,在实际应用中将公
式中所有的
C12
替换为,你的所使用的出生
< br>日期所在的表格行号列号组合即可。如(
A1
,
B2
等等)
YEAR(NOW())-YEAR(C12)-1 的任意值或表达式。 <
br>FALSE <
br>, 并紧跟着右括号)
=IF(
MONTH(NOW())
TH(NOW())>MONTH(C12),YEAR(NOW(
))-YEAR(C12),IF(DAY(NOW())>=DAY(C
12),YE
AR(NOW())-YEAR(C12),YEAR(NOW())-YEAR(C12)-1)))
公式说明
=IF ( MONTH(NOW())
//
如果当前日期的月份小于所需计算日期的月份,则表示今年没有过生日,年龄数为
,如果不是这种情况,进入下面
的判断
IF ( MONTH
(NOW())>MONTH(C12) , YEAR(NOW())-YEAR(C12) ,
//
如果当前日期的月份大于所需计
算日期的月份,则表示今年已经过生日,年龄数为
YEAR(NOW())-YEAR(
C12)
,
如果也不是这种情况,
则表
示这两个月份相等,
进入下面的
判断过程去判断,日期的情况。
IF ( DAY(NOW())>=DAY(C12) ,
YEAR(NOW())-YEAR(C12) ,
//<
/p>
如果今天的日期大于或者等于出生年月日中的日期,
则表示已经过
了生日,
或者正在过生
日,则年龄数为
YEAR(NOW())-YEAR(C12)
,否则表示今年没有过生日,年龄数应该
选
择下面的公式,大小为
YEAR(NOW())-YEAR(
C12)-1
YEAR(NOW())-YEAR(C12)-1 )
)
参考知识:
IF
请参阅
执行真假值判断,根据逻辑计算的真假值,返回不同结果。
可以使用函数
IF
对数值和公式进行条件检测。
语法
<
/p>
IF
(
logical_test
,
value_if_true
,value
_if_false)
Logical_test
表示计算结果为
TRUE
或
FALSE
例如,
A10=100
就是一个逻辑表达式,如果单元格
A10
中的值等于
100
,表达式即为
TRUE
,否则为
。本参数可使用任何
比较运算符
。
Value_if_true
logical_test
为
TRUE
时返回的值。例如,如果本参数为文本字符串
“
预算内
”
而且
p>
logical_test
参数值为
TRUE
,则
IF
函数将显示文本
“
预算内
”
。如果
logical_test
为
TRUE
而
value_if_true
为空,则本参数返回
0
(零)。如果要显示
TRUE
,则请为本参数使用逻辑值
TRUE
。
Value_if_tru
e
也可以是其他公式。
Value_if_false
logical_test
为
FALSE
时返回的值。
例如,
p>
如果本参数为文本字符串
“
超出预算
”
而且
logical_test
参数值为
FALSE
,则
IF
函数将显示文本
“
超出预算
”
。如
果
logical_test
为
FALSE
且忽略了
Value_if_false
(即
value_if_true
后没有逗号)
则会返回逻辑值
FALSE
。如果
logical_test
为
FALSE
且
Value_if_false
为空(即
value_if_true
后有逗号,
,
则本参数返回
0
(零)
。
V
alue_if_false
也
可以是其他公式。
说明
函数
IF
可以嵌套七层,
用
value_if_false
及
value_if_true
参数可以构造复杂
的检测条件。请参阅下面最后一个示例。
-
-