У Келли есть рабочая тетрадь, содержащая сотни рабочих листов. Каждый рабочий лист представляет собой индивидуальный проект для ее компании. Ячейка 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.