Юрий Пользователь Сообщений: 212 |
Добрый день. Подскажите, пожалуйста, ответ на мой глупый вопрос . Для ячейки можно использовать команду Range(«a» & i). Как будет выглядеть в таком стиле код для Sheets(«название»)? Нужно не выбор через номер, а именно через имя. sub 1() |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
|
ikki Пользователь Сообщений: 9709 |
#3 27.12.2012 13:13:16
вот именно так и пишите. фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Наверное, имя+переменная? |
Юрий Пользователь Сообщений: 212 |
Большое спасибо. Прошу прощения за неточную формулировку вопроса. Давно не писал на формуме, видимо отвык… По теме: Можно было еще указать i=»имя» и это сработало бы в примере указанном мною выше. Но в прикремленном примере почему-то не работает. Подскажите,пожалуйста, что нужно поправить. В планах указать имя листа в Public zn As Integer, чтобы его можно было использовать для определения с какого листа следует брать список. Прикрепленные файлы
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Имя листа — это строка, а у Вас переменная Integer |
Юрий Пользователь Сообщений: 212 |
#7 27.12.2012 13:28:44
Нужно просто Public zn ? У меня из-за этого места форма не открывается:
|
||||||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
|
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#9 27.12.2012 13:33:49
Зачем так?
Я сам — дурнее всякого примера! … |
||||
ikki Пользователь Сообщений: 9709 |
зачем так? :)) фрилансер Excel, VBA — контакты в профиле |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
А я вот эту строку не понял: |
Юрий Пользователь Сообщений: 212 |
Спасибо. И правда короче, а работает также, но с Sheets(zn) все равно проблема. Не могу понять, как задать zn=»ии», или zn=»аа» |
ikki Пользователь Сообщений: 9709 |
офф фрилансер Excel, VBA — контакты в профиле |
ikki Пользователь Сообщений: 9709 |
#14 27.12.2012 13:49:54 в стандартном модуле поменяйте на
фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Саш, я уже предлагал в 13:30:33) |
Юрий Пользователь Сообщений: 212 |
#16 27.12.2012 13:51:26
Все заработало. Большое всем спасибо. Забыл Public zn as sting «r» добавить . Выкладываю окончательный вариант, может кому пригодится. Прикрепленные файлы
Изменено: Юрий — 27.12.2012 14:04:52 |
||
В формуле использовать Имя листа из ячейки |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Хитрости »
4 Март 2015 53359 просмотров
Как получить имя листа формулой
Задача: записать в отдельной ячейке или внутри формулы имя текущего листа(т.е. того, в котором сама функция).
В принципе это очень легко сделать простейшей функцией пользователя:
'--------------------------------------------------------------------------------------- ' Procedure : GetShName ' DateTime : 04.03.2015 10:44 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : Функция возвращает в ячейку имя листа ' rCell - Необязательный аргумент. ' Если указан - функция вернет имя листа, на котором расположена эта ячейка ' Если не указан - функция вернет имя листа, в котором записана функция '--------------------------------------------------------------------------------------- Function GetShName(Optional rCell As Range) If Not rCell Is Nothing Then GetShName = rCell.Parent.Name Else GetShName = Application.Caller.Parent.Name End If End Function
Синтаксис:
получение имени листа, в котором записана функция:
=GetShName()
получение имени листа, в котором расположена указанная ячейка
=GetShName(A1) — данная запись равнозначна записи без ячейки, т.к. ячейка все равно в пределах листа с самой функцией
=GetShName(Лист2!A1)
Но бывают случаи, когда использование макросов весьма нежелательно. Тогда можно воспользоваться чуть более громоздкой и менее понятной формулой:
=ПСТР(ЯЧЕЙКА(«filename»;A2);ПОИСК(«]»;ЯЧЕЙКА(«filename»;A2))+1;31)
=MID(CELL(«filename»,A2),SEARCH(«]»,CELL(«filename»,A2))+1,31)
Однако эта формула вернет точно такой же результат, как функция пользователя выше и макросы совершенно не нужны.
Теперь разберем эту формулу поподробнее
Самая основная часть — ЯЧЕЙКА(«filename»;A2). Функция ЯЧЕЙКА (CELL) с записанным первым аргументом «filename» возвращает полный путь к книге, включая имя листа и адрес ячейки, в которой записана функция:
C:UsersДмитрийDesktop[Tips_All_GetShName.xls]Лист1
Т.к. нам нужно только имя листа — мы применяем ПСТР (MID), которая возвращает часть текста, начиная с указанной позиции символа. ПОИСК (SEARCH) ищет нам именно эту позицию — позицию символа «]».
Если по шагам просмотреть этапы работы формулы, то будет нечто вроде:
=ПСТР(ЯЧЕЙКА(«filename»;A2);ПОИСК(«]»;ЯЧЕЙКА(«filename»;A2))+1;31)
Шаг1 =>
=ПСТР(ЯЧЕЙКА(«filename»;A2);ПОИСК(«]»;C:UsersДмитрийDesktop[Tips_All_GetShName.xls]Лист1)+1;31)
Шаг2 =>
=ПСТР(ЯЧЕЙКА(«filename»;A2);49+1;31)
Шаг3 =>
=ПСТР(C:UsersДмитрийDesktop[Tips_All_GetShName.xls]Лист1;50;31)
Шаг4 =>
=Лист1
Первый момент: почему применяю цифру 31 последним аргументом ПСТР? По факту, там необходимо указывать точное количество символов, но если указать больше — то будут взяты все символы от указанного и до последнего. Т.е можно было бы указать и 99, но 31 — это максимальное количество символов, которое можно использовать в имени листа.
Второй момент: первым аргументом функции ЯЧЕЙКА указывается текст, обозначающий тип сведений. В русской локализации он доступен на русском — «имяфайла». Однако при открытии файла с этой функцией в другой локализации тип сведений не будет переведен и функция не сможет работать. Поэтому я указываю на английском, т.к. он является универсальным в данном случае и будет работать в любой локализации. Однако нет никакой ошибки, если указать на русском: ЯЧЕЙКА(«имяфайла»;A2)
Если вторым аргументом функции ЯЧЕЙКА ничего не указывать(=ЯЧЕЙКА(«filename»)), то функция вернет полный путь с именем того листа, который активен в данный момент(даже если это лист другой книги). Это всегда надо учитывать. Часто функцию используют для определения имени книги, в которой сама функция записана(например, для запросов Power Query — Относительный путь к данным PowerQuery). И в какой-то момент может получиться так, что ожидаете увидеть имя книги или листа с функцией, а получаете совсем другое.
Правда, у этой формулы есть свои недостатки: обязательно необходимо, чтобы книга была сохранена на диске. Это означает, что формула не сработает для книги, которая была только что создана и не сохранена. Связано это с ограничениями возможностей параметра «filename» функции ЯЧЕЙКА(CELL). Она не может получить путь к файлу, который еще не сохранен.
Функция пользователя(UDF) GetShName(приведенная в самом начале статьи) лишена этого недостатка.
Для чего вообще может быть нужно записывать имя листа в ячейку? Ну, например, если имя листа периодически меняется, а в своих формулах вы используете функции вроде ДВССЫЛ со ссылкой на этот лист. Либо для создания более наглядного оглавления через гиперссылки.
Кто-то уже явно догадался, что подобным же образом можно получить не только имя листа — но и имя книги:
=ПСТР(ЯЧЕЙКА(«filename»);ПОИСК(«[«;ЯЧЕЙКА(«filename»))+1;ПОИСК(«]»;ЯЧЕЙКА(«filename»))-ПОИСК(«[«;ЯЧЕЙКА(«filename»))-1)
так же как и для имени листа — можно указать ячейку из другой книги и тогда формула вернет имя той книги, из которой указана ячейка.
Если ячейка не указана — функция вернет имя активной в данный момент книги.
Так же можно получить полный путь к книге и имя книги(без квадратных скобок и имени листа):
=ПОДСТАВИТЬ(ПСТР(ЯЧЕЙКА(«filename»;A1);1;ПОИСК(«]»;ЯЧЕЙКА(«filename»;A1))-1);»[«;»»)
Так же см.:
Имя предыдущего листа
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Определим имя листа с помощью функции
ЯЧЕЙКА()
.
Имя листа можно определить с помощью функции
ЯЧЕЙКА()
, записав формулу (см.
файл примера
):
=ПРАВСИМВ(ЯЧЕЙКА(«имяфайла»);ДЛСТР(ЯЧЕЙКА(«имяфайла»))-ПОИСК(«]»;ЯЧЕЙКА(«имяфайла»)))
Если формула вводится в новую книгу, то ее сначала нужно сохранить. После сохранения, возможно, потребуется нажать клавишу
F9
(Вкладка
Формулы
, Группа
Вычисление
,
Пересчет
).
Формула вернет имя листа, содержащего ячейку с вышеуказанной формулой. Если требуется определить имя другого листа, то можно использовать туже функцию
ЯЧЕЙКА()
, но с аргументом «адрес».
Для этого нужно, чтобы второй аргумент содержал ссылку на ячейку другого листа, имя которого и будет определено. Если формула
=ЯЧЕЙКА(«адрес»;лист2!A1)
находится на
листе1
в ячейке
B1
, то имя листа (
Лист2
) можно определить по формуле:
=ПСТР(B1;ПОИСК(«]»;B1)+1;ДЛСТР(B1)-ПОИСК(«]»;B1)-5)
В этом случае имя листа не должно состоять только из цифр, т.к. если в качестве названия листа использовано число, то функция
ЯЧЕЙКА()
возвращает название книги и листа в апострофах (‘) и формула вернет неправильный результат. Справиться с этим поможет формула
=ПОДСТАВИТЬ(C1;»‘»;»»)
, которая удалит символ апострофа.
Также предполагается, что имя файла не содержит символа
закрывающая квадратная скобка
( ] ).
ВНИМАНИЕ
!
Иногда, когда открыто несколько книг, функция
ЯЧЕЙКА()
может работать некорректно. Для восстановления работоспособности формулы нужно нажать клавишу
F9
(
).
ПРИМЕНЕНИЕ:
При изменении имени листа, все ссылки в формулах автоматически обновятся и будут продолжать работать. Исключение составляет функция
ДВССЫЛ()
, в которой имя листа может фигурировать в текстовой форме
ДВССЫЛ(«Лист1!A1»)
. В статье
Определение имени листа для использования в функции ДВССЫЛ()
показано как использовать функцию
ЯЧЕЙКА()
, чтобы сохранить работоспособность формулы с функцией
ДВССЫЛ()
.
Функция ЛИСТ в Excel возвращает числовое значение, соответствующее номеру листа, на который указывает ссылка, переданная функции в качестве параметра.
Функции ЛИСТ и ЛИСТЫ в Excel: описание аргументов и синтаксиса
Функция ЛИСТЫ в Excel возвращает числовое значение, которое соответствует количеству листов, на которые предоставлена ссылка.
Примечания:
- Обе функции полезны для использования в документах, содержащих большое количество листов.
- Лист в Excel – это таблица из всех ячеек, отображаемых на экране и находящихся за его пределами (всего 1 048 576 строк и 16 384 столбца). При отправке листа на печать он может быть разбит на несколько страниц. Поэтому нельзя путать термины «лист» и «страница».
- Количество листов в книге ограничено лишь объемом ОЗУ ПК.
Функция ЛИСТ имеет в своем синтаксисе всего 1 аргумент и то не обязательный для заполнения: =ЛИСТ(значение).
- значение – необязательный аргумент функции, который содержит текстовые данные с названием листа либо ссылку, для которой требуется установить номер листа. Если данный параметр не указан, функция вернет номер листа, в одной из ячеек которого она была записана.
Примечания:
- При работе функции ЛИСТ учитываются все листы, которые являются видимыми, скрытыми и очень скрытыми. Исключениями являются диалоги, макросы и диаграммы.
- Если аргументом функции является текстовое значение, которое не соответствует названию ни одного из листов, содержащихся в книге, будет возвращена ошибка #НД.
- Если в качестве аргумента функции было передано недействительное значение, результатом ее вычислений будет являться ошибка #ССЫЛКА!.
- В рамках объектной модели (иерархия объектов на VBA, в которой Application является главным объектом, а Workbook, Worksheer и т. д. – дочерними объектами) функция ЛИСТ недоступна, поскольку она содержит схожую функцию.
Функция листы имеет следующий синтаксис: =ЛИСТЫ(ссылка).
- ссылка – объект ссылочного типа, для которого требуется определить количество листов. Данный аргумент является необязательным. Если данный параметр не указан, функция вернет количество листов, содержащихся в книге, на одном из листов которой она была записана.
Примечания:
- Данная функция подсчитывает количество всех скрытых, очень скрытых и видимых листов, за исключением диаграмм, макросов и диалогов.
- Если в качестве параметра была передана недействительная ссылка, результатом вычислений является код ошибки #ССЫЛКА!.
- Данная функция недоступна в объектной модели в связи с наличием там схожей функции.
Как получить имя листа формулой в Excel
Пример 1. При выполнении расчетной работы студент использовал программу Excel, в которой создал книгу из несколько листов. Для собственного удобства, студент решил в ячейках A2 и B2 каждого листа выводить данные о названии листа и его порядковом номере соответственно. Для этого он использовал следующие формулы:
Описание аргументов для функции ПСТР:
- ЯЧЕЙКА(«имяфайла») – функция, возвращающая текст, в котором функция ПСТР выполняет поиск заданного количества символов. В данном случае вернется значение «C:UserssoulpDesktop[ЛИСТ_ЛИСТЫ.xlsx]Статические расчеты», где после символа «]» находится искомый текст – название листа.
- НАЙТИ(«]»;ЯЧЕЙКА(«имяфайла»))+1 – функция, возвращающая номер позиции символа «]», единица добавлена с той целью, чтобы функция ПСТР не учитывала символ «]».
- 31 – максимальное количество символов в названии листа.
=ЛИСТ() – данная функция без параметра вернет номер текущего листа. В результате ее вычисления получим количество листов в текущей книге.
Примеры использования функции ЛИСТ и ЛИСТЫ
Пример 2. В книге Excel содержится несколько листов. Необходимо:
- Вернуть номер текущего листа.
- Вернуть номер листа с названием «Статические_расчеты».
- Вернуть номер листа «Динамические_расчеты», если его ячейка A3 содержит значение 0.
Внесем данные в таблицу:
Далее составим формулы для всех 4-х условий:
- для условия №1 используем следующую формулу: =ЛИСТ()
- для условия №2 введем формулу: =ЛИСТ(«Статические_расчеты»)
- для условия №3 запишем формулу:
Функция ЕСЛИ выполняет проверку условия равенства значения, хранящегося в ячейке A3 листа Динамические_расчеты, нулю или пустому значению.
В результате получим:
Обработка информации о листах книги по формуле Excel
Пример 3. В книге Excel содержится несколько листов. Необходимо определить общее количество листов, а также число листов, содержащихся между листами «Статические_расчеты» и «Экономические_расчеты».
Исходная таблица имеет вид:
Общее количество листов вычислим по формуле:
Для определения количества листов, содержащихся между двумя указанными листами, запишем формулу:
- Статические_расчеты:Экономические_расчеты!A2 – ссылка на ячейку A2 диапазона листов между «Статические_расчеты» и «Экономические_расчеты» включая эти листы.
- Для получения искомого значения было вычтено число 2.
В результате получим следующее:
Скачать примеры функций ЛИСТ и ЛИСТЫ в формулах Excel
Формула выводит подробную информацию по данным о листах в определенном диапазоне их расположения в рабочей книге Excel.