+ Ответить в теме
Показано с 1 по 10 из 10

Тема: Названия листов в Эксель на этом листе

  1. #1
    programmer Brat2005 is on a distinguished road
    Регистрация
    26.09.2005
    Сообщений
    61
    Вес репутации
    14

    По умолчанию Названия листов в Эксель на этом листе

    Можно ли с помощью формулы сделать так, чтобы в одной из ячеек на листе было название этого листа, а при переименовании его (листа), оно (название) соответственно менялось в этой ячейке?

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    coder PC is on a distinguished road
    Регистрация
    04.05.2005
    Адрес
    Moscow
    Сообщений
    29
    Вес репутации
    14

    По умолчанию

    Да, можно.
    Функция ЯЧЕЙКА("filename";A1) дает полную информацию о файле, включая название листа.

  4. #3
    coder PC is on a distinguished road
    Регистрация
    04.05.2005
    Адрес
    Moscow
    Сообщений
    29
    Вес репутации
    14

    По умолчанию

    Если Вам нужно чтобы отображалось только название листа, можно использовать несколько функций.
    =ПСТР(ЯЧЕЙКА("filename";A1);НАЙТИ(" xls";ЯЧЕЙКА("filename";A1))+4;100)

    Если кто-то знает как это сделать проще, будет просто здорово!

  5. #4
    programmer Brat2005 is on a distinguished road
    Регистрация
    26.09.2005
    Сообщений
    61
    Вес репутации
    14

    По умолчанию

    Да, но немного не так )
    ПСТР(ЯЧЕЙКА("filename";A1);НАЙТИ("]";ЯЧЕЙКА("filename";A1))+1;32)
    Это как раз и будет имя листа )

  6. #5
    programmer Brat2005 is on a distinguished road
    Регистрация
    26.09.2005
    Сообщений
    61
    Вес репутации
    14

    По умолчанию

    ) блиннн.... вместе сказали )
    просто ищется не 3 буквы, а 1 символ, а так все один к одному! )
    и еще не "100", а всего лишь 32, т.к. длина имени листа, по моим данным, не более 31 символа (1 взят с "запасом")

  7. #6
    system architect pashulka will become famous soon enough pashulka will become famous soon enough
    Регистрация
    24.11.2004
    Возраст
    77
    Сообщений
    831
    Вес репутации
    16

    По умолчанию

    Полагаю будет уместным добавить, что все вышеопубликованные формулы можно использовать только в сохранённой рабочей книге, так как, до тех пор пока Вы не сохраните свою новую рабочую книгу, =ЯЧЕЙКА("ИмяФайла";A1) будет = "" и следовательно вместо имени рабочего листа Вы получите значение ошибки.

  8. #7
    programmer tolikt is on a distinguished road
    Регистрация
    29.10.2005
    Адрес
    NewVasюbirsk
    Сообщений
    93
    Вес репутации
    14

    По умолчанию Можно ещё создать пользовательскую функцию

    В модуль VBA своей книги (или книги Personal.xls) вставить код:

    Function ИмяЛиста(ByRef MyRange As Range) As String
    Application.Volatile
    ИмяЛиста = MyRange.Parent.Name
    End Function

    и в нужной ячейке (напр., А1) вставить формулу:
    =ИмяЛиста(A1)
    или
    =PERSONAL.XLS!ИмяЛиста(A1)


    Плюсы такого способа:
    - работает в несохранённой книге
    - сама формула выглядит короче (обычно имя листа нужно не просто само по себе, а в составе сложной формулы; и нагромождение лишних функций может только лишний раз запутать)
    - работает более корректно, т. к. если формула =ПСТР(ЯЧЕЙКА("filename";A1);НАЙТИ("]";ЯЧЕЙКА("filename";A1))+1;32) ссылается на книгу, которая находится в папке с экзотическим названием типа "My]Folder", то имя листа отобразится неверно.

    Минусы (при переносе книги на другой компьютер):
    - если функция в модуле VBA самой книги, то при открытии книги появляется предупреждение о наличии макросов, и пользователь, который не в курсе дела, может отказаться от выполнения макросов и в ячейке появляется ошибка #ИМЯ?
    - если функция в модуле VBA книги Personal.xls, то при переносе книги на другой компьтер, где в его Personal.xls нет данной функции, появляется ошибка #ИМЯ? (как вариант - в другом Personal.xls функция ИмяЛиста() есть, но она совсем другая :-), тогда и результат будет не тот, что ожидался)

  9. #8
    system architect pashulka will become famous soon enough pashulka will become famous soon enough
    Регистрация
    24.11.2004
    Возраст
    77
    Сообщений
    831
    Вес репутации
    16

    По умолчанию

    Что касается так называемых минусов получения имени, с помощью формул, т.е. без применения VBA :
    - получить имя рабочего листа можно даже в несохранённой книги, правда с помощью других функций.
    - длина формулы … но это вообще несерьёзно :P , даже если подобная формула входит в состав "сложной" формулы, то ничто не мешает "хранить" её в отдельной ячейке и ссылаться на эту ячейку. Этот вариант удобен тем, что позволяет визуально определить корректность определения имени. Ну а если вариант с дополнительной ячейкой неприемлен, то можно использовать именованную формулу и решить проблему так называемой длиной формулы.
    - что касается корректности определения имени, то можно найти последний символ ], можно искать расширение .xl (см. пример PC, хотя этот вариант всё-таки может возвратить некорректный результат) или использовать другие функции, которым в принципе не нужно искать этот символ.

    Что касается пользовательской функции, то можно получить имя рабочего листа, без использования ячейки в качестве аргумента (естественно, что ActiveSheet.Name даже не рассматривается)

  10. #9
    Nasty4 is on a distinguished road
    Регистрация
    12.12.2017
    Возраст
    30
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Названия листов в Эксель на этом листе

    Подскажите, пожалуйста. У меня похожий вопрос. Вот формула =СЧЁТЕСЛИ('1'!$K$4:$K$958;0) и есть 50 листов под названием от 1 и до 50. Что можно сделать, чтоб вручную не вводить 1, 2, 3, и так до 50.

  11. #10
    system architect pashulka will become famous soon enough pashulka will become famous soon enough
    Регистрация
    24.11.2004
    Возраст
    77
    Сообщений
    831
    Вес репутации
    16

    По умолчанию Re: Названия листов в Эксель на этом листе

    Nasty4, Если имена листов могут меняться, то выведите их(имена листов) с помощью формул, например, в столбце A (начиная с первой ячейки, т.е. A1), а затем в столбце B введите, например :

    Код :
    1. =СЧЁТЕСЛИ(ДВССЫЛ("'"&A1&"'!$K$4:$K$958");0)

    а общее количество посчитайте с помощью функции =СУММ(), и в результате Вы получите небольшую таблицу, где будет наглядно видно количество 0 по каждому из листов и их общую сумму.

    Если же наглядность не нужна, то, imho, проще написать пользовательскую функцию или макрос.

+ Ответить в теме

Похожие темы

  1. Переопределение названия меню
    Кто-нибудь может подсказать каим образом можно переопределить название меню (по умолчанию: Menu)? Обкатываю приложение в J2ME Wireless Toolkit так...
    от AlexJus в разделе Java
  2. Названия полей записей
    Интересный вопрос. Можно ли как нибудь узнать (в виде строки) название элемента записи... т.е. Type TRec = record Name1, Name2, ...
    от LAngel в разделе Delphi и Pascal
  3. Динамическое изменение странички или что-то в этом роде
    Можно ли сделать так(с помощью JavaScript(желательно) или PHP), чтобы, скажем, при щелчке на кнопке перед посетителем появлялся новый слой,...
    от psix в разделе JScript, VBScript, DHTML...
  4. Frame или что-то в этом духе
    Вообщем добавил я Frame. Поставил на него кнопку CommandButton1. А как написать событие на эту кнопку, я не знаю +( Помогите ... +( Или что...
    от Hamber в разделе MS Office и VB(A).
  5. Как задавать вопросы в этом разделе
    Если Вы хотите, чтобы на Ваш вопрос смогли ответить посетители нашего форума, соблюдайте, пожалуйста, простые правила при составлении вопроса. ...
    от Andy в разделе Ассемблер

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения