Получение имени рабочего листа в ячейку (Microsoft Excel)
У Кевина есть рабочая тетрадь, содержащая 36 листов. Ему нужно, чтобы имя рабочего листа присутствовало в ячейке этого рабочего листа. Он создал пользовательскую функцию, которая возвращает имя рабочего листа, но оно возвращает одно и то же имя на всех 36 листах — имя любого рабочего листа, отображаемого при выполнении пользовательской функции. Он задается вопросом, есть ли макрос в форме определяемой пользователем функции (UDF), который он может использовать, который всегда будет возвращать имя листа, на котором используется функция. Другими словами, в его рабочей книге из 36 листов он должен возвращать 36 различных результатов в зависимости от того, на каком листе он используется.
Короткий ответ — да, выход есть. На самом деле, есть несколько способов. И, что интересно, вам не нужно использовать макрос или функцию, если вы этого не хотите. Например, вот обычная формула рабочего листа, которая будет работать в любой ячейке рабочего листа:
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,255)
Экземпляр функции ЯЧЕЙКА в этой формуле возвращает полное имя рабочего листа, включая имя файла и путь к нему. Использование функции НАЙТИ приводит к удалению всего, кроме имени рабочего листа.
Обратите внимание на использование ссылки на ячейку (A1) в каждом экземпляре функции CELL. Это заставляет функцию CELL возвращать имя рабочего листа, содержащего ссылку на ячейку. Без него вы получите один и тот же результат (первый рабочий лист) для каждого экземпляра формулы.
Вы также должны знать, что формула не вернет действительные результаты, если вы используете ее в новой книге, которая не была сохранена. Вам нужно сохранить книгу, чтобы у нее действительно было имя, которое может успешно возвращать функция CELL. Это также не будет работать должным образом, если имя книги или рабочего листа содержит символ правой скобки («]»). В этом случае вы захотите использовать одно из других решений, обсуждаемых в этом совете.
Если вы предпочитаете использовать пользовательскую функцию, вы можете попробовать что-нибудь простое, например, эту функцию:
Function TabName1() As String Application.Volatile TabName1 = ActiveSheet.Name End Function
Однако эта функция не даст желаемого результата, потому что она всегда возвращает имя активного рабочего листа. Это означает, что если у вас есть функция, вызываемая на каждом из листов в вашей книге, она всегда будет возвращать имя активного листа на каждом из этих листов вместо имени листа, на котором используется функция. Следующая функция обеспечивает лучшие результаты:
Function TabName2() As String Application.Volatile TabName2 = Application.Caller.Parent.Name End Function
Если вы думаете, что захотите использовать эту функцию для ссылки на имя рабочего листа в другом месте книги, тогда эта функция подойдет вам лучше:
Function TabName3(cell As Range) TabName3 = cell.Worksheet.Name End Function
Эта версия функции требует, чтобы вы указали ссылку на ячейку — любую ссылку на ячейку — на ячейку на листе, имя которой вы хотите использовать.
Конечно, если вы предпочитаете не использовать пользовательскую функцию, вы можете просто создать макрос, который будет помещать имя каждой вкладки рабочего листа в одну и ту же ячейку на каждом листе. Например, следующий макрос проходит через каждый рабочий лист в книге и помещает имя каждого рабочего листа в ячейку A1.
Sub TabName4() For J = 1 To ActiveWorkbook.Sheets.Count Sheets(J).Cells(1, 1).Value = Sheets(J).Name Next End Sub
Следует отметить, что этот подход не является динамическим (его нужно запускать повторно каждый раз, когда вы меняете имена рабочих листов или добавляете новые рабочие листы). Он также перезаписывает все, что находится в ячейке A1. (Если вы хотите, чтобы имена рабочих листов помещались в разные ячейки на каждом листе, измените значения, используемые в коллекции Cells.)
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (11419) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Getting_the_Name_of_the_Worksheet_Into_a_Cell [Получение имени рабочего листа в ячейке]
.