PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2011/11/25 19:45:34
Name 체실비치
Subject 행정병인데.. 경계근무명령 엑셀로 짜는것좀 도와주세요...흑흑
아.. 지금행정병을하고있는 일병입니다..
흑흑 다름이 아니라.. 경계근무명령을 짜는데
보급관님이 너무 근무를... 막짜십니다 그래서
비번인 사람은 맨날 비번이고... 근무나가는사람만
계속 나가고 이럴때가 있습니다..
그래서 제가... 보급관님한테 뭐라고할수는없고
프로그램을 만들어보는건 어떻겠냐고.. 돌려말했는데
정말 한번 만들어보랍니다..
제가 기계공학과라서 씨언어를 교양으로 듣긴했어서...
근자감을 갖고.. 시작했습니다...

음 저희 부대 근무는 위병소를 나가는데
1시간 30분씩 00시 부터 다음날 00시 까지 총 16타임 그리고
사수 부사수 이렇게 32명이 들어가고 40명 정도가 돌아가며 근무를 섭니다.
그래서 생각한게 짬 순서대로 1번부터 40번까지 쭉 번호를 정해놓고
1번부터 휴가인지 아닌지를 검사를 하며 32명을 뽑습니다
그리고 32명 중에서 숫자가 작은 사람 16명을 사수 나머지를 부사수로
차례대로 적당한 곳에 표시합니다
이 때 입력값을 받을 내용이 어제 마지막 번호가 누구였냐
(1번부터 32번까지 뽑혔으면 다음 근무자는 33번부터 시작해야되기때문에)
그리고 휴가자가 누가 있냐
이거를 씨언어로는 짤 수 있을것 같긴한데...

으흑..아무리 생각해봐도 엑셀이 더 편할 것 같아서...
엑셀 공부를 시작했습니다
그리고 사지방에서 이것저것 찾아보고 있는데 마침 뭔가를
발견을 하였습니다... 바로 여기 이 지식인에있는 내용인데요

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=72368795&qb=6rK96rOE6re866y0IOyXkeyFgA==&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=gV9VbF5Y7udsscbfjd8ssc--162688&sid=Ts9qcPZcz04AAFJRHCI

이거를... 못알아먹겠습니다..
저기 코드 나와있는게 엑셀 어디서 실행을 시켜야
저런 프로그램이 나오는지도 모르겠습니다...
엑셀을 배운적이 없어서 책으로 열심히 보고 있기는 한데...
저런 내용은 나오지를 않네요흑흑..

어떻게 해야 만들 수 있을지 방향만이라도 잡아주실수 있나요...?
참고 되시라고 지식인에 올라온 코드 같이 올립니다 흑흑흑

안녕하세요~



다음의 매크로를 사용해 보세요~



'----------------------------------------------

Const 사수 As Long = 8
Const 불침번  As Long = 5


Sub Test()  ' 실행 프로시저 -------------------------------
Dim rng As Range, C As Range, cntRow As Long
Dim wsTmp As Worksheet, WS As Worksheet
Dim strEx As String, n As Long, i As Long, j As Long, cnt As Long, arrVar As Variant
Dim dat(), datL(), datA, datEx(), tmp(1 To 3)
Set WS = Sheets("Main")
Set wsTmp = Sheets("Temp")
With WS
    cntRow = .Range("E30").End(xlUp).Row
    If cntRow > 1 Then
        Set rng = .Range("E2", .[E30].End(xlUp))
        ReDim datEx(1 To cntRow - 1)
        For n = 1 To cntRow - 1
            datEx(n) = rng(n, 1).Value
        Next n
    End If
End With
With wsTmp
'    If CDate(.[A1].Value) = DateValue(Now()) Then
'        MsgBox "이미 오늘은 근무배정을 마쳤습니다!", 16, "배정 불가"
'        Exit Sub
'    End If
    .[A1].Value = Format(Now, "Short Date")
    datA = .Range("A3:C" & .[B50].End(xlUp).Row).Value
    For i = 1 To UBound(datA, 1) - 1
        For j = 1 + i To UBound(datA, 1)
            If datA(i, 3) > datA(j, 3) Then
                tmp(1) = datA(i, 1)
                tmp(2) = datA(i, 2)
                tmp(3) = datA(i, 3)
                datA(i, 1) = datA(j, 1)
                datA(i, 2) = datA(j, 2)
                datA(i, 3) = datA(j, 3)
                datA(j, 1) = tmp(1)
                datA(j, 2) = tmp(2)
                datA(j, 3) = tmp(3)
            End If
        Next j
    Next i
    '.Cells(3, 4).Resize(UBound(datA, 1), 2).Value = datA
    n = 0
    cnt = 사수 * 2 + 불침번
    Call Random(arrVar, cnt)
    ReDim dat(1 To UBound(datA, 1))
    For i = 1 To UBound(datA, 1)
        If cntRow > 1 Then
            For j = 1 To cntRow - 1
                If datA(i, 1) = datEx(j) Then
                    datA(i, 2) = 0
                    GoTo Skip
                End If
            Next j
        End If
        n = n + 1
        dat(n) = datA(i, 2)
        If n <= cnt Then
            datA(i, 3) = datA(i, 3) + 1
        Else
            datA(i, 3) = 0
        End If
Skip:
    Next i
    With .Cells(3, 1).Resize(UBound(datA, 1), 3)
        .Value = datA
        .Sort key1:=.Cells(3, 1), order1:=xlAscending
    End With
End With
With Sheets("Main")
    n = 0
    For i = 1 To 사수
        .Cells(1 + i, 2) = dat(arrVar(i - 1))
        .Cells(1 + i, 3) = dat(arrVar(사수 + i - 1))
    Next i
    For i = 1 To 불침번
        .Cells(10 + i, 2) = dat(arrVar(사수 * 2 + i - 1))
    Next i
End With
End Sub


Sub Random(ByRef arrVar As Variant, ni As Long) ' 랜덤 발생 프로시저
Dim MyValue(), Counter As Long, Cont As Long, Duplicates As Boolean, Dummy As Long
Dim str As String
ReDim MyValue(1 To ni)
For Counter = 1 To ni
    Duplicates = 1
    Do Until Duplicates = 0
        MyValue(Counter) = Int((ni * Rnd) + 1)
        Duplicates = 0
        For Cont = 1 To Counter - 1
            If MyValue(Cont) = MyValue(Counter) Then Duplicates = 1
        Next
    Loop
Next
For Dummy = 1 To ni
    str = str & "," & MyValue(Dummy)
Next
str = Right(str, Len(str) - 1)
arrVar = Split(str, ",")
End Sub

'----------------------------------------------



Main 시트 (열외자는 직접 입력)







Temp 시트








통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
11/11/25 19:51
수정 아이콘
엑셀에 내장된 VBA(Visual Basic for Applications)로 하시면 됩니다.
아래쪽 시트목록에서 우클릭->코드보기로 하시면 쉽게 들어가실수 있습니다.
관련서적도 많이 있구요.
그런데 제가 알기로는 국방부에서 프로그램 만들어서 배포하지 않나요?
행정병출신은 아니지만 행정병한테 그런게 원래 있다라는 소리를 들은적이 있는거 같은데요.
그런데 보급관님이 A(?)급이시네요. 대게 그런건 행정병이 짜는데.. FM대로 하시는군요.
Don't_forget_the_day
11/11/25 19:58
수정 아이콘
저희는 단독중대라서 그냥 투고 정도가 알아서 다 짰었드랬죠.
증조 할아버지께오서 이미 근무 프로그램을 엑셀로 만들고 나가셔서..-_-;;
중간에 행정관이 짠다고 짜는데 근무 정말 못짜더라구요.
비번 있는데 야간 초말을 주냐 어떻게 크크크
11/11/25 20:11
수정 아이콘
힘드시겠네요. 사실 근무편성의 '비리'가 행정병의 힘 중에 하나인데.

직접 짜 본 사람 입장에서, 근무를 엑셀로 짜는 건 손이 더 갑니다. 전입과 전출, 휴가 및 외박등의 요소들 때문에 변수가 너무 많거든요.
그냥 손으로 짜는게 편합니다.
11/11/25 20:26
수정 아이콘
저도 근무를 짜본적 있는 행정병으로써, 직접 짜는게 가장 좋습니다.

윗분의 말대로 변수가 너무 많습니다. 실제로 손으로 직접 짜고 나서 게시를 해도 갑작스런 근무변경으로 빨간볼펜으로 줄을 긋고 이름 변경해서 써놓고 도장찍고..

이런게 많을땐 하루에 2번 3번 뽑아서 다시 게시한적도 많을정도니까요.


프로그램으로 뽑는게 나쁜건 아니지만 그냥 손으로 직접 짜는게 좋습니다.


저도 한글로 짰는데, 양식이 있다보니 그리 어렵진 않습니다. 단지 근무변경이나 실수같은거, 그리고 선임의 압박(이게 가장 스트레스죠 병장 잡고 짜면 모르겠다만..)때문에..
성시경
11/11/25 21:15
수정 아이콘
부대 경계작전명령서는 근무자공정표로 근무자목록 쫙 한달치 띄워서 직접 보면서 짜는게
제일 공정하게 가는 것 같아요... 부대에 있을때 계속 짜봤는데 부대 특성상 불특정하게 근무가 제한되는 인원들도
갑자기 발생할 수도 있고해서 저는 프로그램보단 직접 짜는걸 선호했습니다
명령서 양식이야 부대마다 다 있을테고요 빈칸에 편성해서 인원만 채우면 끝이죠
나는 나
11/11/25 22:56
수정 아이콘
경계파견 자주나갔던 부대에서 당직을 꽤 많이 들어가면서 근무도 짜봤는데..
사실 손으로 짜는게 가장 편합니다.
양식만 만들어두고 손으로 짜는게 정말 정말 편합니다.
근무라는게 원래 변수가 너무 많고 실시간으로 변동사항이 생기기때문에 그걸 다 프로그램으로 어찌할 수가 없습니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
120288 패딩조끼가... 별로인가요?? [17] worcs2406 11/11/26 2406
120285 선유도 공원 낮시간 대에도 괜찮을까요?? [2] 승연vs보영1503 11/11/26 1503
120284 고교 야구 명문 8개구단을 꼽는다면 [11] PokerFace14052 11/11/26 14052
120283 이어폰 추천 좀 해주세요~ [1] Go_TheMarine1787 11/11/26 1787
120282 LOL 가입질문입니다. [6] 이르1814 11/11/26 1814
120281 펜션 놀러갔을 때 먹을거리? [9] 영혼2154 11/11/26 2154
120280 자동차 렌트 질문입니다~ [2] win1548 11/11/26 1548
120279 노래추천 부탁드립니다! [7] 럼블1661 11/11/26 1661
120278 이소룡 vs 효도르 [22] 임개똥3234 11/11/26 3234
120277 토익 시험 수험증 질문입니다 [5] 보라도리2219 11/11/25 2219
120276 스마트폰으로 노래 어떻게 듣나요? [8] 나야NaYa2256 11/11/25 2256
120275 도형추리 테스트 풀어주세요 [3] 디스켓3181 11/11/25 3181
120274 웨이트 하시는 분들 웨이트 멈추면 근육 빠지는게 느껴지십니까? [9] 찰박찰박찰박2697 11/11/25 2697
120272 Windows 7을 처음으로 설치했습니다. 어디서부터 뭘 해야 할까요 [4] ComeAgain1579 11/11/25 1579
120271 이런 양면테이프가 있을까요? [3] 동화2146 11/11/25 2146
120269 KFC VS 파파이스 치킨 어디가 맛있습니까? [14] 못된고양이3947 11/11/25 3947
120268 춤을 배우고 싶으면 어떻게 해야되나요? [1] 절제의미학1728 11/11/25 1728
120267 패미컴으로 했던 게임을 찾고 있습니다. MelonPang1651 11/11/25 1651
120266 lol 오리아나 질문입니다. [3] 고구마줄기무��1738 11/11/25 1738
120265 행정병인데.. 경계근무명령 엑셀로 짜는것좀 도와주세요...흑흑 [11] 체실비치12994 11/11/25 12994
120264 시계 종소리로 알려져 있는 이 곡은 따로 원곡이 있나요? [1] jjohny=Kuma1581 11/11/25 1581
120263 핸드폰을 구매하려고 하는데 조언좀 부탁드립니다. [2] polt1877 11/11/25 1877
120262 lol 챔피언 관련 질문들 [12] Dr.faust2087 11/11/25 2087
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로