其实,在excel2010新增的函数中,有一个正好可以解决这个问题。它就是:
NetWorkDays.INTL
(返回两个日期之间的所有工作日数,使用参数指示哪些天是周末,以及有多少天是周末。周末和任何指定为假期的日期不被视为工作日。)
下面是2015年1月份的工资表局部。
我们可以帮这位HR妹妹这样设置公式:
C2=NETWORKDAYS.INTL(IF(B2<DATE(2015,1,1),DATE(2015,1,1),B2),DATE(2015,1,31),11)
公式说明:
IF(B2<DATE(2015,1,1),DATE(2015,1,1),B2);区分是不是新入职,如果不是新入职按本月1日作为开始日期,否则即为新入职,按实际入职日期算。
DATE(2015,1,31):本月最后一天作为计算的截止日期。
11: 表示本公司是一周六天工作日,星期日是休息日期。
语法(来自excel帮助文件)
NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays])
NETWORKDAYS.INTL 函数语法具有以下参数 (参数:为操作、事件、方法、属性、函数或过程提供信息的值。):
start_date 和 end_date 必需。要计算其差值的日期。start_date 可以早于或晚于 end_date,也可以与它相同。
weekend 可选。表示介于 start_date 和 end_date 之间但又不包括在所有工作日数中的周末日。weekend 是周末数值或字符串,用于指定周末时间。
weekend 数值表示以下周末日:
周末数 | 周末日 |
---|---|
1 或省略 | 星期六、星期日 |
2 | 星期日、星期一 |
3 | 星期一、星期二 |
4 | 星期二、星期三 |
5 | 星期三、星期四 |
6 | 星期四、星期五 |
7 | 星期五、星期六 |
11 | 仅星期日 |
12 | 仅星期一 |
13 | 仅星期二 |
14 | 仅星期三 |
15 | 仅星期四 |
16 | 仅星期五 |
17 | 仅星期六 |
weekend 字符串值为 7 个字符长,该字符串中的每个字符代表一周中的一天,从星期一开始。1 代表非工作日,0 代表工作日。该字符串中只允许使用字符 1 和 0。使用 1111111 将始终返回 0。
例如,0000011 得到的结果是星期六和星期日为周末。
holidays 可选。一个包含一个或多个日期的可选集合,这些日期将从工作日日历中排除。假期应该是包含日期的单元格区域,也可以是代表这些日期的序列值的数组常量。假期中的日期或序列值的顺序可以是任意的。
如果 start_date 晚于 end_date,则返回值将为负数,数量将是所有工作日的数量。
如果 start_date 在当前日期基准值的范围之外,则 NETWORKDAYS.INTL 返回错误值 #NUM!。
如果 end_date 在当前日期基准值的范围之外,则 NETWORKDAYS.INTL 返回错误值 #NUM!。
如果 weekend 字符串的长度无效或包含无效字符,则 NETWORKDAYS.INTL 返回错误值 #VALUE!。
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。