Kelly는 수백 개의 워크 시트가 포함 된 통합 문서를 가지고 있습니다. 각 워크 시트는 회사의 개별 프로젝트를 나타냅니다. 각 워크 시트의 C4 셀에는 해당 특정 프로젝트의 프로젝트 번호가 포함되어 있습니다.

통합 문서의 수백 개 중 개별 프로젝트를 찾는 것은 기껏해야 번거 롭습니다. 그녀는 모든 사용자가 작업 번호를 입력하고 C4 셀에서 해당 작업 번호가있는 워크 시트를 찾은 다음 해당 워크 시트를 표시하는 매크로를 만들 수 있는지 궁금합니다.

매크로에서이 작업을 수행하는 방법을 다루기 전에 Excel의 기본 도구를 사용하여 원하는 프로젝트를 찾을 수 있음을 이해해야합니다.

다음 단계를 따르기 만하면됩니다.

  1. Ctrl + F를 누릅니다. Excel은 찾기 및 바꾸기 대화 상자의 찾기 탭을 표시합니다.

  2. 옵션 버튼을 클릭하여 대화 상자를 확장합니다. (그림 1 참조)

  3. 범위 드롭 다운 목록을 사용하여 통합 문서를 선택합니다.

  4. 각 워크 시트의 C4 셀에 프로젝트 번호 만 있으면 전체 셀 내용 일치 확인란을 선택합니다.

  5. 다음 찾기를 클릭합니다.

그게 다입니다. 프로젝트 번호가 포함 된 셀의 첫 번째 인스턴스로 이동해야합니다. 통합 문서에 여러 셀 (C4 셀 제외)에 프로젝트 번호가 포함되어있는 경우 찾기 도구를 사용하는 것이 약간 지루할 수 있습니다. 올바른 워크 시트를 찾을 때까지 다음 찾기를 계속 클릭해야합니다. 이러한 상황에서 매크로는 셀 C4를 구체적으로보고 다른 셀에있는 것은 무시할 수 있기 때문에 최상의 솔루션이 될 수 있습니다.

다음 매크로는 사용자에게 프로젝트 번호를 입력하라는 메시지를 표시합니다. 그런 다음 통합 문서의 각 워크 시트에서 C4 셀에 해당 프로젝트 번호가 포함 된 첫 번째 워크 시트를 검색합니다. 찾은 경우 매크로는 워크 시트를 표시하고 셀을 활성화합니다. 찾을 수없는 경우이를 나타내는 메시지가 표시됩니다.

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

이 매크로에는 두 가지 잠재적 인 문제가 있습니다. 첫째, 프로젝트 번호가 실제로 숫자 인 경우 매크로는 텍스트 문자열을 찾을 때 해당 번호를 찾지 못할 수 있습니다. 둘째, 동일한 프로젝트 번호를 사용하는 워크 시트가 여러 개있는 경우 매크로가 항상 C4 셀의 첫 번째 일치하는 프로젝트 번호가있는 워크 시트에서 중지되므로이를 알 수 없습니다. 매크로를 몇 가지 변경하여 이러한 문제를 모두 극복 할 수 있습니다.

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

이 매크로 버전을 사용하면 프로젝트 번호가 모든 워크 시트에서 고유 한 경우에만 프로젝트 워크 시트가 표시됩니다. 프로젝트 번호가 동일한 인스턴스가 여러 개있는 경우 해당 워크 시트의 이름에 대한 알림이 표시되지만 워크 시트가 선택되지 않습니다.

원하는 경우 모든 워크 시트의 이름을 프로젝트 번호로 변경하여 매크로를 훨씬 더 간단하게 만들 수 있습니다. 또한 실제로 두 개의 워크 시트를 사용하는 프로젝트가 없도록하는 추가 이점도 있습니다. (모든 워크 시트 이름은 고유해야하므로 각 워크 시트에서 프로젝트 번호를 이름으로 사용하는 경우 프로젝트 번호 당 하나의 워크 시트 만 가질 수 있습니다.)이 방법을 사용하면 다음과 유사한 매크로를 사용하여 찾아 이동할 수 있습니다. 원하는 워크 시트에 :

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

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

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