VBA

[VBA] 근무계획서 만들기

일등미노왕국 2022. 12. 9. 22:01

두달간의 당직 근무계획서를 작성하는 구문.

 

조건1. 직원그룹은 모두 한번씩은 중복없이 근무를 서야한다.

조건2. 당직선 직원은 다음날 근무에서 제외한다.

 

중복없이 고유값을 가져오거나 랜덤하게 숫자를 섞을 때는 Collection 이 참 편하다.

더보기
Option Explicit

Sub 근무계획서()
    
    Dim Col As Collection
    Dim Vall:  Vall = [g5:g9]
    Dim n&, rowC&, Cnt&, i&, color&: color = 1
    Dim rngX As Range: Set rngX = [b5]
    
    Do
haja:
        Set Col = New Collection                        '= 컬렉션 선언
        
            Do Until Col.Count >= 5                     '= 중복되지 않은 컬렉션 아이템이 5개 될때까지
                                                        '= 무한 반복
                On Error Resume Next
                
                    n = WorksheetFunction.RandBetween(1, 5)  '= 1부터 5까지 랜덤한 수를 가지고 옴
                    Col.Add Vall(n, 1), CStr(n)              '= 중복되지 않는다면 차례대로 컬렉션에 추가
                    If rngX(0, 1) = Col(1) Then GoTo haja    '= 당직 근무후 바로 다음날 당직을 피하기 위한 구문
                    
                On Error GoTo 0
            
            Loop                                             '= 중복되기 않은 5개의 컬렉션 아이템이 추출될때 까지 반복
      
        For i = 1 To Col.Count                               '= 컬렉션 아이템을 셀에 출력하기 위한 구문
                                                             '= 컬렉션은 배열로 한번로 가져오는 구문이 없어서 순차적으로 가져와야 한다.
            rowC = rowC + 1                                  '= 전체 날짜 카운팅
            If rowC = 63 Then Exit Do                        '= 63일 이면 / 각 월이 31일씩 있으니 63일이라는 뜻은 2달이 넘어가기에 종료
            If rowC = 32 Then Set rngX = [d5]                '= 32일 이면 / 한달이 넘어갔을 때 출력자리를 옮기기 위한 구문
                
            rngX = Col(i)                                    '= 해당셀에 컬렉션을 순차적으로 출력
            rngX.Interior.ColorIndex = 15 - (color * (1))    '= 셀의 색상의 순차적으로 표현하기 위한 구문
            Set rngX = rngX.Offset(1)                        '= 셀의 위치를 다음 칸으로 이동
            
        Next i
        color = color * (-1)
    Loop

        [b4].CurrentRegion.Borders.LineStyle = 1

End Sub



 

근무계획서.xlsm
0.02MB