VB(A)/당근쨈 & Chronicle

[& Chronicle] 연속근무 일수 구하기

당근쨈 2019. 2. 13. 11:14

https://cafe.naver.com/excelmaster/159887 에 올라온 질문입니다.

한달동안 연속근무 7일 이상이 되는 사람은 '7일 연속근무' 셀에 '연속근무' 라는 표시를 해야합니다.


Chronicle 님은 배열수식으로 해결했습니다.

이런 게 함수로 되는지도 몰랐네요. 함수는 알면 알 수록 신기합니다.

-  https://blog.naver.com/asaph16/221464697666


아래는 매크로로 풀어낸 과정입니다.

    1. A라는 사람부터 S라는 사람까지 크게 순환을 하고

    2. 사람별로 1일부터 30일까지 다시 순환을 하면서

    3. 근무를 하면 1씩 더하고 휴무일 땐 0으로 되돌려서

    4. 합이 7이 되면 7일간 연속근무를 한 것이므로 '연속근무' 라는 표시를 하고 다음 행으로 넘어갑니다.


For 와 Do 를 섞어서 써서

조건이 되었을 때 순환문을 빠져나가면 매크로 실행시간을 줄일 수 있습니다.


근무표 (1).xlsm


Sub Macro()
 
    Dim SingleRange As Range
    Dim sum As Integer
    Dim c As Integer
    
    For Each SingleRange In Range("C7", Cells(Rows.Count, "C").End(3))
    
        c = 3   'C열부터 AF열까지 순환을 합니다
        sum = 0
    
        Do Until c > 32 'AF열까지 순환하면 아래 행으로 내려갑니다.
        
            '근무일 때 1, 휴무일 때 0으로 계산합니다.
            '근무의 합이 7이 되면 AG행에 "연속근무"를 기록하고 다음 행으로 내려갑니다.
            Select Case Cells(SingleRange.Row, c)
                
                Case Is <> "휴"
                    sum = sum + 1
                                    
                Case "휴"
                    sum = 0
                    
            End Select
            
            c = c + 1
            
            If sum = 7 Then
                Cells(SingleRange.Row, "AG"= "연속근무"
                Exit Do
            End If
        Loop
    Next
End Sub
 
cs