2014. 12. 9. 16:23

프로젝트 투입 인력 관리 매크로2

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

인력투입관리.xlsm


약간 개선하였습니다. 

----------------------------------------

프로젝트를 관리하다보면 투입인력 현황을 체크해야 하는 상황이 발생합니다. 

이걸 매일 관리하기도 힘들고 그렇다고 한달에 한번만하기도 그렇고...

그래서 만들었습니다. 인력관리매크로


첫페이지에 투입인력 정보를 입력합니다. 

두번째 페이지에 해당 인력의 투입내역이 나타나는 구조입니다. 


먼저 인력 정보를 입력하는 화면입니다 

이름 소속사 업무 투입일과 철수일 등급을 입력합니다.

그리고 전체처리 버튼을 클릭합니다. 



그러면 다음페이지에 아래와 같은 모양이 나타납니다. 

먼저 회사 업무 등 의 타이틀과 날짜는 입력해 두어야 합니다. 

7번째 행은 현재까지 인력별 투입일수입니다. 

세번째 열은 현재 투입되어 있는 인력의 수 입니다. 

철수일은 오늘을 기준으로 철수한 인력에만 표시됩니다. 

오늘 날짜에 노란색 채우기가 된 부분은 자동서식을 적용했습니다. 

셀값 = today()를 사용하였습니다. 

일일 현황을 보려면 '일일현황'버튼을 만드록 dayStat()을 지정하면됩니다. 




여기서부터 매크로 소스입니다. 

간단한 소스입니다. 그래도 편리하게 사용하실 수 있습니다. 


Sub setHPlanAll()

       '두번째시트에 명칭을 부여했음

    Sheets("일자별현황").Select

    Range(Cells(1, 4), Cells(6, 120)).ClearContents

    Range(Cells(8, 4), Cells(365, 120)).ClearContents


    '작업기준일

    If Cells(2, 1) = "" Then

        Cells(2, 1) = Date

    End If

    chkDate = Cells(2, 1)

    

    Sheets("투입인력목록").Select

        

    '4번째부터 값을 부여함.

    i = 4

    Do While i < 100 '100명이 넘지 않는 인력이 투입됨

        

        '해지 = 해지가 나오면 이하 모두 해지

        hejiMan = Cells(i, 1)

        If hejiMan = "해지" Then

            Exit Do

        End If

        

        '이름'

        Sheets("일자별현황").Cells(3, i) = Cells(i, 2)

        

        '회사'

        Sheets("일자별현황").Cells(1, i) = Cells(i, 3)

        

        '업무'

        Sheets("일자별현황").Cells(2, i) = Cells(i, 4)

        

        '투입일

        Sheets("일자별현황").Cells(5, i) = Cells(i, 5)

        

        '등급'

        Sheets("일자별현황").Cells(4, i) = Cells(i, 9)

        

        '철수일

        outDate = Cells(i, 6)

        If outDate <= Date Then

            Sheets(2).Cells(6, i) = Cells(i, 6)

        Else

        End If

        

        '다 했으면 종료

        If Cells(i, 2) = "" Then

            Exit Do

        End If

        

        '투입일'

        inDate = Cells(i, 5)

        '철수일'

                

        '2번 시트로 이동함

        Sheets("일자별현황").Select

        dd = 8

        Do While dd < 300

            sdDate = Cells(dd, 1)

            If inDate <= sdDate Then

                Cells(dd, i) = 1

            End If

            If inDate = outDate Then

                Exit Do

            End If

            If sdDate > outDate Then

                Exit Do

            End If

            

            If sdDate = chkDate Then

                Exit Do

            End If

            

            dd = dd + 1

        Loop

        

        '1번 시트로 이동함

        Sheets("투입인력목록").Select

        

        i = i + 1

        

    Loop

    

    '2번 시트로 이동함

    Sheets("일자별현황").Select

    

End Sub

Sub dayStat()
    '일일현황을 작성한다.
    
    '작업기준일 잡기
    chkDate = Cells(2, 1)
    '입력이 안되어 있으면 오늘로 채운다.
    If chkDate = "" Then
        MsgBox ("작업일이 지정되지 않았습니다. 오늘을 기준으로 작업합니다.")
        Cells(2, 1) = Date
    ElseIf chkDate = Date Then
    Else
        anNum = MsgBox("기준일은 " & chkDate & "입니다. \n 오늘을 기준으로 작성할까요?", vbYesNo, "날짜확인")
    End If
    
    If anNum = 6 Then
        Cells(2, 1) = Date
        chkDate = Date
    End If
    
    Range(Cells(181, 1), Cells(210, 10)).ClearContents
    
    '처음시작하는 위치 찾기
    i = 8
    Do While i < 365 '1년을 생각함
    
        dayVal = Cells(i, 1)
        '돌다가 날짜를 찾으면 찾기를 중단한다.
        If dayVal = chkDate Then
            startRow = i
            Exit Do
        End If
        i = i + 1
        
    Loop
        
    '휴일은 날짜목록에 없으니 삭제해야 함.
    If startRow = "" Then
        MsgBox ("휴일을 선택하셨습니다. 날짜를 변경해주세요")
        Exit Sub
    End If
    
    '회사 그룹핑하기
    Range("D1:DZ1").Select
    Selection.Copy
    
    '복사위치잡기
    Range("C181").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveSheet.Range("$C$181:$C$300").RemoveDuplicates Columns:=1, Header:= _
        xlNo
    Range("C181").Select

    '오늘 투입인력 구하기
    i = 4
    Do While i < 150
        chkWork = Cells(startRow, i)
        If chkWork = 1 Then
            chkCom = Cells(1, i)
            j = 181
            Do While j < 200
                If Cells(j, 3) = chkCom Then
                    Cells(j, 4) = Cells(j, 4) + 1
                End If
                j = j + 1
            Loop
                
        End If
        i = i + 1
        
    Loop
        
    
    '업무별 그룹핑하기
    Range("D2:DZ2").Select
    Selection.Copy
    
    '복사위치잡기
    Range("F181").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveSheet.Range("$F$181:$F$300").RemoveDuplicates Columns:=1, Header:= _
        xlNo
    Range("F181").Select

    '오늘 투입인력 구하기
    i = 4
    Do While i < 150
        chkWork = Cells(startRow, i)
        If chkWork = 1 Then
            chkJob = Cells(2, i)
            j = 181
            Do While j < 200
                If Cells(j, 6) = chkJob Then
                    Cells(j, 7) = Cells(j, 7) + 1
                End If
                j = j + 1
            Loop
                
        End If
        i = i + 1
        
    Loop
        
    Cells(180, 6) = "합계"
    Cells(180, 7).Activate
    ActiveCell.FormulaR1C1 = "=sum(R[1]C:R[34]C)"
    Range("C181").Select
    
    
        
End Sub


'MACRO > EXCEL-MACRO' 카테고리의 다른 글

행 삽입하기  (0) 2016.10.11
매크로 팁  (0) 2016.10.04
프로젝트 투입 인력 관리 매크로  (0) 2014.08.27
로또 번호 생성기  (0) 2014.07.25
추세분석 매크로  (0) 2013.12.27