VB(A)

시간대별 근무인원 구하기

당근쨈 2015. 2. 10. 11:09

일별, 직원별, 시간대별 근무현황을 구하는 매크로.

배열을 써 본 처음의 매크로다.

약간 이해가 가는지도.

월간 시트에서 A1 셀을 클릭하면 된다.


Option Explicit


Sub qWork()


    Dim cntDay As Integer   '일수

    Dim cntTime As Integer  '하루업무시간

    Dim cntWorker As Integer    '직원숫자

    Dim var() As Integer    '일자별 근무인원 넣을 배열

    Dim tmWork As Range     '월별 작업시간 10시

    Dim tmOn As Range       '직원별 출근시간

    Dim i As Integer, j As Integer, k As Integer

    

    '작업 속도 높이기

    Application.ScreenUpdating = False

    Application.Calculation = xlCalculationManual

    Application.EnableEvents = False

    

    Set tmOn = Range("B3")      '직원별 출근시간

    Set tmWork = Cells(Rows.Count, "A").End(xlUp).End(xlUp).Offset(1, 0)     '작업시작셀

    

    '한달 일수

    With tmWork.Offset(-1, 1)

        cntDay = Range(.Cells, .End(xlToRight)).Count

    End With

    

    '하루 작업시간

    With tmWork

        cntTime = Range(.Cells, .End(xlDown)).Count

    End With

    

    '직원 숫자

    With tmOn.Offset(-1, 0)

        cntWorker = Range(.Cells, .End(xlToRight)).Count / 5

    End With

    

    '기존 자료 삭제

    tmWork.Offset(, 1).Resize(cntTime, cntDay).ClearContents

        

    '배열 재설정

    ReDim var(1 To cntTime, 1 To cntDay)

    

    '일자별, 시간대별 근무인원 구하기

    For i = 1 To cntWorker

        For j = 1 To cntTime

            For k = 1 To cntDay

            With tmWork

                If .Offset(j - 1, 0) >= tmOn.Offset(k - 1, (i - 1) * 5) And _

                   .Offset(j - 1, 0) <= tmOn.Offset(k - 1, (i - 1) * 5 + 1) Then

                    var(j, k) = .Offset(j - 1, k) + 1

                    .Offset(j - 1, k) = var(j, k)

                End If

            End With

            Next k

         Next j

    Next i

    

    '마무리

    Application.ScreenUpdating = True

    Application.Calculation = xlCalculationAutomatic

    Application.EnableEvents = True

    tmWork.Select

End Sub



한달 시간대별근무표.xls