워크 시트 이름 자동 변경 (Microsoft Excel)
Renier에는 Resources 1부터 Resources 10까지 이름이 지정된 10 개의 워크 시트가 포함 된 통합 문서가 있습니다. 이러한 워크 시트 중 하나 (예 : Resources 3)를 삭제하면 Renier는 “격차를 줄이기 위해 나머지 워크 시트의 이름을 자동으로 변경하기를 원합니다. ,” 말하자면. 따라서 리소스 4부터 리소스 10까지 리소스 3부터 리소스 9까지 자동으로 이름이 변경됩니다.
매크로를 사용하여이 작업을 수행 할 수있는 여러 가지 방법이 있습니다. 한 가지 접근 방식은 Renier가 선호하는 것보다 덜 자동적이지만 잘 작동합니다.
Sub ReNameSheets() Dim J As Integer Dim wks As Worksheet J = 0 For Each wks In ActiveWorkbook.Worksheets J = J + 1 wks.Name = "TempSheet " & J Next wks J = 0 For Each wks In ActiveWorkbook.Worksheets J = J + 1 wks.Name = "Resources " & J Next wks End Sub
이 매크로는 단순히 모든 워크 시트를 살펴보고 Renier가 선호하는 규칙을 사용하여 이름을 바꿉니다. 매크로는 워크 시트의 이름을 바꾸고 싶을 때 필요할 때마다 실행할 수 있습니다.
코드는 실제로 워크 시트를 통해 두 번의 이름 지정을 수행합니다. 첫 번째는 워크 시트의 이름을 임시 이름으로 설정하고 두 번째는 최종 이름으로 설정하는 것입니다. 두 단계는 통합 문서에 워크 시트를 추가 할 때 잠재적 인 문제를 방지하는 데 도움이됩니다. 예를 들어 리소스 4 바로 앞에 새 워크 시트를 추가하면 단일 패스 이름을 변경하면 새 워크 시트의 이름을 리소스 4로 변경하려고 할 수 있습니다. 이때 워크 시트 5의 이름도 Resources 4로 지정되기 때문에 오류가 발생합니다. 두 번의 패스를 수행하여 모든 이름을 완전히 새로운 이름으로 변경 한 다음 최종 이름 설정을 수행합니다.
보다 자동으로 접근하려면 Workbook 개체에 대해 SheetBeforeDelete 이벤트 사용을 고려할 수 있습니다. 이 이벤트는 이름에서 알 수 있듯이 워크 시트가 삭제되기 직전에 트리거됩니다. 다음은 이벤트 처리기 접근 방식의 예입니다.
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object) Dim sPrefix As String Dim iNum1 As Integer Dim iNum2 As Integer Dim wks As Worksheet sPrefix = "Resources " If Left(Sh.Name, Len(sPrefix)) = sPrefix Then iNum1 = CInt(Right(Sh.Name, Len(Sh.Name) - Len(sPrefix))) Sh.Name = "TempSheet 9999" For Each wks In Sheets If Left(wks.Name, Len(sPrefix)) = sPrefix Then iNum2 = CInt(Right(wks.Name, Len(wks.Name) - Len(Prefix))) If iNum2 > iNum1 Then wks.Name = sPrefix & (iNum2 - 1) End If End If Next End If End Sub
이벤트 처리기는 삭제중인 워크 시트가 지정된 접두사 ( “Resources”)로 시작하는지 확인합니다. 그렇다면 삭제중인 워크 시트의 이름을 임시 이름 ( “TempSheet 9999”)으로 바꿉니다.
그런 다음 통합 문서의 각 워크 시트를 살펴보고 삭제중인 워크 시트보다 적절한 접두사와 접미사 번호가 더 높은 워크 시트의 이름을 바꿉니다.
이 접근 방식에는 두 가지 큰주의 사항이 있습니다. 첫째, 워크 시트를 추가하면 처리되지 않습니다. 둘째, 단일 워크 시트의 삭제 만 안정적으로 처리합니다. 한 번에 여러 워크 시트를 삭제하면 번호 매기기가 올바르지 않으며 실제로 Excel에서 삭제를 처리하는 방식으로 인해 매크로가 충돌 할 수 있습니다.
여러 워크 시트를 자주 삭제할 것으로 예상되는 경우 다른 방법을 사용하여 문제를 피할 수 있습니다. 이것은 Workbook 개체의 SheetActivate 및 SheetDeactivate 이벤트 사용에 의존합니다.
' These variables are declared OUTSIDE of the events, ' so they are available globally. Dim shName As String Dim Avail As Variant Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) ' When the worksheet is deactivated, the name of ' that worksheet is stored in the shName variable. shName = Sh.Name End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim wks As Worksheet Dim J As Integer On Error Resume Next ' The following line will generate an error if the ' the worksheet shName was deleted. If the error ' occurrs, then we can trigger the renaming. Avail = Sheets(shName).Range("A1") If Err Then J = 0 For Each wks In ActiveWorkbook.Worksheets J = J + 1 wks.Name = "Resources " & J Next wks End If On Error GoTo 0 End Sub
이러한 이벤트 처리기는 워크 시트가 남아있을 때 (예 : 다른 워크 시트를 활성화 할 때) 또는 워크 시트가 삭제 될 때마다 SheetDeactivate 이벤트가 자동으로 트리거되기 때문에 작동합니다. 그런 다음 SheetActivate 이벤트가 트리거되고 기본적으로 이전에 비활성화 된 시트에 도달 할 수 있는지 여부를 확인합니다. 도달 할 수없는 경우 삭제 된 것이므로 모든 워크 시트의 이름을 변경할 수 있습니다.
이름을 바꾸는 데 사용하는 접근 방식은 워크 시트 작업 방식에 따라 전적으로 사용자에게 달려 있습니다.
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (13572)은 Office 365의 Microsoft Excel 2007, 2010, 2013, 2016, 2019 및 Excel에 적용됩니다.