EXCEL VBA

[ 엑셀 VBA ] 시트 삭제하는 여러가지 방법, 엑셀 시트 삭제하기

카루루1007 2024. 9. 6. 10:32
728x90
반응형

 맨 앞의 시트 삭제

 

맨 앞의 시트를 지우는 코드입니다.

Sub 시트지우기()
    Worksheets(1).Delete
End Sub

 

시트를 삭제하는 방법

시트를 지정하고 Delete를 사용하면 됩니다.

 

 시트 지울 때 경고 메시지 없애는 방법

 

맨 앞의 시트를 삭제하는 위 코드를 실행하면 아래 그림과 같이 경고 메시지가 나타납니다.

 

이 경고메세지는 시트를 제대로 지우는데 도움이 됩니다.

하지만, 경우에 따라서는 이런 경고메시지가 나타나지 않는 것이

더 효율적일 경우가 있습니다.

 

아래와 같이 코드를 작성하면 경고메세지가 뜨지 않게 할 수 있습니다.

Sub 시트지우기()
    Application.DisplayAlerts = False
    Worksheets(1).Delete
    Application.DisplayAlerts = True
End Sub

 

Application.DisplayAlerts는 VBA의 경고창을 컨트롤할 수 있습니다.

False로 설정하면 경고창이 나타나지 않고

True로 설정하면 경고창이 나타납니다.

 

계속해서 False로 설정하면 이 후 다른 코드에서도 경고창이 나타나지 않으므로

꼭 필요한 부분에서만 설정하고

다시 True로 바꾸어야 합니다.

 

또한 경고 메세지가 숨겨지면 실수로 중요한 시트를 삭제할 수 있으므로 주의해야 합니다.

 

반응형

 맨 뒤에 시트 지우는 코드

 

맨 뒤에 시트를 지우는 코드는 다음과 같습니다.

Sub 시트지우기()
    lastSheet = Worksheets.Count
    Worksheets(lastSheet).Delete
End Sub

시트가 모두 몇 개 인지 확인 한 후 마지막 시트의 번호를 사용해 지우는 코드입니다.

 

아래 코드는 마지막 시트의 시트 이름을 확인한 후

시트 이름을 통해 지우는 코드입니다.

Sub 시트지우기()
    lastsheetName = Worksheets(Worksheets.Count).Name
    Worksheets(lastsheetName).Delete
End Sub

 

 특정 이름의 시트 지우는 코드

 

아래 코드는 특정 이름의 시트를 지우는 코드입니다.

Sub 시트지우기()
    Worksheets("sheet10").Delete
End Sub

 

하지만 이렇게 특정 시트의 이름을 통해 지우는 코드는

그 이름을 가진 시트가 있는지 먼저 확인을 한 후

시트가 있다면 지우고

없다면 해당 코드를 실행하지 않아야 합니다.

 

아래 코드는 특정 이름의 시트가 있는지 확인하는 코드입니다.

Sub 시트지우기()
    targetSheetName = "sheet10"
    
    On Error Resume Next
    Worksheets(targetSheetName).Select
    
    Debug.Print Err.Number
    
    If Err.Number <> 0 Then
        Err.Clear
        Exit Sub
    End If
    
    On Error GoTo 0
    
    Worksheets("sheet10").Delete
End Sub

 

On Error Resume Next를 통해 에러가 발생하더라도 코드가 실행되게 합니다.

그다음 Worksheets(targetSheetName).Select를 통해 특정 이름의 시트를 선택합니다.

만약 Sheet10 이라는 이름의 시트가 없다면 오류가 발생합니다.

Debug.Print는 오류 코드를 확인하기 위해 적은 것이므로 필요하지 않습니다.

에러에는 항상 고유의 번호가 존재하는데 

Err.Number의 값이 0이 아니면, 즉 오류가 발생했으면

에러를 초기화하고, 프로그램을 종료합니다.

 

On Error Resume Next와 같은 VBA 에러 처리 방법은 아래를 확인하시면 됩니다.

엑셀 VBA의 오류 및 에러 처리 방법

728x90

 

다음은 For Each 문을 통해 특정 시트가 있는지 확인하고

있다면 지우는 코드입니다.

Sub 시트지우기()
    targetSheetName = "Sheet10"
    
    For Each ws In Worksheets
        Debug.Print ws.Name
        
        If ws.Name = targetSheetName Then
            targetFount = True
            Exit For
        End If
    Next ws
    
    If targetFount Then
        Worksheets(targetSheetName).Delete
    Else
        MsgBox "지우려는 시트가 없습니다."
    End If
End Sub

 

 특정 시트의 앞에 위치한 시트를 지우는 코드

 

아래 코드는 특정 시트의 앞에 위치한 시트를 지우는 코드입니다.

특정한 시트의 시트 번호를 알아내고

시트 번호에서 -1을 하면 앞의 시트를 지울 수 있습니다.

단, 특정 시트가 제일 첫번째 시트라면 해당 시트의 앞에 시트가 존재할 수 없으므로

시트 삭제를 진행하지 않습니다.

Sub 시트지우기()
    targetSheetName = "Sheet10"
    
    SheetIndex = Worksheets(targetSheetName).Index
    
    If SheetIndex > 1 Then
        Worksheets(SheetIndex - 1).Delete
    Else
        MsgBox "해당 시트의 앞에 시트가 없습니다."
    End If
End Sub

 

 특정 시트의 뒤에 위치한 시트 지우는 코드

 

아래 코드는 특정 시트의 뒤에 위치한 시트를 지우는 코드로

특정 시트의 앞에 위치한 시트를 지우는 코드와 논리는 비슷합니다.

다만, 전체 시트의 개수를 알아내고

현재 시트의 위치가 맨 마지막이 아니라면 시트를 지우고

그렇지 않다면 지우지 않습니다.

Sub 시트지우기()
    targetSheetName = "Sheet10"
    
    SheetIndex = Worksheets(targetSheetName).Index
    
    If SheetIndex < Worksheets.Count Then
        Worksheets(SheetIndex + 1).Delete
    Else
        MsgBox "해당 시트의 뒤에 시트가 없습니다."
    End If
End Sub

 

 현재 활성화된 시트 지우기

 

특정 시트를 지우는 방법과 동일합니다.

Sub 시트지우기()
    targetSheetName = ActiveSheet.Index
    
    SheetIndex = Worksheets(targetSheetName).Index
    
    Worksheets(SheetIndex).Delete
End Sub

 

 활성화된 시트의 앞 또는 뒤에 위치한 시트 지우기

 

활성화된 시트의 앞에 위치한 시트를 지우는 코드입니다.

특정 시트의 앞 또는 뒤에 위치한 시트를 지우는 방법과 동일합니다.

Sub 시트지우기()
    targetSheetName = ActiveSheet.Index
    
    sheetindex = Worksheets(targetSheetName).Index
    
    If sheetindex > 1 Then
        Worksheets(sheetindex).Delete
    Else
        MsgBox "현재 시트가 첫번째 시트 입니다."
    End If
End Sub

 

활성화된 시트의 뒤에 위치한 시트를 지우는 코드입니다.

Sub 시트지우기()
    targetSheetName = ActiveSheet.Index
    
    sheetindex = Worksheets(targetSheetName).Index
    
    If sheetindex < Worksheets.Count Then
        Worksheets(sheetindex).Delete
    Else
        MsgBox "현재 시트가 마지막 시트 입니다."
    End If
End Sub

 

 주 의 사 항

 

시트를 지울 때 주의할 사항은 

시트의 개수를 확인해야 한다는 것입니다.

엑셀은 시트가 반드시 하나 이상 있어야 하므로

시트가 한개 일 때는 지울 수 없습니다.

 

그러므로 항상 시트의 개수를 확인하는 코드를 사용해서

시트의 개수가 1개 이상일 때만 코드를 실행해야 합니다.

 

그리고 특정 시트를 지우려고 할 때

해당 시트가 존재하는 지 역시 확인해야 합니다.

 

마지막으로, 특정 시트의 앞 또는 뒤 시트를 지우려고 할 때

해당 시트의 위치가 제일 앞이거나 제일 뒤일 경우에는

조건이 충족하지 않으므로 조건이 충족하는지 여부도 사전에 검토가 되어야 합니다.

 

시트의 추가와 이동을 알아보시려면 아래를 참고하시면 됩니다.

시트 추가하는 여러가지 방법, 엑셀 시트 추가하기

시트 이동하는 여러가지 방법, 시트 이동하기

 

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

엑셀 공부하기
VBA 공부하기

728x90
반응형