EXCEL VBA

엑셀 VBA 엑셀 파일 실행 시 오늘 날짜를 시트 이름으로하는 시트 자동 생성하기

카루루1007 2024. 8. 7. 10:48
728x90
반응형

[ 들어가며 ]

 

엑셀을 사용하여 매일 반복되는 업무를 처리하는 경우가 많습니다.

특정 양식의 내용을 매일 반복해야 하는 과정에서
매일매일 시트를 생성하고
내용을 작성하는 업무를 할 때

내용을 작성하는 것을 자동화하는 것은
어려울 수 있으나,
파일을 열자마자 전에 작성했던 시트를 참고해서
새로운 시트가 만들어지게 하는 것
쉽게 할 수 있습니다.

 

[ 처리과정 ]

 

  1. 오늘 날짜를 변수에 저장합니다.
  2. 오늘 날짜의 시트가 이미 존재하는 지 확인합니다.
    • 하루에도 여러번 파일을 열 수 있으므로 동일한 이름의 시트가 있는지 확인을 합니다.
    • 동일한 이름의 시트가 있다면 시트를 생성하지 않고, 그렇지 않으면 시트를 생성합니다.
  3. 오늘 날짜의 시트가 존재하지 않는다면, 마지막 시트를 복사한 후 새로운 시트를 만들고
    시트 이름을 오늘 날짜로 변경합니다.

 

[ 준비과정 ]

 

이전 블로그의 내용 중 준비단계를 참고하시면 됩니다.
파일을 열 때 마다 첫 번째 시트 선택하게 하기

728x90

[ 전체코드 ]

 

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 함수를 사용해서 표시할 형식을 지정합니다.

Format 함수와 Date 함수에 대한 설명 링크

위 코드로 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변수에 저장된
오늘 날짜로 바꾸어 줍니다.

 

[ 마치며 ]

 

바로 전날의 자료를 복사할 경우
전날의 자료와 오늘의 자료가 연관성이 없을 경우
전날 작성한 내용을 지워야 할 번거로움은
여전히 남아있을 수 있습니다.

이럴 경우
특정 시트에 양식만 작성해 놓은 후
해당 시트를 복사하게 한다면
이러한 번거로움도 조금은 줄일 수 있습니다.

 

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형