计算日期之间的工作日,然后使用其他逻辑将其分配给日历月

时间:2018-07-22 09:35:12

标签: excel date excel-formula

我已经尝试破解了几天,因为我充其量是一名出色的中级人才。而且我正在努力。

基本上,我有3列数据:一列带休假时间,下一列带开始日期,最后一列带结束日期。

我需要能够正确分析和分配每个日历月的工作日数。然后,将在摘要页面上对其进行“摘要”。我发现了一种使我接近,极其接近的方法(这要感谢另一个stackoverflow帖子)。以下是使我接近的公式:

=MAX(0,MIN(IF($W1592="",TODAY(),$W1592),EOMONTH(DATEVALUE(AB$3&"-17"),0))-MAX($V1592,DATEVALUE(AB$3&"-17"))+1)

问题在于,有些请假少于一天全天。有时可能只有2.5小时。我需要公式说明,如果请假开始日期和结束日期在同一个月,则返回请假时间的计算/7.5(= $ U4 / 7.5)

我尝试了几种不同的方法,但是没有任何效果。感谢您的协助。

Snip of worksheet showing data and how it should be allocated

1 个答案:

答案 0 :(得分:1)

使用

A2:C9 = <your sample data>

我放了:

L1 = Sep-2017
M1 = Oct-2017
N1 = Nov-2017
O1 = Dec-2017
P1 = Jan-2018
Q1 = Feb-2018
R1 = Mar-2018
S1 = Apr-2018
T1 = May-2018
U1 = Jun-2018
V1 = Jul-2018
W1 = Aug-2018
X1 = Sep-2018
Y1 = Oct-2018

*all in proper excel date format

L2

=IF(AND(AND(MONTH(L$1)=MONTH($B2),YEAR(L$1)=YEAR($B2)),AND(MONTH(L$1)=MONTH($C2),YEAR(L$1)=YEAR($C2))),$A2/7.5,IF(AND(AND(MONTH(L$1)=MONTH($B2),YEAR(L$1)=YEAR($B2)),MONTH($B2)<>MONTH($C2)),EOMONTH($B2,0)-$B2,IF(AND(AND(MONTH(L$1)=MONTH($C2),YEAR(L$1)=YEAR($C2)),MONTH($B2)<>MONTH($C2)),DAY($C2),IF(AND(AND(MONTH(L$1)<>MONTH($C2),MONTH($B2)<>MONTH($C2),MONTH(L$1)<>MONTH($B2)),AND(L$1>$B2,L$1<$C2)),DAY(EOMONTH(L$1,0)),""))))

并将其拖动到Y9

最后

L10   =SUM(L2:L9)

将其拖动到Y10。

因此,您的“每个日历月的工作日数”将在L10:Y10中。

我认为这应该可以帮助您。如果您需要帮助,请发表评论。 (:

+ ---------- [算法信息] ----------- +

如果是L2,则崩溃:

r = a = b

=IF(AND(AND(MONTH(L$1)=MONTH($B2),YEAR(L$1)=YEAR($B2)),AND(MONTH(L$1)=MONTH($C2),YEAR(L$1)=YEAR($C2))),$A2/7.5,"")

r = a,a!= b

=IF(AND(AND(MONTH(L$1)=MONTH($B2),YEAR(L$1)=YEAR($B2)),MONTH($B2)<>MONTH($C2)),EOMONTH($B2,0)-$B2,"")

r = b,a!= b

=IF(AND(AND(MONTH(L$1)=MONTH($C2),YEAR(L$1)=YEAR($C2)),MONTH($B2)<>MONTH($C2)),DAY($C2),"")

r!= a!= b

=IF(AND(AND(MONTH(L$1)<>MONTH($C2),MONTH($B2)<>MONTH($C2),MONTH(L$1)<>MONTH($B2)),AND(L$1>$B2,L$1<$C2)),DAY(EOMONTH(L$1,0)),"")

+ ------- [以前的帖子-已存档] ------- +

指的是:“如果请假的开始日期和结束日期在同一个月,则返回请假时间的计算/7.5(= $ U4 / 7.5)”

=if(month(<startDate>)=month(<endDate>), $U4/7.5, <yourOriginalFormula>)