=IF(R5="", "", YEAR(TODAY())-MID(R5,7,4)) 修改公式按月份哪一天,算出实际年龄
时间: 2023-11-02 20:06:23 浏览: 112
如果要按月份的某一天算出实际年龄,可以使用以下公式:
=IF(R5="", "", DATEDIF(R5, TODAY(), "y")-IF(MONTH(R5)>MONTH(TODAY()),1,IF(AND(MONTH(R5)=MONTH(TODAY()),DAY(R5)>DAY(TODAY())),1,0)))
这个公式会计算出出生日期(R5)到今天(TODAY())之间的年份差,然后根据出生日期和今天的月份和日期来调整年龄计算结果。如果出生日期的月份大于今天的月份,那么就需要减去1年;如果出生日期的月份等于今天的月份,但是出生日期的日期大于今天的日期,也需要减去1年。最后,把计算结果作为公式的返回值即可。
相关问题
=IF(R5="", "", DATEDIF(R5, TODAY(), "y")-IF(MONTH(R5)>MONTH(TODAY()),1,IF(AND(MONTH(R5)=MONTH(TODAY()),DAY(R5)>DAY(TODAY())),1,0)))公式有问题吗?
这个公式是可以正确计算出按月份的某一天算出实际年龄的。以下是该公式的详细说明:
1. 如果R5单元格为空,则返回空值。
2. 如果R5单元格不为空,则使用DATEDIF函数计算出生日期(R5)与今天的年份差。DATEDIF函数的第三个参数为"y",表示计算年份差。
3. 如果出生日期的月份大于今天的月份,则需要减去1年。如果出生日期的月份等于今天的月份,但是出生日期的日期大于今天的日期,则也需要减去1年。这个判断逻辑使用IF和AND函数实现。
因此,该公式是没有问题的。
RJ = ceil(Np*rand); r5 = rand(); r6 = rand(); r7 = rand(); C2 = 2*Np*WF; stepsize2 = r7*(var_max-var_min)*exp(-C2*gen/maxgen); POS(i,:) = (r5*PBEST(i,:) - r6*PBEST(RJ,:)) + stepsize2;哪里的语法错误,怎么修改
这段代码存在两个语法错误。
第一个是在最后一行的表达式中,缺少了运算符。你需要在 `PBEST(RJ,:)` 和 `stepsize2` 之间添加一个乘号 `*`。
第二个是在倒数第二行的表达式中,缺少了一个加号 `+` 或减号 `-`。你需要在 `r5*PBEST(i,:)` 和 `stepsize2` 之间添加一个加号或减号来完成表达式。
修改后的代码应该是这样的:
```
RJ = ceil(Np*rand); r5 = rand(); r6 = rand(); r7 = rand();
C2 = 2*Np*WF;
stepsize2 = r7*(var_max-var_min)*exp(-C2*gen/maxgen);
POS(i,:) = (r5*PBEST(i,:) - r6*PBEST(RJ,:)) + stepsize2;
```
阅读全文