직장인들은 주간업무 일지나 월간 업무 일지를 보통 관리하고 어떤 경우는 일일업무 일지를 만들기도 하는데, 해마다 누군가가 만들어서 배포하기를 기다렸다면, 올해는 직접 만들어 보세요.
우선 시나리오는 다음과 같습니다.
1. 원하는 년도를 읽어서 해당 년도의 업무일지를 만드는데
2. 월별로 개별 시트로 작성할 것입니다. 즉 시트명이 1월, 2월, ....12월이 되는 것이죠. 월은 굳이 표시 안해도 됩니다.
3. 해당 시트마다 1일부터 31일, 30일, 28일처럼 각각 다르게 마지막 날짜까지 표시하고 해당 날짜가 몇요일인지 표시하는 것입니다. 물론 토요일과 일요일은 빨간색으로 표시하는 것으로 하겠습니다.
이런 시나리오를 위해서는 먼저 고정적으로 표시되는 부분을 직접 "매크로 기록" 기능을 이용해서 만들어 보세요.
생각보다 어렵지 않습니다. 물론 실수할 수도 있지만 그런 것을 두려워 하지 말고 직접 해 보세요.
그게 되었다면 이제 로직이 들어가야죠.
우선 순서도는
1. 년도 읽어 오기
2. 시트추가하고 1월, 2월등으로 표시하기
3. 해당 월의 마지막날짜가 몇일인지 확인해서 종료일로 저장하기
4. 해당월에 맞게 1일부터 종료일까지 입력하고 몇요일인지 표시하기
5. 1일부터 종료일까지 포함해서 네모 박스로 표시해 주기
다
이런 과정을 진행하기 위해서는 대략 아래의 내용은 알고 있어야 합니다.
1. sheet명 가져오기
매크로 작업시 sheet명을 알아야 하는 경우가 간혹 있다. 이 때 사용할 수 있는 방법은 아래와 같다.
sheename = Mid(CELL("filename", A1), Find("]", CELL("filename", A1)) + 1, 255)
filename으로부터 "]"를 찾아서 그 부분 이후를 가져오면 시트명이 된다.
그 전까지는 해당 파일의 경로 및 파일이름이다.
구글링하면 금방 찾지만 기억해 놓는게 좋겠다.
2. 시트 추가하기
시트를 추가하기 위해서 어떻게 해야 하는가? 다음과 같이 아주 간단하다.
Sheets.Add After:=ActiveSheet
물론 After 대신 Before로 바꾸면 앞쪽에 생기게 된다.
3. 특정 시트를 활성화 시키기
특정 시트에서 원하는 작업을 하고 싶을 때 사용한다. 물론 시트명을 일일이 주면서 작업해도 되지만 한줄 추가하므로써 많은 타이핑을 줄일 수 있다.
Worksheets(sheetname).Activate
4. 날짜 생성하기
엑셀에서 사용할 때는 date(년,월,일)를 사용하지만 vba에서는 DateSerial(년,월,일)로 사용한다.
이 결과는 Date type이므로 형식에 맞게 사용하도록 주의가 필요하다.
5. 해당 날짜의 요일 알아내기
특정 날짜가 주어질 때 요일을 알아내려면 다음과 같다.
WeekDay(Date,option)
option에는 몇요일부터 표기할건지를 나타내는데 일반적인 경우에는 생략해도 된다.
우리는 앞서 생성한 Date type결과를 넣어서 요일을 알아낼것이다.
6. 요일을 한글이나 영문으로 표기하기
해당 날짜에 맞는 요일을 한글이나 영문으로 표기하기 위해서는 Choose문을 사용하면 된다.
Choose(항목,"결과1","결과2","...")
우리는 4~6번을 모아서 다음과 같이 사용할 것이다.
sday = Choose(Weekday(DateSerial(yr, i, j)), "일", "월", "화", "수", "목", "금", "토")
여기서 i는 월(month)을 나타내는데 사용되는 변수이고 j는 일(day)을 나타내는 변수이다.
7. Select case 문
여러가지 경우의 수에 따른 case문을 vba에서는 Select case문으로 사용한다.
Select case 변수
case 경우1
조치1
case 경우2,경우3
조치2
case else
조치3
End Select
우리는 다음과 같이 사용할 것이다.
Select Case i
Case 1, 3, 5, 7, 8, 10, 12
last = 31
Case 4, 6, 9, 11
last = 30
Case Else
last = 28
End Select
8. for Next 문
for next문은 반복문으로 사용된다.
for 변수=시작값 to 종료값
action
next
우리는 다음과 같이 사용한다.
For j = 1 To last
Worksheets(sheetname).Cells(j + r, c - 1) = j
sday = Choose(Weekday(DateSerial(yr, i, j)), "일", "월", "화", "수", "목", "금", "토")
Worksheets(sheetname).Cells(j + r, c) = sday
Next
9. 범위 지정
일정 범위를 잡고 해당 영역에 대해 속성이나 action을 한꺼번에 적용할 때 사용할 때가 있다.
rng = "A1:E" & last
ActiveCell.Range(rng).Select
예를 들어 시트마다 마지막 값이 달라지는 우리의 예제에서 영역을 잡기 위해서는 rng라는 변수에 A1부터 E31일까지 잡을지 E30까지 잡을지등을 결정하도록 사용했다.
rng값이 결정되면 이후에는 바로 해당 영역에 대해서 Select해 주면 된다.
이상의 기본적인 기능을 익혔다면 통합 버전은
첨부했습니다.
앞으로 필요한 내용은 직접 만들어 보시기 바랍니다.
코로나로 어수선하지만 오늘도 행복한 하루 되십시요.
'Autohotkey강좌' 카테고리의 다른 글
Autohotkey #25 , word파일에서 excel로 자료 이동(회원가입신청서 내용을 회원명부 엑셀로 옮기기) (4) | 2021.03.28 |
---|---|
Autohotkey #24, Autohotkey파일을 실행파일로 만들기 (0) | 2020.12.14 |
Autohotkey22. SCITE4Autohotkey Editor Debugging 기본에디터 디버깅 (0) | 2020.08.25 |
Autohotkey 21, 윈도우 예약 자동 종료 프로그램(AutoPowerDown) (1) | 2020.08.22 |
Autohotkey 20. 교사들 학기말 필수 작업인 평어 입력 어플 (0) | 2020.08.09 |