아.. 지금행정병을하고있는 일병입니다..
흑흑 다름이 아니라.. 경계근무명령을 짜는데
보급관님이 너무 근무를... 막짜십니다 그래서
비번인 사람은 맨날 비번이고... 근무나가는사람만
계속 나가고 이럴때가 있습니다..
그래서 제가... 보급관님한테 뭐라고할수는없고
프로그램을 만들어보는건 어떻겠냐고.. 돌려말했는데
정말 한번 만들어보랍니다..
제가 기계공학과라서 씨언어를 교양으로 듣긴했어서...
근자감을 갖고.. 시작했습니다...
음 저희 부대 근무는 위병소를 나가는데
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 시트