Gilbert에는 A1 : A12 셀에 원하는 워크 시트 이름 목록이 포함 된 워크 시트 ( “Control”)가 있습니다. 그는 매크로에서 해당 셀 범위를 기반으로 통합 문서에있는 다른 12 개의 워크 시트 각각의 이름을 바꿀 수있는 방법이 필요합니다. 워크 시트 이름은 동적 일 필요가 없습니다. 매크로를 실행할 때 이름 만 변경하면됩니다.

이러한 요구를 해결하기위한 매크로 개발의 핵심은 이름을 바꾸려는 각 워크 시트의 Name 속성에 의존하는 것입니다. 예를 들어 다음과 같은 매우 간단한 매크로를 사용할 수 있습니다.

Sub RenameSheets()

Dim c As Range     Dim J As Integer

J = 0     For Each c In Range("A1:A12")

J = J + 1         If Sheets(J).Name = "Control" Then J = J + 1         Sheets(J).Name = c.Text     Next c End Sub

매크로는 단순히 A1 : A12 셀 범위를 단계별로 진행하며 다음 워크 시트의 이름이 “Control”이 아닌 경우 워크 시트의 이름을 셀 값으로 바꿉니다.

언급했듯이,이 매크로는 매우 단순하며 훨씬 더 강력해야합니다. 예를 들어 현재 통합 문서에 워크 시트가 13 개보다 많거나 적은 경우 어떻게해야합니까? A1 : A12 범위에 빈 셀이 있으면 어떻게해야합니까? 누군가 매크로를 실행하고 “컨트롤”이 활성 워크 시트가 아닌 경우 어떻게해야합니까?

A1 : A12에 동일한 값이 두 개 있으면 어떻게해야합니까? A1 : A12 범위에있는 하나 이상의 이름에 선행 또는 후행 공백이 있으면 어떻게됩니까? 이러한 질문과 다른 모든 질문이 최종적으로 매크로가 어떻게 보이는지에 영향을 미칠 수 있습니다. 다음은 방금 언급 한 몇 가지 가능성을 고려한 매크로의 주석 버전입니다.

Sub RenameSheets()

Dim c As Range     Dim J As Integer     Dim K As Integer     Dim sName As String     Dim w(12) As String     Dim bGo As Boolean     Dim sTemp As String

bGo = True     If Worksheets.Count <> 13 Then         ' Check to make sure exactly 13 worksheets in workbook         bGo = False         sTemp = "There are more than 13 worksheets."

End If     If ActiveSheet.Name <> "Control" Then         ' Check to make sure Control is active         bGo = False         sTemp = "Control worksheet is not active."

Else         ' Check for empty and duplicate cells in range         J = 0         For Each c In Range("A1:A12")

sName = Trim(c.Text)

If sName <> "" Then                 For K = 1 to J                     If LCase(w(K)) = LCase(sName) Then                         bGo = False                         sTemp = "Duplicate sheet names in list."

End If                 Next K                 If bGo Then                     ' Everything still good; add name                     J = J + 1                     w(J) = sName                 End If             End If         Next c     End If

If bGo Then         K = 0         For J = 1 To 12             K = K + 1             If Sheets(K).Name = "Control" Then K = K + 1             Sheets(K).Name = w(J)

Next J     Else         MsgBox(sTemp)

End If End Sub

두 번째 버전의 매크로가 첫 번째 버전보다 얼마나 더 긴지 알 수 있습니까? 매크로에 여러 검사를 추가하기 시작할 때마다 검사가없는 것보다 훨씬 더 오래 걸릴 수 있습니다. 물론 검사를 추가 할 때의 이점은 다른 사람이 매크로를 사용하기 때문에 매크로가 문제가 발생할 가능성이 적다는 것입니다.

_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.

이 팁 (1506)은 Microsoft Excel 2007, 2010, 2013 및 2016에 적용됩니다.