[ 들어가며 ]
엑셀을 사용하여 매일 반복되는 업무를 처리하는 경우가 많습니다.
특정 양식의 내용을 매일 반복해야 하는 과정에서
매일매일 시트를 생성하고
내용을 작성하는 업무를 할 때
내용을 작성하는 것을 자동화하는 것은
어려울 수 있으나,
파일을 열자마자 전에 작성했던 시트를 참고해서
새로운 시트가 만들어지게 하는 것은
쉽게 할 수 있습니다.
[ 처리과정 ]
- 오늘 날짜를 변수에 저장합니다.
- 오늘 날짜의 시트가 이미 존재하는 지 확인합니다.
- 하루에도 여러번 파일을 열 수 있으므로 동일한 이름의 시트가 있는지 확인을 합니다.
- 동일한 이름의 시트가 있다면 시트를 생성하지 않고, 그렇지 않으면 시트를 생성합니다.
- 오늘 날짜의 시트가 존재하지 않는다면, 마지막 시트를 복사한 후 새로운 시트를 만들고
시트 이름을 오늘 날짜로 변경합니다.
[ 준비과정 ]
이전 블로그의 내용 중 준비단계를 참고하시면 됩니다.
파일을 열 때 마다 첫 번째 시트 선택하게 하기
[ 전체코드 ]
Private Sub Workbook_Open()
Dim today As String
Dim sheetExists As Boolean
Dim ws As Worksheet
today = Format(Date, "yyyy-mm-dd")
sheetExists = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = today Then
sheetExists = True
Exit For
End If
Next ws
If Not sheetExists Then
Dim lastSheet As Worksheet
Dim newSheet As Worksheet
Set lastSheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
lastSheet.Copy After:=lastSheet
Set newSheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
newSheet.Name = today
End If
End Sub
[ 코드설명 ]
today = Format(Date, "yyyy-mm-dd")
먼저 Date 함수
를 사용해 오늘 날짜를 불러오고Format 함수
를 사용해서 표시할 형식을 지정합니다.
위 코드로 today
변수에는 오늘 날짜가 지정한 형식대로 저장이 됩니다.
시트의 이름을 지정하실 때 주의할 점은
엑셀에서 시트 이름에 사용하지 못하는 특수문자나 기호가 있을 수 있습니다.
또한 시트 이름의 길이도 제한이 있으므로
이런 제한사항을 충족하지 못할 경우 에러가 발생할 수 있으니,
주의하시기 바랍니다.
sheetExists = False
For Each ws In ThisWorkbook.Sheets
If ws.Name = today Then
sheetExists = True
Exit For
End If
Next ws
위 코드는 오늘 날짜를 이름으로하는 시트가
기존에 존재하고 있는 지 확인하는 코드입니다.
계속 엑셀 파일을 띄어놓고 있을 수도 없고
경우에 따라서는 강제종료가 될 수도 있습니다.
파일을 열 때 기존에 오늘 날짜를 이름으로 하는 시트가 있는지 확인하고
없다면 오늘 날짜의 시트를 만들게 하기위해
확인 절차를 거치는 코드입니다.
If Not sheetExists Then
Dim lastSheet As Worksheet
Dim newSheet As Worksheet
Set lastSheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
lastSheet.Copy After:=lastSheet
Set newSheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
newSheet.Name = today
End If
위 코드는 lastSheet
변수를 사용해
현재 엑셀파일의 워크북에서 마지막 시트를 확인합니다.
그 후 lastSheet.Copy After:=lastSheet
코드를 통해
현재의 마지막 시트 뒤에 현재 시트와 동일한 시트를 복사합니다.
그러면 시트가 하나 더 늘어난 상태가 됩니다.
다시 newSheet
변수를 사용해
변경된 마지막 시트를 확인한 후
시트의 이름을 today
변수에 저장된
오늘 날짜로 바꾸어 줍니다.
[ 마치며 ]
바로 전날의 자료를 복사할 경우
전날의 자료와 오늘의 자료가 연관성이 없을 경우
전날 작성한 내용을 지워야 할 번거로움은
여전히 남아있을 수 있습니다.
이럴 경우
특정 시트에 양식만 작성해 놓은 후
해당 시트를 복사하게 한다면
이러한 번거로움도 조금은 줄일 수 있습니다.
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
'EXCEL VBA' 카테고리의 다른 글
엑셀 VBA 버튼으로 값 입력하고, 비활성화 된 버튼 색 바꾸기(버튼 활성화 표시) (0) | 2024.08.09 |
---|---|
엑셀 VBA의 'CurrentRegion'과 'UsedRange' 이해하기 (0) | 2024.08.08 |
엑셀 VBA 형식을 지정하는 Format 함수(날짜 및 시간 형식 지정) (0) | 2024.08.06 |
엑셀 VBA 형식을 지정하는 Format 함수(숫자 형식 지정) (0) | 2024.08.06 |
엑셀 VBA 엑셀 파일을 열 때마다 첫 번째 시트가 선택되게 만들기 (0) | 2024.08.05 |