Как в Excel указать ссылки на одну и ту же ячейку, но с разных листов (Функция ДВССЫЛ)
Один из читателей нашего сайта SirExcel задал вопрос, который может встречаться очень часто. Вопрос заключался в следующем “Как сделать так, чтобы на одном листе показывалась информация из определенной ячейки к примеру $A$1 но с каждого листа из книги? Листов очень много надо сделать сводный список содержимого определенной ячейки со всех листов.”
Я как раз собирался написать о том, как работает функция ДВССЫЛ, почему бы не рассмотреть ее именно на этом примере.
Итак, мы имеем файл Excel, в котором много листов. Давайте рассмотрим простой пример, где названия листов у нас не менялись. То есть у нас есть Лист1, Лист2, Лист3 и так далее.
Допустим, что на каждом листе (Лист1-Лист5) у нас есть данные по выручке 5 различных магазинов в виде одинаковых таблиц данных.
На листе 6 есть результирующая таблица, где нам необходимо заполнить ее данными, взяв их со всех листов.
Таким образом, чтобы заполнить данные за январь нам необходимо взять данные по выручке магазинов, находящихся в ячейке B2, но на 5 различных листов.
Конечно, в нашем примере это можно было бы сделать в ручную, указав просто ссылки на соответствующие значения, но если листов очень много, или данных очень много, то вручную это сделать будет очень затруднительно.
Существует различные способы решить данную задачу, например, с помощью простенького макроса, который можно записать макрорекодером. Ну а мы с вами для решения задачи будет использовать функцию ДВССЫЛ.
ДВССЫЛ – функция, которая возвращает ссылку заданную текстовой строкой.
Чтобы понять принцип действия данной функцию, давайте рассмотрим такой пример.
Посмотрите на рисунок ниже. В ячейке А1 написан текст D4, а в самой ячейке D4 указано число 9999. Если мы напишем формулу ДВССЫЛ(A1), то в результате получим число 9999. То же самое мы получим если напишем формулу так:
=ДВССЫЛ("D4")
То есть мы написали текстом адрес ячейки D4 и функция ДВССЫЛ вернула нам то значение, которое находится по данному адресу (D4).
Надеюсь, все стало более понятным. Теперь давайте рассмотрим на нашем примере. Чтобы заполнить данные за январь с разных листов нам необходимо прописать следующие ссылки на ячейки.
=Лист1!B2 (Выручка за январь магазина 1)
=Лист2!В2 (Выручка за январь магазина 2) и т.д
Но сложность заключается в том, что если ячейку просто протянуть вниз, то Лист1 не будет меняться на Лист2 и так далее.
Если мы пропишем формулу
ДВCСЫЛ("Лист1!B2"), ДВCСЫЛ("Лист2!B2")
и так далее, то функция будет возвращать нам то же самое, но это так же не решает нашу проблему, ведь “Лист1!B2” прописан обычным текстом и так же не будет изменяться при протягивании.
Для решения нашей задачи мы разделим текст “Лист1!B2” на две части (отдельно “Лист1” и отдельно “!B2” – обратите внимание на восклицательный знак во второй части текста) и потом их склеим. Текст Лист1, Лист2 и так далее мы пропишем напротив соответствующих магазинов, при этом написав Лист1, мы сможем просто протянуть ячейку вниз и автоматически получить список Лист1, Лист2 и так далее.
Теперь сцепим этот текст внутри функции ДВССЫЛ с помощью знака & и получим формулу, которая будет автоматически протягиваться и при этом будут подтягиваться данные из одной и той же ячейки, но разных листов.
=ДВССЫЛ(A2&"!B2")
Итоговая формула выглядит именно так, но я специально расписал с самого начала по шагам, чтобы было понятно из чего состоит данная формула. В принципе, этого уже достаточно, чтобы за короткий срок решить задачу, указанную в начале статьи. Чтобы заполнить данные за февраль, нам необходимо в ячейке D2 написать такую же формулу, но поменять текст “!B2” на “!B3”
=ДВССЫЛ(A2&"!B3")
и протянуть вниз, аналогично за март.
Но никто нам не мешает немного усложнить формулу и заполнить ее автоматически, протянув формулу вниз, а затем вправо. Тут я не буду подробно описывать, но если вы разобрались с предыдущим примером, то легко поймете и данный.
Итак, мы решили задачу, как быстро заполнить данные за определенный месяц, но нам необходимо заполнить данные за остальные месяца. Мы знаем, что данные за Январь соответствуют ячейке B2, февраль – B3, Март – B4. То есть буква “B” остается неизменной, меняется лишь цифра. Зная это мы просто разобьем текст внутри ссылки ДВССЫЛ не на 2 части, а на три. Добавим дополнительно строку над таблицей и напишем сверху цифры соответствующие ячейки месяца. Пропишем формулу.
=ДВССЫЛ(A3&”!B“&C1), где A3 – это текст “Лист1“, “!B” – это неизменный текст и С1 – это цифра 2. Все это объединено с помощью знака & в общий текст “Лист1!B2“. Нам также потребуется закрепить столбец A (с помощью знака $), чтобы он не менялся при протягивании формулы вправо и строку 1, чтобы она не менялась при протягивании формулы вниз. Мы получаем следующую итоговую формулу.
=ДВССЫЛ($A3&"!B"&C$1)
которую можно протянуть вправо и вниз.
Заметки по теме:
- Если бы листы назывались у нас Магазин 1, Магазин 2 и так далее, то дополнительный столбец со словами Лист1, Лист2 и так далее нам бы не потребовался.
- Функцию ДВССЫЛ используют часто тогда, когда требуется изменить ссылку на ячейку в формуле, не изменяя саму формулу.
Если вам понравилась статья, пожалуйста, нажмите +1 и “Мне нравится”. Так же подписывайтесь на нашу рассылку или вступайте в нашу группу ВКонтакте, чтобы не пропустить наши следующие уроки по Excel
SirExcel – безграничные возможности Excel
А если мне нужно не в таблице указать путь, а в графике, при выборе значения оси X? Мне нужно чтобы с каждого листа по одной ячейки указать в формулу значений оси Х
Бля, от души, братан! Очень выручил!
Здравствуйте!
Не работает почему то когда лист обозначен например 06.05.2015(1-5)
Полезная статья. Всегда делал вручную (таблицьі небольшие), но вчера поймал себя на мьісли, что заглавия строк соответствуют именам листов, котрьіе я каждьій раз корректирую в формуле, и, соответственно, Excel должен иметь типовое решение
Здравствуйте!
А как сделать так, чтобы можно извлекать определенный диапазон из разных листов?
К примеру. У меня есть 30 листов и мне надо извлечь только диапазон А1:А30 из каждого листа и скомпоновать их в одном листе?
Отличная статья! Подробно и доступно!
Спасибо человеческое^^
Спасибо за отзыв
Спасибо, все очень доходчиво!
Но в примере =ДВССЫЛ($A3& «!B»&C$1) считается, что ежемесячные результаты находятся на листах в одном столбце (B2 = январь, B3=февраль). Подскажите, пожалуйста, как следует изменить эту формулу, если на листах ежемесячные результаты расположены в одной строке (B2 = январь, С2=февраль), так же, как на итоговой таблице?
Нет времени вникать в суть. В целом будет наоборот
=ДВССЫЛ($A3&"!B"&C$1
вместо “!B” – у вас будет ссылка на изменяющиеся значения, а вместо &C$1 будет закрепленная цифра строки.
Если пришлите пример, можно будет посмотреть когда будет время
Спасибо
О ДА!! То что искал!
Спасибо.