본문 바로가기

Autohotkey강좌

엑셀로 업무용 달력 만들기

반응형

youtu.be/QYt76Qs6Ang

 

지난번에 잠시 올려 드린 일일업무일지에 대한 반응이 좋아서, 이번에는 업무용 달력 만드는 내용을 올려 드립니다. 

일반적으로 년말에 여기 저기서 달력이 많이 들어오지만, 내가 원하는대로 만들어 보기를 원하시는 분을 위해서 올립니다. 해당 내용을 만드는 기본적인 방법은 다음과 같습니다.

 

1. 원하는 년도를 읽고, 새로운 시트 추가하기

2. 새로 추가된 시트에 년도와 월을 표시하고 글자 크기 및 위치 , 정렬등 조정하기

3. 일요일, 월요일, .... 토요일까지 표시하고 글자 크기 및 위치 , 정렬등 조정하기

4. 해당 월의 마지막 날짜 구하기

5. 1일부터 마지막 날짜까지 해당하는 요일에 순차적으로 집어 넣기

 

말로만 쓰면 다 된거 같지 않으신가요? 아니라고요? 

차근차근 진행하면 됩니다. 

먼저 원하는 년도를 읽는 방법은 간단하죠? 년도를 현재 시트이 A1셀에 넣기로 했으니 그냥 A1셀을 읽으면 됩니다.

A1셀을 읽는 방법은 Cells(1, 1).Value 입니다. 그 값을 저장하면 되겠죠? year이라는 변수에 저장합니다.

다음으로는 시트를 추가해야 하는데 어떻게 해야 할까요?

우선 해당 월을 시트이름으로 주고 현재 시트 다음에 activesheet를 추가한 다음, activesheet의 이름을 해당 월로 저장합니다. 말로하면 좀 안 들어올 수 있는데 다음과 같습니다.

sheetname = CStr(i)

Sheets.Add After:=ActiveSheet

oname = ActiveSheet..Name

Sheets(oname).Name = sheetname

Worksheets(sheetname).Activate

 

다음으로 2단계와 3단계의 내용은 본인들이 매크로 기록하기로 만든 내용을 그대로 복사해 오면 됩니다.

다음으로 해당 월의 마지막 날짜를 구하는 것은 홀수달은 31일, 짝수달은 30일, 2월말 윤년계산을 해 주면 됩니다.

윤년 구하는 공식은 4로 나눠지지만, 100으로 나눠지지 않거나 400으로 나눠지는 년도가 윤년입니다.

엑셀 vba에서는 mod연산자를 사용하면 됩니다. 

                If ((yr Mod 400) = 0) Or (((yr Mod 4) = 0) And ((yr Mod 100) <> 0)) Then
                    last = 29
                Else
                    last = 28
                End If

다음으로는 순차적으로 날짜별로 요일을 구하면 됩니다.

요일을 구하는 방법은 weekday()를 이용하면 되는데 안에 넣어주는 내용은 dateserial(년, 월, 일)로 해 주면 됩니다.

(엑셀에서는 date(년,월,일)인 점이 다릅니다.)

따라서 그렇게 구해진 값이 column위치가 되고, row는 3행부터 진행하면 됩니다.

결국 그렇게 구해진 row, column위치에 날짜를 집어 넣어 주면 됩니다.

            c = Weekday(DateSerial(yr, i, j))
            Cells(r, c).Value = j

다음 날짜로 이동하기 위해서는 column값을 변경하면 됩니다. 하나 증가시키면 되는거죠? 

그런데 만약 column이 7보다 크면 토요일을 지나므로 다시 일요일로 가게 하려면 1로 초기화를 해야 되겠죠?

그 때  row값은 어떻게 되어야 할까요? 맞습니다. 하나 증가시켜야죠. 

            c = c + 1
            If c > 7 Then
                c = 1
                r = r + 1
            End If
            

이제 원하는 내용이 다 되었을까요?

첫째달은 제대로 되는데 다음달은 잘 안 됩니다. 왜 그럴까요? 바로 row때문에 그렇습니다. 한달이 마무리 되면

다시 row가 3행부터 진행되어야겠죠. 그래서 row = 3으로 초기화 해주고 다음달로 넘어가면 됩니다.

 

참고로 단축키를 ctrl+w를 할당해 놨습니다. 원하는 다른키로 변경 가능합니다.

 

이상의 내용대로 한 내용을 다음 첨부에서 확인하시기 바랍니다.

업무용달력.xlsm
0.03MB

반응형