논리/엑셀 프로그래밍

구간 많은 연장근무 시간 계산 (평일/휴일, 실근/연장, 중식/석식)

섬그늘 2008. 11. 14. 13:33

 

 

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

1

날짜

요일

출근

퇴근

실근

연장

 

시작

평실

휴실

평연

휴연

 

2008-01-01

신정

2

05월 02일

9:00

10:00

1

0

 

0:00

12:30

1

1

0

0

 

2008-02-06

3

05월 03일

12:30

21:00

4

4

 

13:30

17:30

1

1

0

0

 

2008-02-07

4

05월 04일

9:00

23:00

7.5

7

 

18:00

22:00

1

0

0

1.3

 

2008-02-08

5

05월 05일

9:00

23:00

7.5

7

 

22:00

0:00

0

0

1.3

1.7

 

2008-03-01

삼일절

6

05월 06일

9:00

23:00

11.5

1.33

 

0:00

9:00

0

0

1.3

1.7

 

2008-05-05

어린이날

7

05월 07일

7:00

20:00

11.5

0

 

 

 

 

 

 

 

 

2008-05-12

석가탄신일

8

05월 08일

8:00

1:00

12.5

4

 

 

a

 

b

 

fr

to

2008-06-06

현충일

9

05월 09일

8:00

1:00

12.5

4

 

xy

 

 

 

 

a

a

2008-08-15

광복절

10

05월 10일

8:00

1:00

8.5

10.3

 

x

 

y

 

 

y

a

2008-09-13

추석

11

05월 11일

8:00

1:00

8.5

10.3

 

x

 

 

 

y

b

a

2008-09-14

추석

12

05월 12일

8:00

1:00

8.5

10.3

 

 

 

xy

 

 

y

x

2008-09-15

추석

13

05월 13일

8:00

1:00

12.5

4

 

 

 

x

 

y

b

x

2008-10-03

개천절

14

05월 14일

8:00

1:00

12.5

4

 

 

 

 

 

xy

b

b

2008-12-25

기독탄신일

 

B2 =TEXT(A2,"aaa")
E2 =SUMPRODUCT((N($I$2:$I$6<$D2)*$I$2:$I$6+($I$2:$I$6>=$D2)*($H$2:$H$6<$D2)*$D2+($I$2:$I$6>=$D2)*($H$2:$H$6>=$D2)*$H$2:$H$6-(N($H$2:$H$6>$C2)*$H$2:$H$6+($H$2:$H$6<=$C2)*($I$2:$I$6>$C2)*$C2+($H$2:$H$6<=$C2)*($I$2:$I$6<=$C2)*$I$2:$I$6))*24*((COUNTIF($O$1:$O$14,$A2)=0)*(WEEKDAY($A2,2)<6)*J$2:J$6+((COUNTIF($O$1:$O$14,$A2)>0)+(WEEKDAY($A2,2)>5))*K$2:K$6))
F2 =SUMPRODUCT((N($I$2:$I$6<$D2)*$I$2:$I$6+($I$2:$I$6>=$D2)*($H$2:$H$6<$D2)*$D2+($I$2:$I$6>=$D2)*($H$2:$H$6>=$D2)*$H$2:$H$6-(N($H$2:$H$6>$C2)*$H$2:$H$6+($H$2:$H$6<=$C2)*($I$2:$I$6>$C2)*$C2+($H$2:$H$6<=$C2)*($I$2:$I$6<=$C2)*$I$2:$I$6))*24*((COUNTIF($O$1:$O$14,$A2)=0)*(WEEKDAY($A2,2)<6)*L$2:L$6+((COUNTIF($O$1:$O$14,$A2)>0)+(WEEKDAY($A2,2)>5))*M$2:M$6))
M4 =2/1.5
M5 =2.5/1.5

 

먼저 H2:M6에 시간 구간별 수치를, O열과 같이 공휴일 목록을  만들어 둡니다. A열, O열은 날짜 서식(2008년 5월6일은 8-5-6)으로 입력합니다. 자정(24:00)을 넘는 시간은 25:00, 34:00 식으로 입력합니다. (그러지 않고 01:00, 09:00 식으로 퇴근시간을 입력해도 수식이 유효하도록 하려면 위 양식 외 보조열을 쓰면 되지만 생략함) E2:F2 잡아 아래로 드래그 다운하면 표가 완성됩니다.

 

E2 수식의 구조는 (끝시간(초록색)-시작시간(파랑색))*24*(적용열) 이며 F2도 마찬가지입니다. H8:N14의 표는 구간의 시간을 출퇴근 시간과 비교, 끝시간/시작시간을 무엇으로 지정해야 하는지 로직을 시각화한 것으로 프로그래밍에 관심 있을 때 참고용입니다 (실전에선 없어도 무방함). 위 표와 수식은 마우스로 드래그 복사가 되는 바 엑셀시트에 붙여 넣고 (I5, H6은 24:00, I6은 34:00로 입력해 주어야 함) 찬찬히 뜯어보세요.