Получить имя текущего листа excel

Узнать имя активного листа

lapin9126

Дата: Пятница, 06.01.2017, 18:35 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Здравствуйте, с наступающим. На данном форуме нашёл тему: Узнать имя активной таблицы (Макросы/Sub).
в которой предложено решение следующим макросом

Или так, если нужно это имя дальше использовать:
Sub NameTable()
For Each obj In ActiveSheet.ListObjects
If obj.Active Then nameTbl = obj.Name: Exit For
Next obj
Debug.Print nameTbl
End Sub

Можно ли с помощью такого приёма узнать имя активного листа и использовать его дальше, в ходе выполнения макроса, который будет обращаться к имени листа. Ну о-о-о-о-о-очень нужно.

Сообщение отредактировал lapin9126Пятница, 06.01.2017, 18:36

 

Ответить

Pelena

Дата: Пятница, 06.01.2017, 18:43 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
[vba][/vba]
не вариант?


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

lapin9126

Дата: Пятница, 06.01.2017, 18:48 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Пробовал, в моём случае не подходит.

 

Ответить

Udik

Дата: Пятница, 06.01.2017, 19:07 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1588


Репутация:

192

±

Замечаний:
0% ±


Excel 2016 х 64

в моём случае не подходит

Везде работает а у Вас нет, тогда показывайте файл где не работает.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com

 

Ответить

lapin9126

Дата: Пятница, 06.01.2017, 19:10 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

[vba]

Код

Sub Сортировка_2()
ActiveWorkbook.CheckCompatibility = False ‘ отменяем проверку совместимости
‘—————————————————————————-
    Dim sName, obj As String
    sName = ActiveWorkbook.ActiveSheet.Name ‘ имя активного листа
‘—————————————————————————-
    For Each obj In sName.ListObjects ‘ получение имя активной таблицы
        If obj.Active Then nameTbl = obj.Name: Exit For
    Next obj
    Debug.Print nameTbl
‘—————————————————————————-
ActiveWorkbook.sName.ListObjects(obj).Sort. _
        SortFields.Clear
    ActiveWorkbook.sName.ListObjects(obj).Sort. _
        SortFields.Add Key:=Range(«obj[Group]»), SortOn:= _
        xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        «КУПЛЮ :,ПРОДАМ :,АРЕНДА :,НЕДВИЖИМОСТЬ :,ТРАНСПОРТ :,УСЛУГИ :,РАБОТА :,РАЗНОЕ :» _
        , DataOption:=xlSortNormal
    With ActiveWorkbook.sName.ListObjects.obj.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]

 

Ответить

Udik

Дата: Пятница, 06.01.2017, 19:25 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1588


Репутация:

192

±

Замечаний:
0% ±


Excel 2016 х 64

Нормально имя устанавливается в sName, а ругается на то, что obj как String объявлена. Для For Each тип должен быть объект
Я конечно весь код не прогонял, но вот эта запись
ActiveWorkbook.sName. странноватая, должно быть как-то так ActiveWorkbook.worksheets(sName).


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com

Сообщение отредактировал UdikПятница, 06.01.2017, 19:31

 

Ответить

lapin9126

Дата: Пятница, 06.01.2017, 19:33 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Спасибо, придётся создавать новую тему, чтобы не получить предупреждение, за второй вопрос в этой теме. :(

 

Ответить

Wasilich

Дата: Пятница, 06.01.2017, 19:36 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

Новогодние странности. :) Если по теме, проверьте код:
[vba]

Код

Sub naimlist()
Dim ИмяАктивногоЛиста$
ИмяАктивногоЛиста = ActiveSheet.Name
MsgBox ИмяАктивногоЛиста
End Sub

[/vba]

Сообщение отредактировал WasilichПятница, 06.01.2017, 19:40

 

Ответить

lapin9126

Дата: Пятница, 06.01.2017, 19:39 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

S
ub naimlist()
Dim ИмяАктивногоЛиста$
ИмяАктивногоЛиста = ActiveSheet.Name
MsgBox ИмяАктивногоЛиста
End Sub

Макрос рабочий имя определяет. Но как его прикрутить к моему случаю?

 

Ответить

Wasilich

Дата: Пятница, 06.01.2017, 19:52 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

Так ведь определяет же!
[vba]

Код

Sub naimlist()
  Dim sName$
  sName = ActiveWorkbook.ActiveSheet.Name ‘ имя активного листа
  MsgBox sName
End Sub

[/vba] А дальше, Ваш код не по теме.

Сообщение отредактировал WasilichПятница, 06.01.2017, 20:14

 

Ответить

nilem

Дата: Пятница, 06.01.2017, 19:56 |
Сообщение № 11

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

а вот так не подойдет?:
[vba]

Код

Sub Сортировка_2()
With ActiveSheet.ListObjects(1)
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range.Columns(9), SortOn:= _
                         xlSortOnValues, Order:=xlAscending, CustomOrder:= _
                         «КУПЛЮ :,ПРОДАМ :,АРЕНДА :,НЕДВИЖИМОСТЬ :,ТРАНСПОРТ :,УСЛУГИ :,РАБОТА :,РАЗНОЕ :» _
                         , DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

[/vba]


Яндекс.Деньги 4100159601573

 

Ответить

lapin9126

Дата: Пятница, 06.01.2017, 20:03 |
Сообщение № 12

Группа: Пользователи

Ранг: Новичок

Сообщений: 38


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

nilem, Спасибо то что нужно, «Краткость сестра таланта» hands

 

Ответить

Wasilich

Дата: Пятница, 06.01.2017, 20:13 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1232


Репутация:

326

±

Замечаний:
0% ±


2003

[offtop]Короче, тема не в теме.
Хорошо что nilem экстрасенс. :D [/offtop]

 

Ответить

Хитрости »

4 Март 2015              53406 просмотров


Как получить имя листа формулой

Задача: записать в отдельной ячейке или внутри формулы имя текущего листа(т.е. того, в котором сама функция).

В принципе это очень легко сделать простейшей функцией пользователя:

'---------------------------------------------------------------------------------------
' 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
ссылки
статистика

Функция ЛИСТ в Excel возвращает числовое значение, соответствующее номеру листа, на который указывает ссылка, переданная функции в качестве параметра.

Функции ЛИСТ и ЛИСТЫ в Excel: описание аргументов и синтаксиса

Функция ЛИСТЫ в Excel возвращает числовое значение, которое соответствует количеству листов, на которые предоставлена ссылка.

Примечания:

  1. Обе функции полезны для использования в документах, содержащих большое количество листов.
  2. Лист в Excel – это таблица из всех ячеек, отображаемых на экране и находящихся за его пределами (всего 1 048 576 строк и 16 384 столбца). При отправке листа на печать он может быть разбит на несколько страниц. Поэтому нельзя путать термины «лист» и «страница».
  3. Количество листов в книге ограничено лишь объемом ОЗУ ПК.

Функция ЛИСТ имеет в своем синтаксисе всего 1 аргумент и то не обязательный для заполнения: =ЛИСТ(значение).

  • значение – необязательный аргумент функции, который содержит текстовые данные с названием листа либо ссылку, для которой требуется установить номер листа. Если данный параметр не указан, функция вернет номер листа, в одной из ячеек которого она была записана.

Примечания:

  1. При работе функции ЛИСТ учитываются все листы, которые являются видимыми, скрытыми и очень скрытыми. Исключениями являются диалоги, макросы и диаграммы.
  2. Если аргументом функции является текстовое значение, которое не соответствует названию ни одного из листов, содержащихся в книге, будет возвращена ошибка #НД.
  3. Если в качестве аргумента функции было передано недействительное значение, результатом ее вычислений будет являться ошибка #ССЫЛКА!.
  4. В рамках объектной модели (иерархия объектов на VBA, в которой Application является главным объектом, а Workbook, Worksheer и т. д. – дочерними объектами) функция ЛИСТ недоступна, поскольку она содержит схожую функцию.

Функция листы имеет следующий синтаксис: =ЛИСТЫ(ссылка).

  • ссылка – объект ссылочного типа, для которого требуется определить количество листов. Данный аргумент является необязательным. Если данный параметр не указан, функция вернет количество листов, содержащихся в книге, на одном из листов которой она была записана.

Примечания:

  1. Данная функция подсчитывает количество всех скрытых, очень скрытых и видимых листов, за исключением диаграмм, макросов и диалогов.
  2. Если в качестве параметра была передана недействительная ссылка, результатом вычислений является код ошибки #ССЫЛКА!.
  3. Данная функция недоступна в объектной модели в связи с наличием там схожей функции.



Как получить имя листа формулой в Excel

Пример 1. При выполнении расчетной работы студент использовал программу Excel, в которой создал книгу из несколько листов. Для собственного удобства, студент решил в ячейках A2 и B2 каждого листа выводить данные о названии листа и его порядковом номере соответственно. Для этого он использовал следующие формулы:

Имя ЛИСТа.

Описание аргументов для функции ПСТР:

  1. ЯЧЕЙКА(«имяфайла») – функция, возвращающая текст, в котором функция ПСТР выполняет поиск заданного количества символов. В данном случае вернется значение «C:UserssoulpDesktop[ЛИСТ_ЛИСТЫ.xlsx]Статические расчеты», где после символа «]» находится искомый текст – название листа.
  2. НАЙТИ(«]»;ЯЧЕЙКА(«имяфайла»))+1 – функция, возвращающая номер позиции символа «]», единица добавлена с той целью, чтобы функция ПСТР не учитывала символ «]».
  3. 31 – максимальное количество символов в названии листа.

=ЛИСТ() – данная функция без параметра вернет номер текущего листа. В результате ее вычисления получим количество листов в текущей книге.

Примеры использования функции ЛИСТ и ЛИСТЫ

Пример 2. В книге Excel содержится несколько листов. Необходимо:

  1. Вернуть номер текущего листа.
  2. Вернуть номер листа с названием «Статические_расчеты».
  3. Вернуть номер листа «Динамические_расчеты», если его ячейка A3 содержит значение 0.

Внесем данные в таблицу:

Внесем данные.

Далее составим формулы для всех 4-х условий:

  • для условия №1 используем следующую формулу: =ЛИСТ()
  • для условия №2 введем формулу: =ЛИСТ(«Статические_расчеты»)
  • для условия №3 запишем формулу:

Функция ЕСЛИ выполняет проверку условия равенства значения, хранящегося в ячейке A3 листа Динамические_расчеты, нулю или пустому значению.

В результате получим:

В результате.

Обработка информации о листах книги по формуле Excel

Пример 3. В книге Excel содержится несколько листов. Необходимо определить общее количество листов, а также число листов, содержащихся между листами «Статические_расчеты» и «Экономические_расчеты».

Исходная таблица имеет вид:

Исходная таблица.

Общее количество листов вычислим по формуле:

Для определения количества листов, содержащихся между двумя указанными листами, запишем формулу:

  1. Статические_расчеты:Экономические_расчеты!A2 – ссылка на ячейку A2 диапазона листов между «Статические_расчеты» и «Экономические_расчеты» включая эти листы.
  2. Для получения искомого значения было вычтено число 2.

В результате получим следующее:

Формула выводит информацию о листах.

Скачать примеры функций ЛИСТ и ЛИСТЫ в формулах Excel

Формула выводит подробную информацию по данным о листах в определенном диапазоне их расположения в рабочей книге Excel.


Определим имя листа с помощью функции

ЯЧЕЙКА()

.

Имя листа можно определить с помощью функции

ЯЧЕЙКА()

, записав формулу (см.

файл примера

):

=ПРАВСИМВ(ЯЧЕЙКА(«имяфайла»);ДЛСТР(ЯЧЕЙКА(«имяфайла»))-ПОИСК(«]»;ЯЧЕЙКА(«имяфайла»)))

Если формула вводится в новую книгу, то ее сначала нужно сохранить. После сохранения, возможно, потребуется нажать клавишу

F9

(Вкладка

Формулы

, Группа

Вычисление

,

Пересчет

).

Формула вернет имя листа, содержащего ячейку с вышеуказанной формулой. Если требуется определить имя другого листа, то можно использовать туже функцию

ЯЧЕЙКА()

, но с аргументом «адрес».

Для этого нужно, чтобы второй аргумент содержал ссылку на ячейку другого листа, имя которого и будет определено. Если формула

=ЯЧЕЙКА(«адрес»;лист2!A1)

находится на

листе1

в ячейке

B1

, то имя листа (

Лист2

) можно определить по формуле:


=ПСТР(B1;ПОИСК(«]»;B1)+1;ДЛСТР(B1)-ПОИСК(«]»;B1)-5)

В этом случае имя листа не должно состоять только из цифр, т.к. если в качестве названия листа использовано число, то функция

ЯЧЕЙКА()

возвращает название книги и листа в апострофах (‘) и формула вернет неправильный результат. Справиться с этим поможет формула

=ПОДСТАВИТЬ(C1;»‘»;»»)

, которая удалит символ апострофа.

Также предполагается, что имя файла не содержит символа

закрывающая квадратная скобка

( ] ).


ВНИМАНИЕ

!

Иногда, когда открыто несколько книг, функция

ЯЧЕЙКА()

может работать некорректно. Для восстановления работоспособности формулы нужно нажать клавишу

F9

(

).


ПРИМЕНЕНИЕ:

При изменении имени листа, все ссылки в формулах автоматически обновятся и будут продолжать работать. Исключение составляет функция

ДВССЫЛ()

, в которой имя листа может фигурировать в текстовой форме

ДВССЫЛ(«Лист1!A1»)

. В статье

Определение имени листа для использования в функции ДВССЫЛ()

показано как использовать функцию

ЯЧЕЙКА()

, чтобы сохранить работоспособность формулы с функцией

ДВССЫЛ()

.

Как в Экселе получить имя текущего листа ?

Модератор:Naeel Maqsudov

Zigi

Сообщения:32
Зарегистрирован:18 янв 2005, 16:45
Откуда:СПб

Добрый день.
Подскажите, плиз, как с помощью какой формулы можно получить имя текущего листа?
Где то далеко в голове сидит, что должна быть стандартная формула, которая позволяет получить всю информацию о файле (путь файла, название файла, имя листа, кол-во листов в книге и т.д.), но никак не могу ее вспомнить :( ((

Pavel55

Сообщения:405
Зарегистрирован:20 окт 2006, 11:40
Откуда:Moscow

19 фев 2008, 18:56

формула возвращает имя листа (файл обязательно должен быть сохранён)

=ПСТР(ЯЧЕЙКА(«имяфайла»;A1);НАЙТИ(«]»;ЯЧЕЙКА(«имяфайла»;A1))+1;99999)

Lame

Сообщения:24
Зарегистрирован:25 дек 2007, 10:46

20 фев 2008, 11:02

С VBA можно еще так:

Sub WorksheetName()

Range(«A1»).Value = ActiveSheet.Name

End Sub

Аватара пользователя

VictorM

Сообщения:787
Зарегистрирован:23 окт 2006, 01:44
Откуда:Lugansk, Ukraine
Контактная информация:

20 фев 2008, 11:18

С VBA можно еще так:

можно, только вопрос все таки стоял:

как с помощью какой формулы можно получить имя текущего листа

и Pavel55 дал исчерпывающий ответ ;)

Zigi

Сообщения:32
Зарегистрирован:18 янв 2005, 16:45
Откуда:СПб

20 фев 2008, 11:51

Всем спасибо! ;)
Вопрос был именно в использовании стандартной формулы.

Аватара пользователя

Aent

Сообщения:1108
Зарегистрирован:01 окт 2006, 14:52
Откуда:Saratov,Russia
Контактная информация:

22 фев 2008, 03:39

Pavel55, Zigi,
а если определить имя АКТИВНЫЙЛИСТ как =ПОЛУЧИТЬ.ДОКУМЕНТ(76)
то можно будет получать имя активного листа даже для не сохранённых рабочих книг.
ПОЛУЧИТЬ.ДОКУМЕНТ(76) это функция XLM. Явно использовать её на рабочем листе нельзя. Но можно присвоить такое значение имени.
Возвращается: [имякниги]имялиста

Понравилась статья? Поделить с друзьями:
  • Получить имя модуля в excel
  • Пользователь microsoft excel 2019 2016 russian
  • Пользователь microsoft word 2010 тест ответы
  • Получить имя колонки в excel
  • Пользование программой excel для начинающих