Skip to content

공군 업무에서 요소와 시간이 있을 때 사람 수에 맞게 적절히 분배해서 시간표를 짜주는 프로그램 - 한셀 & vbs

Notifications You must be signed in to change notification settings

Aduryz/timetableWizard

Repository files navigation

Description

하루의 업무를 상번 인원에게 시간을 공평하게 분배하여 시간표를 제작하는 데 도움을 주는 프로그램이다.
업무들의 요소와 시간을 입력하면 모두에게 시간이 공평하게 돌아가도록 업무를 분배해주며 점심시간 전 오전에 3:30 업무 분배까지 수행한다.
공군에 맞게 제작되었기에 엑셀이 아닌 한셀 기반으로 제작되었으며 VBA가 아닌 VBS로 제작되어 엑셀과는 호환이 안 될 수 있다.

보안으로 인해 timetableWizard.xlsm의 요소와 시간은 실제와 다른 예시이며 내용은 비워두었다.
timetableWizard.vbs가 최종 소스코드이다.

image


Algorithm

예방정비 복붙

  • 예방정비 복붙 - ctrl+c -> ctrl+alt+v -> 값 및 숫자 서식 붙여넣기

배열에 예방정비 집어 넣기

3:30 찾기

  • 3:30이 있으면 그걸 불러오기 ​
  • 3:30이 없으면 합이 3:30 되는 애들 불러오기

main

큰 거부터 차례로 넣기 - 단순

  • alpha, bravo, charlie, charlie, bravo, alpha, alpha ... 순으로 큰 거부터 차례로 넣기
  • 시간 합을 다 더해서 "최댓값에서부터의 차이"(차이)를 보기

\timetableWizard beta.vbs

시간 합이 제일 작은 사람부터 하나씩 넣기

  • 각 사람별로 시간 합을 더해서 시간 합이 제일 작은 사람 찾기
  • 그 사람부터 하나씩 큰 값을 넣기

\timetableWizard.vbs

기타

  • 설명이랑 주석 달 필요가 있음
  • 그리고 vba 함수들 정리할 필요도 있음

VBA (VBS)

기본 구조

Sub helloWorld()
    'Sheet1의 "A1"에 "hello world"를 출력 하시오.
    Sheet1.Range("A1").Value = "hello world"
End Sub

주석

'로 주석 사용

셀 선택 & 값 입력, 셀 값 로드

Sub 셀에내용추가하기()
	row = 2
    col = 3 'A열 = 1, B열 = 2, ...

    '셀 선택하기
	Range("C" & 2).Select
	Range("C2").Select
    Cells(row, col).Select

    '셀에 내용 추가하기
    Selection.Value = "2행 3열"

	'값 입력
	Range("C2").Value = "hello Wolrd"
	Cells(row, col).Value = "hello Wolrd"
	Cells(row, col).Value = Empty '빈칸

	'셀 값 로드
	 row = Range("C2").Value
End Sub

글자 연결

Sub 글자연결하기()
	무엇 = Range("A1").Value
    MsgBox ("나는" & 무엇 & "(이)다.")
End Sub

변수

a = 1

  • VBS는 VBA와 다르게 자료형 선언하면 안 됨

반복

Sub For문배우기()
    For 반복범위 = 1 To 10 '* 1~10, 1~9 X
        Range("F" & 반복범위).Value = "반복" & 반복범위
    Next

	For i = 1 To 10 Step 2
    	arrPrintLoc(2, (i+1)/2) = i
    Next
End Sub

조건

Sub if문배우기()
	사원명 = Range("b2").Value
	부서 = Range("c2").Value

	If 사원명 = "김경록" Then
    	MsgBox ("해당 사원명은 김경록이 맞습니다.")
	Else
    	MsgBox ("해당 사원명은 김경록이 아닙니다.")
	End If
End Sub

상수 define

Public Const element = 0

함수 선언, 호출, 값 반환

'선언
Function delCol(arr, col) 'delete column
	'* arr에서 정해진 column의 row값들을 제거   
	arr(element,col) = Empty
	arr(timeVal,col) = 0
End Function

Function countfn(arr)
	'* arr에 남아있는 값의 개수
    countfn = 0 '값을 반환하려면 함수 이름과 변수명이 같아야 함 
    For i = rowRanInit To rowRanFin
    	If arr(timeVal, i) <> 0 Then
    		countfn = countfn + 1
    	End If
    Next
End Function

'호출
Call delCol(arr, am1)

'값 반환
count = countfn(arr)

메세지창

Sub TimetableWizard()
	MsgBox ("Error" & vbCrLf & "사람 수는 1, 2, 3, 4만 가능합니다.") 'vba에서 \n은 vbCrLf로 코드처럼 사용해야함
End Sub

배열

Dim arr(1 To 4, 2 To 10)

arr(1, 2) = Range("A1").Value

글자색

Cells(j , i).Font.Color = RGB(0, 0, 0)

연산자

image

  • 셀주소
Sub 선택셀주소가져오기()
	Range("b2").Select
	Range("a10").Value = Selection.Address
End Sub

3:30 -> 210분

Range("a1").Value = (Hour(Range("a2").Value)*60)+Minute(Range("a2").Value)

매크로 실행 버튼

입력 - 양식 개체 - 명령 단추 왜인지 모르겠는데 버튼을 생성하면 vbs를 수정할 수 없는 버그가 있는 거 같음

About

공군 업무에서 요소와 시간이 있을 때 사람 수에 맞게 적절히 분배해서 시간표를 짜주는 프로그램 - 한셀 & vbs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published