Excel обращение к листу по индексу

Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.

Обращение к рабочим листам

Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.

Обращение к рабочему листу в коде VBA Excel:

‘По уникальному имени

УникИмяЛиста

‘По индексу

Worksheets(N)

‘По имени листа на ярлычке

Worksheets(«Имя листа»)

  • УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
  • N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
  • Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

Количество листов в рабочей книге Excel определяется так:

‘В активной книге

Worksheets.Count

‘В любой открытой книге,

‘например, в «Книга1.xlsm»

Workbooks(«Книга1.xlsm»).Worksheets.Count

Переименование листов

В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

expression.Name

где expression — переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

Допустим, у нас есть лист с уникальным именем (Name) — Лист1, индексом — 1 и именем Name — МойЛист, которое необходимо заменить на имя — Реестр.

Лист1.Name = «Реестр»

Worksheets(1).Name = «Реестр»

Worksheets(«МойЛист»).Name = «Реестр»

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression — переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False — лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden — лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True — лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Примеры:

Лист1.Visible = xlSheetHidden

Лист2.Visible = 1

Worksheets(Worksheets.Count).Visible = xlVeryHidden

Worksheets(«МойЛист»).Visible = True

Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.

Бывает у вас такое: смотришь на человека и думаешь «что за @#$%)(*?» А потом при близком знакомстве оказывается, что он знает пять языков, прыгает с парашютом, имеет семеро детей и черный пояс в шахматах, да и, вообще, добрейшей души человек и умница?

Так и в Microsoft Excel: есть несколько похожих функций, про которых фраза «внешность обманчива» работает на 100%. Одна из наиболее многогранных и полезных — функция ИНДЕКС (INDEX). Далеко не все пользователи Excel про нее знают, и еще меньше используют все её возможности. Давайте разберем варианты ее применения, ибо их аж целых пять.

Вариант 1. Извлечение данных из столбца по номеру ячейки

Самый простой случай использования функции ИНДЕКС – это ситуация, когда нам нужно извлечь данные из одномерного диапазона-столбца, если мы знаем порядковый номер ячейки. Синтаксис в этом случае будет:

=ИНДЕКС(Диапазон_столбец; Порядковый_номер_ячейки)

Простой вариант ИНДЕКС

Этот вариант известен большинству продвинутых пользователей Excel. В таком виде функция ИНДЕКС часто используется в связке с функцией ПОИСКПОЗ (MATCH), которая выдает номер искомого значения в диапазоне. Таким образом, эта пара заменяет легендарную ВПР (VLOOKUP):

ИНДЕКС в связке с ПОИСКПОЗ

… но, в отличие от ВПР, могут извлекать значения левее поискового столбца и номер столбца-результата высчитывать не нужно.

Вариант 2. Извлечение данных из двумерного диапазона

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

=ИНДЕКС(Диапазон; Номер_строки; Номер_столбца)

ИНДЕКС 2 вариант

Т.е. функция извлекает значение из ячейки диапазона с пересечения строки и столбца с заданными номерами.

Легко сообразить, что с помощью такой вариации ИНДЕКС и двух функций ПОИСКПОЗ можно легко реализовать двумерный поиск:

Двумерный поиск с ИНДЕКС и ПОИСКПОЗ

Вариант 3. Несколько таблиц

Если таблица не одна, а их несколько, то функция ИНДЕКС может извлечь данные из нужной строки и столбца именно заданной таблицы. В этом случае используется следующий синтаксис:

=ИНДЕКС((Диапазон1;Диапазон2;Диапазон3); Номер_строки; Номер_столбца; Номер_диапазона

ИНДЕКС с неск.таблицами

Обратите особое внимание, что в этом случае первый аргумент – список диапазонов — заключается в скобки, а сами диапазоны перечисляются через точку с запятой.

Вариант 4. Ссылка на столбец / строку

Если во втором варианте использования функции ИНДЕКС номер строки или столбца задать равным нулю (или просто не указать), то функция будет выдавать уже не значение, а ссылку на диапазон-столбец или диапазон-строку соответственно:

ИНДЕКС выдающая ссылку на целую строку-столбец

Обратите внимание, что поскольку ИНДЕКС выдает в этом варианте не конкретное значение ячейки, а ссылку на диапазон, то для подсчета потребуется заключить ее в дополнительную функцию, например СУММ (SUM), СРЗНАЧ (AVERAGE) и т.п.

Вариант 5. Ссылка на ячейку

Общеизвестно, что стандартная ссылка на любой диапазон ячеек в Excel выглядит как Начало-Двоеточие-Конец, например A2:B5. Хитрость в том, что если взять функцию ИНДЕКС в первом или втором варианте и подставить ее после двоеточия, то наша функция будет выдавать уже не значение, а адрес, и на выходе мы получим полноценную ссылку на диапазон от начальной ячейки до той, которую нашла ИНДЕКС:

ИНДЕКС как часть ссылки

Нечто похожее можно реализовать функцией СМЕЩ (OFFSET), но она, в отличие от ИНДЕКС, является волатильной, т.е. пересчитывается каждый раз при изменении любой ячейки листа. ИНДЕКС же работает более тонко и запускает пересчет только при изменении своих аргументов, что ощутимо ускоряет расчет в тяжелых книгах по сравнению со СМЕЩ.

Один из весьма распространенных на практике сценариев применения ИНДЕКС в таком варианте — это сочетание с функцией СЧЁТЗ (COUNTA), чтобы получить автоматически растягивающиеся диапазоны для выпадающих списков, сводных таблиц и т.д.

Ссылки по теме

  • Трехмерный поиск данных по нескольким листам (ВПР 3D)
  • Поиск и подстановка по нескольким условиям (ВПР по нескольким столбцам)
  • Подстановка данных из одной таблицы в другую с помощью функции ВПР (VLOOKUP)

Как обратится по порядковому номеру листа

Ghenek

Дата: Вторник, 13.06.2017, 12:35 |
Сообщение № 1

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

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

Сообщений: 21


Репутация:

0

±

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


Excel 2013

Здравствуйте. Подскажите как присвоить ячейке значение ячейки из другого листа обратившись к листу по порядковому номеру (без использования макросов)?

 

Ответить

Michael_S

Дата: Вторник, 13.06.2017, 12:42 |
Сообщение № 2

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

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

Сообщений: 2012


Репутация:

373

±

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


Excel2016

без макросов — никак.

 

Ответить

Nic70y

Дата: Вторник, 13.06.2017, 12:52 |
Сообщение № 3

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

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

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


Excel 2010

листы то как именуются?
как попало?
можно ли составить список листов вручную?
и еще куча вопросов.


ЮMoney 41001841029809

 

Ответить

Ghenek

Дата: Вторник, 13.06.2017, 12:59 |
Сообщение № 4

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

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

Сообщений: 21


Репутация:

0

±

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


Excel 2013

Смысл в следующем, мне дают таблицы, первые листы всегда называется по разному, но их структура всегда одинаковая.

Я хотел бы создать вторую страницу и на ней сделать необходимые мне вычисления.
А потом в следующих файлах просто вставлять эту вторую страницу.

 

Ответить

китин

Дата: Вторник, 13.06.2017, 13:01 |
Сообщение № 5

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Nic70y

Дата: Вторник, 13.06.2017, 13:08 |
Сообщение № 6

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

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

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


Excel 2010

тода без макросов низя


ЮMoney 41001841029809

 

Ответить

Ghenek

Дата: Вторник, 13.06.2017, 13:17 |
Сообщение № 7

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

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

Сообщений: 21


Репутация:

0

±

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


Excel 2013

Как вариант, может пройдёт такой фокус если я заранее переименую первую страницу в тоже название что и в исходнике?

 

Ответить

AlexM

Дата: Вторник, 13.06.2017, 13:43 |
Сообщение № 8

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

Ранг: Участник клуба

Сообщений: 4257


Репутация:

1046

±

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


Excel 2003

Макрофункцией можно.

К сообщению приложен файл:

___.xls
(24.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.

 

Ответить

sboy

Дата: Вторник, 13.06.2017, 13:48 |
Сообщение № 9

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

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

Добрый день.
можно с помощью макрофункции

Код

=ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ(1)

применить формулу для обращения к первому листу в книге

Код

=ДВССЫЛ(СЖПРОБЕЛЫ(ПРАВБ(ПОДСТАВИТЬ(ИНДЕКС(листы;1);»]»;ПОВТОР(» «;99));99))&»!»&ЯЧЕЙКА(«адрес»;C1))

К сообщению приложен файл:

1476172.xlsm
(10.2 Kb)


Яндекс: 410016850021169

 

Ответить

Nic70y

Дата: Вторник, 13.06.2017, 14:21 |
Сообщение № 10

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

Ранг: Экселист

Сообщений: 8132


Репутация:

1998

±

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


Excel 2010

Код

=ДВССЫЛ(«‘»&ИНДЕКС(листы;1)&»‘!»&АДРЕС(СТРОКА();3))


ЮMoney 41001841029809

 

Ответить

sboy

Дата: Вторник, 13.06.2017, 14:52 |
Сообщение № 11

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

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

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


Excel 2010

Nic70y, О! точно, можно же не обрезать название файла, только добавить столбец относительный!

Код

=ДВССЫЛ(«‘»&ИНДЕКС(листы;1)&»‘!»&АДРЕС(СТРОКА();СТОЛБЕЦ()))


Яндекс: 410016850021169

 

Ответить

zs

Дата: Вторник, 13.06.2017, 20:02 |
Сообщение № 12

Группа: Заблокированные

Ранг: Участник

Сообщений: 87


Репутация:

-19

±

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


Excel 2003

Код

=ДВССЫЛ(АДРЕС(2;4;4;1;B2);ИСТИНА)

где В2 название листа из выпадающего списка листов

 

Ответить

Ghenek

Дата: Суббота, 17.06.2017, 12:31 |
Сообщение № 13

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

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

Сообщений: 21


Репутация:

0

±

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


Excel 2013

Я в шоке. Такие громадные формулы, толщиной по 20-30 символов…
Как вы всём этом разбираетесь =).

Спасибо большое!

 

Ответить

AndreTM

Дата: Суббота, 17.06.2017, 13:16 |
Сообщение № 14

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

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

Сообщений: 1762


Репутация:

498

±

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


2003 & 2010

Такие громадные формулы, толщиной по 20-30 символов…

Разве это много?

Вот это вот — «много»

Такие громадные формулы, толщиной по 20-30 символов…

Разве это много?

Вот это вот — «много» :)

Код

=ПОДСТАВИТЬ(ПРОПНАЧ(ИНДЕКС(n_4;ПСТР(ТЕКСТ(A3;n0);1;1)+1)&ИНДЕКС(n0x;ПСТР(ТЕКСТ(A3;n0);2;1)+1;ПСТР(ТЕКСТ(A3;n0);3;1)+1)&ЕСЛИ(-ПСТР(ТЕКСТ(A3;n0);1;3);»миллиард»&ВПР(ПСТР(ТЕКСТ(A3;n0);3;1)*И(ПСТР(ТЕКСТ(A3;n0);2;1)-1);мил;2);»»)&ИНДЕКС(n_4;ПСТР(ТЕКСТ(A3;n0);4;1)+1)&ИНДЕКС(n0x;ПСТР(ТЕКСТ(A3;n0);5;1)+1;ПСТР(ТЕКСТ(A3;n0);6;1)+1)&ЕСЛИ(-ПСТР(ТЕКСТ(A3;n0);4;3);»миллион»&ВПР(ПСТР(ТЕКСТ(A3;n0);6;1)*И(ПСТР(ТЕКСТ(A3;n0);5;1)-1);мил;2);»»)&ИНДЕКС(n_4;ПСТР(ТЕКСТ(A3;n0);7;1)+1)&ИНДЕКС(n1x;ПСТР(ТЕКСТ(A3;n0);8;1)+1;ПСТР(ТЕКСТ(A3;n0);9;1)+1)&ЕСЛИ(-ПСТР(ТЕКСТ(A3;n0);7;3);ВПР(ПСТР(ТЕКСТ(A3;n0);9;1)*И(ПСТР(ТЕКСТ(A3;n0);8;1)-1);тыс;2);»»)&ИНДЕКС(n_4;ПСТР(ТЕКСТ(A3;n0);10;1)+1)&ИНДЕКС(n0x;ПСТР(ТЕКСТ(A3;n0);11;1)+1;ПСТР(ТЕКСТ(A3;n0);12;1)+1));»z»;» «)&ЕСЛИ(ОТБР(ТЕКСТ(A3;n0));»»;»Ноль «)&»рубл»&ВПР(ОСТАТ(МАКС(ОСТАТ(ПСТР(ТЕКСТ(A3;n0);11;2)-11;100);9);10);{0;»ь «:1;»я «:4;»ей «};2)&ПРАВСИМВ(ТЕКСТ(A3;n0);2)&» копе»&ВПР(ОСТАТ(МАКС(ОСТАТ(ПРАВСИМВ(ТЕКСТ(A3;n0);2)-11;100);9);10);{0;»йка»:1;»йки»:4;»ек»};2)

Причем формула вполне себе востребованная


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

попробую…

у листа рабочей книги (объекты worksheet, chart) есть свойства index, name, codename
index — текущий номер листа по порядку (включая скрытые), может меняться пользователем при изменении порядка и количества листов;
name — то, что отбражается на ярлычке, может меняться пользователем (конечно. если книга не защищена);
codename — «внутреннее» имя листа, «обычному» пользователю невидимое и недоступное, поэтому не может меняться пользователем.
кроме того, codename является свойством read-only и через VBA также не может быть изменено.

*)
в VBE в окне проекта в списке объектов сначала указаны кодовые имена листов, а затем, в скобках, «обычные» имена.

«обычные» и «необычные» («кодовые») имена могут совпадать, могут — нет.
но в пределах каждого из множеств имён имя должно быть уникальным (без учета регистра символов)

изменить codename можно через интерфейс VBE — ЛКМ по имени листа в списке объектов — F4 — свойство (Name) — именно которое со скобками.

доступ к отдельному листу возможен:
— по индексу
— по «обычному» имени
и для того, и для другого, используется свойство item коллекций sheets, worksheets, charts объекта workbook:
sheets.item(2)
charts.item(«диаграмма 5»)

и т.п.

т.к. свойство item является «умолчальным», то допустимы и конструкции
sheets(2)
charts(«диаграмма 5»)

прямого доступа по «кодовому» имени листа через коллекцию — нет.
но, зная codename листа на этапе разработки проекта (макроса). можно прямо это имя написать в качестве идентификатора листа:
лист1.[a1] — обращение к ячейке A1 листа с

кодовым именем

«лист1» («Лист1» и т.п.)

если же нужно получить лист по кодовому имени, но на этапе разработки оно было неизвестно, то примерно так:

Visual Basic
1
2
3
4
5
6
7
function getSheetByCodename(sCodeName as string, optional wb as workbook=nothing) as sheet
  if wb is nothing then set wb=activeworkbook
  for each sh in wb.sheets
    if sh.codename=sCodeName then set getSheetByCodename=sh: exit function
  next
  set getSheetByCodename=nothing
end function

зачем оно всё надо — надеюсь, понятно?

_________________________

*) однако, может: Как узнать Item листа в книге Excel

Многие пользователи Excel обычно переименовывают имя рабочего листа по умолчанию в нужное. Но во многих случаях им нужно ссылаться на рабочий лист на основе его порядкового номера, а не настоящего имени. Как этого добиться? Вы можете попробовать метод в статье.

Справочный лист по номеру индекса вместо имени с пользовательской функцией


Справочный лист по номеру индекса вместо имени с пользовательской функцией

Чтобы ссылаться на рабочий лист по порядковому номеру, а не по имени в Excel, сделайте следующее.

1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.

Код VBA: справочный лист по номеру индекса в Excel

Function SHEETNAME(number As Long) As String
    SHEETNAME = Sheets(number).Name
End Function

3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.

Заметки:

1. Если вам нужно указать имя определенного листа с его номером, выберите пустую ячейку и введите формулу. = ИМЯ ЛИСТА (1) прямо в панель формул, затем нажмите клавишу Enter. Смотрите скриншот:

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

=INDIRECT(«‘»&SHEETNAME(1) &»‘!A1»)

3. И если вы хотите суммировать определенный столбец на листе на основе его порядкового номера, примените эту формулу.

=SUM(INDIRECT(«‘»&SHEETNAME(1) &»‘!C2:C7»))


Статьи по теме:

  • Как ссылаться на формат и значение из другой ячейки в Excel?
  • Как сослаться или связать значение в закрытом / закрытом файле книги Excel?
  • Как удалить все ссылки на формулы, но сохранить значения в ячейках в Excel?
  • Как сохранить постоянную ссылку на ячейку формулы в Excel?
  • Как указать имя вкладки в ячейке в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (4)


Оценок пока нет. Оцените первым!

Понравилась статья? Поделить с друзьями:
  • Excel обратный порядок столбцов
  • Excel обратный порядок в ячейке
  • Excel обратной геодезической задачи
  • Excel обратное преобразование фурье
  • Excel обратная функция двссыл