Как задать динамический диапазон в excel


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


Динамический диапазон —

это

Именованный диапазон

с изменяющимися границами. Границы диапазона изменяются в зависимости от количества значений в определенном диапазоне.

Динамические диапазоны используются для создания таких структур, как:

Выпадающий (раскрывающийся) список

,

Вложенный связанный список

и

Связанный список

.

Задача

Имеется таблица продаж по месяцам некоторых товаров (см.

Файл примера

):

Необходимо найти сумму продаж товаров в определенном месяце. Пользователь должен иметь возможность выбрать нужный ему месяц и получить итоговую сумму продаж. Выбор месяца пользователь должен осуществлять с помощью

Выпадающего списка

.

Для решения задачи нам потребуется сформировать два

динамических диапазона

: один для

Выпадающего списка

, содержащего месяцы; другой для диапазона суммирования.

Для формирования динамических диапазонов будем использовать функцию

СМЕЩ()

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

Создадим

динамический диапазон

для

Выпадающего списка

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

Выпадающий список

не должен содержать пустые строки.

Динамический диапазон

как раз и служит для решения такой задачи.

Для создания динамического диапазона:

  • на вкладке

    Формулы

    в группе

    Определенные имена

    выберите команду

    Присвоить имя

    ;
  • в поле

    Имя

    введите:

    Месяц

    ;
  • в поле

    Область

    выберите лист

    Книга

    ;
  • в поле

    Диапазон

    введите формулу

    =СМЕЩ(лист1!$B$5;;;1;СЧЁТЗ(лист1!$B$5:$I$5))
  • нажмите ОК.

Теперь подробнее. Любой диапазон в EXCEL задается координатами верхней левой и нижней правой ячейки диапазона. Исходной ячейкой, от которой отсчитывается положение нашего динамического диапазона, является ячейка

B5

. Если не заданы аргументы функции

СМЕЩ()

смещ_по_строкам,

смещ_по_столбцам

(как в нашем случае), то эта ячейка является левой верхней ячейкой диапазона. Нижняя правая ячейка диапазона определяется аргументами

высота

и

ширина

. В нашем случае значение высоты =1, а значение ширины диапазона равно результату вычисления формулы

СЧЁТЗ(лист1!$B$5:$I$5)

, т.е. 4 (в строке 5 присутствуют 4 месяца с

января

по

апрель

). Итак, адрес нижней правой ячейки нашего

динамического диапазона

определен – это

E

5

.

При заполнении таблицы данными о продажах за

май

,

июнь

и т.д., формула

СЧЁТЗ(лист1!$B$5:$I$5)

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

Выпадающий список

.

ВНИМАНИЕ! При использовании функции

СЧЕТЗ()

необходимо убедиться в отсутствии пустых ячеек! Т.е. нужно заполнять перечень месяцев без пропусков.

Теперь создадим еще один

динамический диапазон

для суммирования продаж.

Для создания

динамического диапазона

:

  • на вкладке

    Формулы

    в группе

    Определенные имена

    выберите команду

    Присвоить имя

    ;
  • в поле

    Имя

    введите:

    Продажи_за_месяц

    ;
  • в поле

    Диапазон

    введите формулу =

    СМЕЩ(лист1!$A$6;;ПОИСКПОЗ(лист1!$C$1;лист1!$B$5:$I$5;0);12)
  • нажмите ОК.

Теперь подробнее.

Функция

ПОИСКПОЗ()

ищет в строке 5 (перечень месяцев) выбранный пользователем месяц (ячейка

С1

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

А6

), высота диапазона не меняется и всегда равна 12 (при желании ее также можно сделать также динамической – зависящей от количества товаров в диапазоне).

И наконец, записав в ячейке

С2

формулу =

СУММ(Продажи_за_месяц)

получим сумму продаж в выбранном месяце.

Например, в мае.

Или, например, в апреле.


Примечание:

Вместо формулы с функцией

СМЕЩ()

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

ИНДЕКС()

: =

$B$5:ИНДЕКС(B5:I5;СЧЁТЗ($B$5:$I$5))

Формула подсчитывает количество элементов в строке 5 (функция

СЧЁТЗ()

) и определяет ссылку на последний элемент в строке (функция

ИНДЕКС()

), тем самым возвращает ссылку на диапазон

B5:E5

.

Визуальное отображение динамического диапазона

Выделить текущий

динамический диапазон

можно с помощью

Условного форматирования

. В

файле примера

для ячеек диапазона

B6:I14

применено правило

Условного форматирования

с формулой: =

СТОЛБЕЦ(B6)=СТОЛБЕЦ(Продажи_за_месяц)

Условное форматирование

автоматически выделяет серым цветом продажи

текущего месяца

, выбранного с помощью

Выпадающего списка

.

Применение динамического диапазона

Примеры использования

динамического диапазона

, например, можно посмотреть в статьях

Динамические диаграммы. Часть5: график с Прокруткой и Масштабированием

и

Динамические диаграммы. Часть4: Выборка данных из определенного диапазона

.

Динамический диапазон с автоподстройкой размеров

Есть ли у вас таблицы с данными в Excel, размеры которых могут изменяться, т.е. количество строк (столбцов) может увеличиваться или уменьшаться в процессе работы? Если размеры таблицы «плавают», то придется постоянно мониторить этот момент и подправлять:

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

Все это в сумме не даст вам скучать ;)

Гораздо удобнее и правильнее будет создать динамический «резиновый» диапазон, который автоматически будет подстраиваться в размерах под реальное количество строк-столбцов данных. Чтобы реализовать такое, есть несколько способов.

Способ 1. Умная таблица

Выделите ваш диапазон ячеек и выберите на вкладке Главная – Форматировать как Таблицу (Home – Format as Table):

dynamic_range1.png

Если вам не нужен полосатый дизайн, который добавляется к таблице побочным эффектом, то его можно отключить на появившейся вкладке Конструктор (Design). Каждая созданная таким образом таблица получает имя, которое можно заменить на более удобное там же на вкладке Конструктор (Design) в поле Имя таблицы (Table Name).

dynamic_range3.png

Теперь можно использовать динамические ссылки на нашу «умную таблицу»:

  • Таблица1 – ссылка на всю таблицу кроме строки заголовка (A2:D5)
  • Таблица1[#Все] – ссылка на всю таблицу целиком (A1:D5)
  • Таблица1[Питер] – ссылка на диапазон-столбец без первой ячейки-заголовка (C2:C5)
  • Таблица1[#Заголовки] – ссылка на «шапку» с названиями столбцов (A1:D1)

Такие ссылки замечательно работают в формулах, например:

=СУММ(Таблица1[Москва]) – вычисление суммы по столбцу «Москва»

или

=ВПР(F5;Таблица1;3;0) – поиск в таблице месяца из ячейки F5 и выдача питерской суммы по нему (что такое ВПР?)

Такие ссылки можно успешно использовать при создании сводных таблиц, выбрав на вкладке Вставка – Сводная таблица (Insert – Pivot Table) и введя имя умной таблицы в качестве источника данных:

dynamic_range4.png

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

При создании выпадающих списков прямые ссылки на элементы умной таблицы использовать нельзя, но можно легко обойти это ограничение с помощью тактической хитрости – использовать функцию ДВССЫЛ (INDIRECT), которая превращает текст в ссылку:

dynamic_range5.png

Т.е. ссылка на умную таблицу в виде текстовой строки (в кавычках!) превращается в полноценную ссылку, а уж ее выпадающий список нормально воспринимает.

Способ 2. Динамический именованный диапазон

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

dynamic_range6.png

Задача: сделать динамический именованный диапазон, который ссылался бы на список городов и автоматически растягивался-сжимался в размерах при дописывании новых городов либо их удалении.

Нам потребуются две встроенных функции Excel, имеющиеся в любой версии – ПОИКСПОЗ (MATCH) для определения последней ячейки диапазона и ИНДЕКС (INDEX) для создания динамической ссылки.

Ищем последнюю ячейку с помощью ПОИСКПОЗ

ПОИСКПОЗ(искомое_значение;диапазон;тип_сопоставления) – функция, которая ищет заданное значение в диапазоне (строке или столбце) и выдает порядковый номер ячейки, где оно было найдено. Например, формула ПОИСКПОЗ(“март”;A1:A5;0) выдаст в качестве результата число 4, т.к. слово «март» расположено в четвертой по счету ячейке в столбце A1:A5. Последний аргумент функции Тип_сопоставления = 0 означает, что мы ведем поиск точного соответствия. Если этот аргумент не указать, то функция переключится в режим поиска ближайшего наименьшего значения – это как раз и можно успешно использовать для нахождения последней занятой ячейки в нашем массиве.

Суть трюка проста. ПОИСКПОЗ перебирает в поиске ячейки в диапазоне сверху-вниз и, по идее, должна остановиться, когда найдет ближайшее наименьшее значение к заданному. Если указать в качестве искомого значение заведомо больше, чем любое имеющееся в таблице, то ПОИСКПОЗ дойдет до самого конца таблицы, ничего не найдет и выдаст порядковый номер последней заполненной ячейки. А нам это и нужно!

Если в нашем массиве только числа, то можно в качестве искомого значения указать число, которое заведомо больше любого из имеющихся в таблице:

dynamic_range7.png

Для гарантии можно использовать число 9E+307 (9 умножить на 10 в 307 степени, т.е. 9 с 307 нулями) – максимальное число, с которым в принципе может работать Excel.

Если же в нашем столбце текстовые значения, то в качестве эквивалента максимально большого числа можно вставить конструкцию ПОВТОР(“я”;255) – текстовую строку, состоящую из 255 букв «я» — последней буквы алфавита. Поскольку при поиске Excel, фактически, сравнивает коды символов, то любой текст в нашей таблице будет технически «меньше» такой длинной «яяяяя….я» строки:

dynamic_range8.png

Формируем ссылку с помощью ИНДЕКС

Теперь, когда мы знаем позицию последнего непустого элемента в таблице, осталось сформировать ссылку на весь наш диапазон. Для этого используем функцию:

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

Она выдает содержимое ячейки из диапазона по номеру строки и столбца, т.е. например функция =ИНДЕКС(A1:D5;3;4) по нашей таблице с городами и месяцами из предыдущего способа выдаст 1240 – содержимое из 3-й строки и 4-го столбца, т.е. ячейки D3. Если столбец всего один, то его номер можно не указывать, т.е. формула ИНДЕКС(A2:A6;3) выдаст «Самару» на последнем скриншоте.

Причем есть один не совсем очевидный нюанс: если ИНДЕКС не просто введена в ячейку после знака =, как обычно, а используется как финальная часть ссылки на диапазон после двоеточия, то выдает она уже не содержимое ячейки, а ее адрес! Таким образом формула вида $A$2:ИНДЕКС($A$2:$A$100;3) даст на выходе уже ссылку на диапазон A2:A4.

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

=$A$2:ИНДЕКС($A$2:$A$100; ПОИСКПОЗ(ПОВТОР(«я»;255);A2:A100))

Создаем именованный диапазон

Осталось упаковать все это в единое целое. Откройте вкладку Формулы (Formulas) и нажмите кнопку Диспетчер Имен (Name Manager). В открывшемся окне нажмите кнопку Создать (New), введите имя нашего диапазона и формулу в поле Диапазон (Reference):

Динамический именованный диапазон

Осталось нажать на ОК и готовый диапазон можно использовать в любых формулах, выпадающих списках или диаграммах.

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

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

Динамический именованный диапазон в Excel

​Смотрите также​ То есть, в​Вот думал, что​

  1. ​ЗЫ 2 и​​Например, если имя​​ Вот и в​ на весь наш​​ в четвертой по​​ дописывании новых строк​
  2. ​Выделите ваш диапазон ячеек​Динамический именованный диапазон в Excel
  3. ​ B, а не​ на которое нужно​ нерационально потреблять больше​Динамический именованный диапазон в Excel

​Но, если перед составлением​ фиксировать нахождение активной​ только на этом​Перевел: Антон Андронов​

  1. ​Динамический именованный диапазон автоматически​​ моём примере, хочу​​ СМЕЩ() летуча везде,​​ даже если формулы​​ ЭтоДата имеет в​Динамический именованный диапазон в Excel
  2. ​ приемах () то​​ диапазон. Для этого​​ счету ячейке в​Динамический именованный диапазон в Excel
  3. ​ они автоматически будут​​ и выберите на​​ весь столбец целиком.​ увеличить диапазон в​

    ​ памяти. Это может​
    ​ сложной формулы мы​

    Динамический именованный диапазон в Excel

    ​ ячейки в момент​​ листе) или оставьте​​Автор: Антон Андронов​​ расширяется при добавлении​ чтобы при подстановке​

    • ​ старался в именах​​ работают медленно -​​ RefersTo летучую формулу​
    • ​ же.​​ используем функцию:​​ столбце A1:A5. Последний​
    • ​ добавляться к диаграмме.​​ вкладке​​ Данный факт исключает​
    • ​ высоту. По сути,​​ привести к серьезным​​ присвоим диапазону ​​ создания имени);​​ значение Книга, чтобы​
    • ​Обычно ссылки на диапазоны​​ значения в диапазон.​​ цыфры 10 —>​

    ​ ее избегать, благо​ предпочитаю попить чайку,​ =СЕГОДНЯ()​Почему бы не​ИНДЕКС(диапазон; номер_строки; номер_столбца)​ аргумент функции Тип_сопоставления​При создании выпадающих списков​Главная – Форматировать как​

  4. ​ возможные ошибки связанные​​ название говорит само​​ проблемам при работе​​E2:E8​​на вкладке Формулы в​
  5. ​ имя было доступно​ ячеек вводятся непосредственно​Например, выберите диапазон​ функция СЧЁТ меняла​Динамический именованный диапазон в Excel Динамический именованный диапазон в Excel

​ ИНДЕКС() в помощь.​ но не делать​
​то формула ячейки​
​ использовать обычный ИНДЕКС​

​Она выдает содержимое ячейки​

office-guru.ru

Именованный диапазон в MS EXCEL

​ = 0 означает,​ прямые ссылки на​ Таблицу (Home –​ с памятью при​ за себя.​ с документом. Самым​ какое-нибудь имя (например, Цены),​ группе Определенные имена​ на любом листе​

​ в формулы, например​A1:A4​ диапазон и начинала​ Но со СМЕЩ()​ работу ручками:)​ =ЕСЛИ(A1=1; ЭтоДата) станет​ ? Может тут​

​ из диапазона по​ что мы ведем​ элементы умной таблицы​ Format as Table)​ работе с данным​«Размер диапазона в ширину»​ рациональным решением является​ то ссылку на​ выберите команду Присвоить​ книги;​​ =СУММ(А1:А10). Другим подходом​​и присвойте ему​ считать от одноимённого​ оптимальнее. Теперь умный,​Казанский​ летучей, только если​

​ где-то есть загвоздка​​ номеру строки и​ поиск точного соответствия.​ использовать нельзя, но​:​ документом.​ – количество ячеек,​

​ использование динамических имен.​ диапазон придется менять​ имя;​убедитесь, что в поле​ является использование в​ имя​ аргумента 10 !​

Задача1 (Именованный диапазон с абсолютной адресацией)

​ знаю :)​: Сталкивался с тем,​ A1=1​ ?​

​ столбца, т.е. например​​ Если этот аргумент​​ можно легко обойти​Если вам не нужен​У нас есть динамическое​

​ на которое нужно​

  • ​Выберите инструмент «Формулы»-«Определенные имена»-«Присвоить​​только 1 раз​​в поле Имя введите:​​ Диапазон введена формула​​ качестве ссылки имени​
  • ​Prices​Manyasha​Хотя вряд ли​ что СМЕЩ -​
  • ​Раз уж затронул​В примере два​
  • ​ функция =ИНДЕКС(A1:D5;3;4) по​ не указать, то​​ это ограничение с​​ полосатый дизайн, который​ имя, теперь создадим​ увеличить в ширину​ имя».​и даже не​ Сезонные_Продажи;​ =’1сезон’!$B$2:$B$10​
  • ​ диапазона. В статье​.​:​
  • ​ сильно умный -​

​ единственный вариант. Была​ эту тему, напомню,​​ диапазона, один определяется​​ нашей таблице с​ функция переключится в​ помощью тактической хитрости​ добавляется к таблице​ динамическую диаграмму для​​ от начальной ячейки.​​Заполните поля диалогового окна​

​ в формуле, а​в поле Область выберите​нажмите ОК.​

​ рассмотрим какие преимущества​Рассчитайте сумму.​Шептун​ ведь сколько еще​ тема (не смог​​ что формулы условного​ через ИНДЕКС, другой​ городами и месяцами​​ режим поиска ближайшего​ – использовать функцию​ побочным эффектом, то​ данного типа отчета:​​Последние 2 параметра функции​​ «Создание имени» как​

​ в Диспетчере имен!​ лист​Теперь в любой ячейке​ дает использование имени.​

Задача2 (Именованный диапазон с относительной адресацией)

​Когда вы добавляете значение​, покажите пример в​ не знаю!​ с ходу найти),​ форматирования в ячейках​​ через СМЕЩ:​​ из предыдущего способа​ наименьшего значения –​​ДВССЫЛ (INDIRECT)​​ его можно отключить​Выделите диапазон B2:B6 и​​ являются необязательными. Если​​ на рисунке. Обратите​

​=СУММ(Цены)+СРЗНАЧ(Цены)/5+10/СУММ(Цены)​4сезона​ листа​Назовем Именованным диапазоном в​ к диапазону, Excel​ файле. И напишите​vikttur​ там надо было​ видимой части экрана​=Лист1!$A$2:ИНДЕКС(Лист1!$A:$A;СЧЁТЗ(Лист1!$A:$A))​​ выдаст 1240 –​​ это как раз​

​, которая превращает текст​

  • ​ на появившейся вкладке​​ выберите инструмент: «Вставка»-«Диаграммы»-«Гистограмма»-«Гистограмма​​ их не заполнять,​ внимание на то,​Более того, при создании​(имя будет работать​1сезон​ MS EXCEL, диапазон​ не обновляет сумму.​
  • ​ все условия, при​: Тут не согласен.​ просмотреть ряд частичных​ пересчитываются при любом​
  • ​=СМЕЩ(Лист1!$B$2;;;СЧЁТЗ(Лист1!$B:$B)-1)​ содержимое из 3-й​
  • ​ и можно успешно​ в ссылку:​​Конструктор (Design)​​ с группировкой».​ то диапазон будет​ что в поле​
  • ​ формул EXCEL будет​ только на этом​можно написать формулу​
  • ​ ячеек, которому присвоено​

​Чтобы автоматически расширять именованный​ которых должен меняться​ Большие таблицы и​ сумм строки и​ изменении ячеек этой​Проверял, корректно работают​​ строки и 4-го​​ использовать для нахождения​Т.е. ссылка на умную​. Каждая созданная таким​Щелкните левой кнопкой мышки​ состоять из 1-ой​ «Диапазон:» мы используем​ сам подсказывать имя​

​ листе);​ в простом и​​ Имя (советуем перед​​ диапазон при добавлении​ диапазон.​ с формулами нормально​​ определить, сумма до​​ (и только этой)​ оба.​ столбца, т.е. ячейки​ последней занятой ячейки​​ таблицу в виде​​ образом таблица получает​ по любому столбцу​

​ ячейки. Например: =СМЕЩ(A1;0;0)​
​ функцию =СМЕЩ, а​ диапазона! Для этого​убедитесь, что в поле​ наглядном виде: =СУММ(Продажи).​​ прочтением этой статьи​​ значения, выполните следующие​AVI​ работают. На форум​ какого элемента не​

Использование именованных диапазонов в сложных формулах

​ видимой части, или​Главный вопрос корректно​ D3. Если столбец​ в нашем массиве.​ текстовой строки (в​ имя, которое можно​

​ гистограммы и в​

​ – это просто​ в одном из​ достаточно ввести первую​ Диапазон введена формула​ Будет выведена сумма​​ ознакомиться с правилами​​ несколько шагов:​​: Подойдет?​​ часто выкладываются только​

​ превосходит заданную, типа,​ даже при перерисовке​ ли задание динамического​​ всего один, то​​Суть трюка проста. ПОИСКПОЗ​ кавычках!) превращается в​ заменить на более​​ строке формул отобразится​​ ячейка A1, а​ ее параметров используем​ букву его имени.​

​ =’4сезона’!B$2:B$10​

​ значений из диапазона​ создания Имен).​На вкладке​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТ(ДВССЫЛ(«A»&B1):A20)​ примеры с небольшим​ на сколько месяцев​

​ видимой части экрана​ диапазона через функцию​ его номер можно​ перебирает в поиске​

excel2.ru

Автоматически изменяемые диапазоны ячеек в Excel

​ полноценную ссылку, а​ удобное там же​ функция диаграммы: =РЯД().​ параметр =СМЕЩ(A1;2;0) ссылается​ функцию =СЧЕТ. Пример:​Excel добавит к именам​нажмите ОК.​B2:B10​Преимуществом именованного диапазона является​Formulas​Шептун​ объемом и обрезанными​ хватит товара. Так​ от навигации. Поэтому​ ИНДЕКС, и чем​ не указывать, т.е.​ ячейки в диапазоне​ уж ее выпадающий​

Как в Excel сделать автоматическое изменение диапазона

​ на вкладке​В строке формул измените​ на A3.​ =СМЕЩ(Лист1!$B$2;0;0;СЧЁТ(Лист1!$B:$B);1)​ формул, начинающихся на​Мы использовали смешанную адресацию​.​ его информативность. Сравним​(Формулы) выберите​: AVI:​ таблицами. На самом​ вот, комбинация типа​ и имена, на​ такой вариант хуже/лучше​

​ формула ИНДЕКС(A2:A6;3) выдаст​ сверху-вниз и, по​ список нормально воспринимает.​Конструктор (Design)​

Доходы.

​ параметры функции: =РЯД(Лист1!$B$1;;Лист1!$B$2:$B$7;1)​Теперь разберем функцию: =СЧЕТ,​Переместите курсор в ячейку​ эту букву, еще​ B$2:B$10 (без знака​Также можно, например, подсчитать​ две записи одной​Name Manager​ААААААХренеть как подошла​ деле (иногда это​{ПОИСКПОЗ(…;СУММ(A1:ИНДЕКС(А1:А12;;СТРОКА(2:12)))}​ которые ссылаются формулы​ привычного варианта со​ «Самару» на последнем​ идее, должна остановиться,​Если превращение ваших данных​в поле​ на =РЯД(Лист1!$B$1;;Лист1!доход;1).​ которую мы указывали​ D2 и введите​ и имя диапазона!​ $ перед названием​

  1. ​ среднее значение продаж,​ формулы для суммирования,​
  2. ​(Диспетчер имен).​ ! У меня​ видно по структуре​не работает, а​ условного форматирования, также​ СМЕЩ?​ скриншоте.​ когда найдет ближайшее​ в умную таблицу​Имя таблицы (Table Name)​В отчет добавьте новую​Создание имени.
  3. ​ в 4-ом параметре​ функцию =СУММ с​В процессе работы с​ столбца). Такая адресация​ записав =СРЗНАЧ(Продажи).​

Пример.

​ например, объемов продаж:​Нажмите кнопку​ так ещё ни​ данных) таблицы «мощные»​ так работает:​

​ пересчитываются. Это нужно​

Функция СМЕЩ в Excel

​vikttur​Причем есть один не​ наименьшее значение к​ по каким-либо причинам​.​

​ запись в ячейки​ функции: =СМЕЩ.​ именем «доход» в​ данными в Excel​ позволяет суммировать значения​Обратите внимание, что EXCEL при создании​ =СУММ($B$2:$B$10) и =СУММ(Продажи).​Edit​ одна формула не​ и применение в​{ПОИСКПОЗ(…;ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(A1;;;(СТРОКА(1:12)))}​ учитывать, но не​

СМЕЩ.

  1. ​: Файл не смотрел.​ совсем очевидный нюанс:​ заданному. Если указать​ нежелательно, то можно​Теперь можно использовать динамические​ A8 — «июль»,​Функция =СЧЕТ($B:$B) автоматически считает​
  2. ​ ее параметрах.​ иногда заранее не​ находящиеся в строках​ имени использовал абсолютную адресацию​ Хотя формулы вернут​(Изменить).​ подходила как эта​ них «массивных» формул​
  3. ​Владимир​ бояться :-)​Для имен СМЕЩ()​ если ИНДЕКС не​ в качестве искомого​ воспользоваться чуть более​ ссылки на нашу​ B8 — «77000»​
  4. ​ количество заполненных ячеек​Теперь постепенно заполняя ячейки​ известно, сколько данных​2 310​ $B$1:$B$10. Абсолютная ссылка​ один и тот​Кликните по полю​
  5. ​ !​ (а можно же​: Игорь, полностью разделяю​Вывод: в формулах​ лучше — короче​

​ просто введена в​ значение заведомо больше,​ сложным, но гораздо​ «умную таблицу»:​ соответственно. И убедитесь,​ в столбце B.​ в столбце B,​ будет собрано в​, в том столбце,​ жестко фиксирует диапазон​

​ же результат (если,​Refers to​Pelena​ столбец-другой добавить) -​

Что определяет функция СЧЕТ

СЧЕТ.

​ Вашу позицию, чем​ именованных диапазонов для​ :)​

​ ячейку после знака​ чем любое имеющееся​ более незаметным и​Таблица1​ что на диаграмме​Таким образом, мы с​ мы можем проследить,​ той или иной​ в котором размещена​ суммирования:​ конечно, диапазону​

​(Диапазон) и введите​: Ещё вариант без​ вред.​ быть антагонистом «массивной​ выпадающих списков можно​Летучесть роли не​ =, как обычно,​ в таблице, то​ универсальным методом –​– ссылка на​ автоматически добавился новый​ помощью функции =СЧЕТ()​ как изменяется охват​ таблице. Поэтому мы​ формула суммирования. Формулу​в какой ячейке на​B2:B10​ формулу:​ летучей ДВССЫЛ()​С.М.​ летучести», лучше попить​ и полезно использовать​ играет.​ а используется как​ ПОИСКПОЗ дойдет до​ создать в Excel​ всю таблицу кроме​ столбец.​ и =СМЕЩ() автоматизируем​ ячеек именем «доход».​ не всегда можем​

​ суммирования можно разместить​ листе Вы бы​присвоено имя Продажи),​=OFFSET($A$1,0,0,COUNTA($A:$A),1)​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТ(ИНДЕКС(A1:A20;B1):A20)​: Ещё одна формула​ чайку или с​ летучие функции.​Ссылки нет, привожу​ финальная часть ссылки​ самого конца таблицы,​

Динамические диаграммы в Excel

​ динамический именованный диапазон,​ строки заголовка (A2:D5)​Используя наше динамическое имя​ процесс формирования диапазона​

  1. ​​ заранее знать какой​ в любой строке​
  2. ​ не написали формулу​ но иногда проще​=СМЕЩ($A$1;0;0;СЧЕТЗ($A:$A);1)​AVI​ динамического диапазона, «для​РЯД.
  3. ​ девчонками посплетничать.​GIG_ant​ текст «лекции»:​
  4. ​ на диапазон после​ ничего не найдет​ ссылающийся на нашу​Таблица1[#Все]​ «доход» нам удалось​ для имени «доход»,​Разберем более детально функции,​ диапазон должно охватывать​

Динамическая диаграмма.

​ ниже десятой (иначе​=СУММ(Продажи) – суммирование​ работать не напрямую​Объяснение:​: А что значит​ трудоголиков» :-)​:))​

exceltable.com

Динамический диапазон с автоподстройкой размеров

​: И это говорит​ZVI. О летучести​ двоеточия, то выдает​ и выдаст порядковый​ таблицу. Потом, как​– ссылка на​ создать автоматически изменяемую​ что делает его​ которые мы вводили​ имя. Ведь количество​ возникнет циклическая ссылка).​ будет производиться по​

  • ​ с диапазонами, а​Функция​ «летучей»?​
  • ​Пример:​——​ наиглавнейший противник летучих​
  • ​ имен и УФ​ она уже не​
  • ​ номер последней заполненной​ и в случае​ всю таблицу целиком​ динамическую диаграмму, которая​

​ динамическим. Теперь еще​ в поле диапазон​ данных может изменяться.​

​Теперь введем формулу =СУММ(Сезонные_Продажи)​ одному и тому​ с их именами.​OFFSET​Pelena​=ИНДЕКС($C$1:$C$5;2):ИНДЕКС($C$1:$C$5;ЧСТРОК($C$1:$C$5)-1)​12350​ формул ). Куда​Мы часто неосознанно​

Способ 1. Умная таблица

​ содержимое ячейки, а​ ячейки. А нам​ с умной таблицей,​​ (A1:D5)​ сама добавляет и​ раз посмотрим на​​ при создании динамического​

Динамический диапазонȎxcel

​ Для решения данной​ в ячейку​ же диапазону​Совет​(СМЕЩ) принимает 5​: Значит пересчитывается при​​Она включает диапазон​​Казанский​ катится планета ?​ избегаем использования летучих​ ее адрес! Таким​ это и нужно!​ можно будет свободно​​Таблица1[Питер]​​ отображает новые данные​​ нашу формулу, которой​​ имени.​

Динамический диапазонȎxcel

​ задачи следует автоматически​B11.​B1:B10​

  • ​: Узнать на какой диапазон​​ аргументов:​ любом изменении на​ столбца таблицы с​
  • ​: В общем, поиском​​ ))​ функций в формулах​ образом формула вида​
  • ​Если в нашем массиве​​ использовать имя созданного​– ссылка на​ в отчете.​
  • ​ мы присвоили имя​​Функция =СМЕЩ определяет наш​ изменить именованный диапазон​Затем, с помощью​

​.​ ячеек ссылается Имя можно​

​ссылка:​​ листе​​ заголовком и строкой​ по «ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(» довольно​

​Так есть все​

​ имен, в частности,​​ $A$2:ИНДЕКС($A$2:$A$100;3) даст на​​ только числа, то​ диапазона в любых​ диапазон-столбец без первой​Есть ли у вас​ «доход»: =СМЕЩ(Лист1!$B$2;0;0;СЧЁТ(Лист1!$B:$B);1)​ диапазон в зависимости​

​ используемых ячеек, в​ Маркера заполнения, скопируем​Иногда выгодно использовать не​ через Диспетчер имен​​$A$1​Волатильные функции​ (ячейкой) итогов (которые​​ много тем находится.​ таки разница в​ в формулах динамических​

Динамический диапазонȎxcel

​ выходе уже ссылку​ можно в качестве​ формулах, отчетах, диаграммах​ ячейки-заголовка (C2:C5)​ таблицы с данными​Читать данную формулу следует​ от количества заполненных​ зависимости от количества​

​ ее в ячейки​ абсолютную, а относительную​ расположенный в меню​,​AVI​ могут быть и​Михаил С.​ предложенных вариантах кроме​​ диапазонов для выпадающих​​ на диапазон A2:A4.​ искомого значения указать​

Динамический диапазонȎxcel

​ и т.д. Для​Таблица1[#Заголовки]​ в Excel, размеры​ так: первый параметры​ ячеек в столбце​ введенных данных.​С11D11E11​

Способ 2. Динамический именованный диапазон

​ ссылку, об этом​  Формулы/ Определенные имена/​смещение по строкам:​: Очень интересно как​ пустыми),​: Просто ПРОМЕЖУТОЧНЫЕ.ИТОГИ и​ количества букав ?​ списков. При этом​И вот тут в​ число, которое заведомо​ начала рассмотрим простой​– ссылка на​ которых могут изменяться,​ указывает на то,​ B. 5 параметров​Допустим, у нас есть​, и получим суммы​ ниже.​ Диспетчер имен.​0​ индекс вернул ссылку​

Динамический диапазонȎxcel

​но возвращает диапазон​​ ИНДЕКСом не работают…Да​vikttur​ формулы становятся длинными​ дело вступает функция​ больше любого из​ пример:​ «шапку» с названиями​ т.е. количество строк​

​ что наш автоматически​ функции =СМЕЩ(начальная ячейка;​ объект инвестирования, по​ продаж в каждом​​Теперь найдем сумму продаж​​Ниже рассмотрим как присваивать​,​​ на ячейку? Отдельно​​ только внутренних ячеек​ и СМЕЩение еще​

Ищем последнюю ячейку с помощью ПОИСКПОЗ

​: Контрольный:​​ и плохо читаемыми.​ ПОИСКПОЗ, которую мы​ имеющихся в таблице:​Задача​ столбцов (A1:D1)​ (столбцов) может увеличиваться​ изменяемый диапазон начинается​ смещение размера диапазона​ которому мы хотим​ из 4-х сезонов.​ товаров в четырех​ имя диапазонам. Оказывается,​смещение по столбцам:​ индекс дал другое​ таблицы, без шапки​ правильно нужно задать…​=СМЕЩ(Лист1!$B$2;;;ПОИСКПОЗ(«яя»;Лист1!$B:$B;1)-1)​ Но дело в​ вставляем внутрь ИНДЕКС,​Для гарантии можно использовать​: сделать динамический именованный​Такие ссылки замечательно работают​ или уменьшаться в​ в ячейке B2.​ по строкам; смещение​ знать суммарную прибыль​ Формула в ячейках​ сезонах. Данные о​

​ что диапазону ячеек​0​ значение, а в​ и обуви.​хто-то​Мне так больше​ том, что опасения​ чтобы динамически определить​ число 9E+307 (9​ диапазон, который ссылался​ в формулах, например:​ процессе работы? Если​ Следующие два параметра​ по столбцам; размер​ за весь период​B11, С11D11E11​ продажах находятся на​ можно присвоить имя​,​

​ СЧЁТ’е ссылку?​Минусы формулы:​: Народ, а почему​ нравится :)​ насчет пересчета формул​ конец списка:​ умножить на 10​

Динамический диапазонȎxcel

​ бы на список​=СУММ(​ размеры таблицы «плавают»,​ имеют значения 0;0​ диапазона в высоту;​ его использования. Заранее​одна и та​ листе​ по разному: используя​

​высота:​Pelena​- чуть длиннее;​ у меня формула​GIG_ant​ таких имен при​=$A$2:ИНДЕКС($A$2:$A$100; ПОИСКПОЗ(ПОВТОР(«я»;255);A2:A100))​ в 307 степени,​ городов и автоматически​Таблица1[Москва]​ то придется постоянно​ – это значит,​ размер диапазона в​ мы не можем​ же!​4сезона​ абсолютную или смешанную​

Динамический диапазонȎxcel

Формируем ссылку с помощью ИНДЕКС

​COUNTA($A:$A)​: Дело не в​- чтобы добавить​ vikttur не работает​: Спасибо vikttur.​ каждом пересчете формул​Осталось упаковать все это​

​ т.е. 9 с​

​ растягивался-сжимался в размерах​) – вычисление суммы​ мониторить этот момент​ что динамический диапазон​ ширину):​ определить период использования​СОВЕТ:​(см. файл примера)​ адресацию.​или​ СЧЁТ’е, а в​ новую запись, надо​ (((​Может еще есть​ листа (т.е общего​ в единое целое.​ 307 нулями) –​ при дописывании новых​ по столбцу «Москва»​

​ и подправлять:​ не смещается относительно​«Начальная ячейка» – указывает​ инвестиционного объекта. Но​Если выделить ячейку,​ в диапазонах:​Пусть необходимо найти объем​СЧЕТЗ($A:$A)​ двоеточии​ (сделав неимоверное усилие)​ran​ мнения у старожилов​ замедления Excel) лишены​ Откройте вкладку​ максимальное число, с​ городов либо их​или​

​ссылки в формулах отчетов,​ начальной ячейки B2.​ верхнюю левую ячейку,​ нам нужно постоянно​ содержащую формулу с​B2:B10 C2:C10 D2:D10 E2:E10​

​ продаж товаров (см.​

Создаем именованный диапазон

​,​ИНДЕКС вернул начальное​ выделить ячейку строки​​: Она для буковков,​​ и не только​​ оснований.​​Формулы (Formulas)​ которым в принципе​​ удалении.​​=ВПР(F5;​ которые ссылаются на​ А увеличивается только​​ от которой будет​​ следить за общим​

Динамический именованный диапазон

​ именем диапазона, и​​. Формулы поместим соответственно​​ файл примера лист​ширина:​ значение диапазона, а​ итогов и …​

planetaexcel.ru

Формула для создания динамического именованного диапазона

​ а не цифирьков.​​ ?​
​Формула динамического диапазона,​и нажмите кнопку​ может работать Excel.​Нам потребуются две встроенных​Таблица1​ нашу таблицу​ его размер по​
​ динамически расширяться диапазон​ доходом, который приносит​ нажать клавишу​ в ячейках​ 1сезон):​

​1​ А20 — конечное​ вставить новую строку.​хто-то​
​Igor67​
​ на основании которой​

​Диспетчер Имен (Name Manager)​Если же в нашем​
​ функции Excel, имеющиеся​;3;0) – поиск в​исходные диапазоны сводных таблиц,​ вертикали, о чем​ как вниз, так​ нам данный объект​F2​

​B11C11 D11E11​​Присвоим Имя Продажи диапазону​
​.​_Boroda_​Плюсы формулы (естественно,​
​: спасибо, буду знать​: Чаще всего пользователи​

​ строится выпадающий список,​. В открывшемся окне​
​ столбце текстовые значения,​ в любой версии​
​ таблице месяца из​ которые построены по​ свидетельствует 4-тый параметр.​ и вправо (при​ инвестирования.​, то соответствующие ячейки​.​B2:B10​Формула COUNTA($A:$A) или СЧЕТЗ($A:$A)​:​ не летуча):​vikttur​ работают с такими​ не пересчитывается при​ нажмите кнопку​ то в качестве​ –​
​ ячейки F5 и​ нашей таблице​ В нем находится​ необходимости).​Сформируйте отчет по доходности​ будут обведены синей​По аналогии с абсолютной​. При создании имени​ – подсчитывает число​AVI​+ при вставке​: {quote}{login=Владимир}{date=07.11.2011 06:57}{thema=}{post}…чем быть​
​ объемами данных что​ пересчете листа, независимо​Создать (New)​ эквивалента максимально большого​ПОИКСПОЗ (MATCH)​ выдача питерской суммы​исходные диапазоны диаграмм, построенных​ функция СЧЕТ и​«Смещение по строкам» –​ нашего объекта инвестирования,​
​ рамкой (визуальное отображение​ адресацией из предыдущей​ будем использовать абсолютную​ значений в столбце​
​, посмотрите, что в​ новой строки автоматом​ антагонистом «массивной летучести»,​ применение «летучих» функций​
​ от того, используются​, введите имя нашего​ числа можно вставить​для определения последней​ по нему (что​ по нашей таблице​ она возвращает число​ параметр определяет, на​ так как показано​ Именованного диапазона).​ задачи, можно, конечно,​ адресацию.​ А. Когда вы​ справке по Индексу​ сохраняется форматирование;​ лучше попить чайку​ не сильно сказывается,​ в ней летучие​
​ диапазона и формулу​ конструкцию ПОВТОР(“я”;255) –​ ячейки диапазона и​ такое ВПР?)​диапазоны для выпадающих списков,​

​ равно количеству заполненных​​ какое количество нужно​ на рисунке:​Предположим, что имеется сложная​ создать 4 именованных​Для этого:​
​ добавляете значение к​ написано​+ можно удалить​ или с девчонками​

​ но вот когда​​ функции или нет.​
​ в поле​
​ текстовую строку, состоящую​ИНДЕКС (INDEX)​

​Такие ссылки можно успешно​​ которые используют нашу​
​ ячеек в столбце​ смещать диапазон по​Данную задачу можно было-бы​ (длинная) формула, в​

​ диапазона с абсолютной​​выделите, диапазон​ диапазону, количество элементов​Цитата​ даже первую (после​ посплетничать.​ из этого уже​ Пересчет формул имен​Диапазон (Reference)​ из 255 букв​для создания динамической​ использовать при создании​ таблицу в качестве​
​ B. Соответственно количество​ вертикали от начальной​ решить путем суммирования​ которой несколько раз​ адресацией, но есть​B2:B10​ увеличивается. В результате,​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ссылочная форма​
​ заголовка) строку;​Я не антагонист.​ вырастает проблема -​ происходит только при​:​ «я» — последней​

​ ссылки.​​ сводных таблиц, выбрав​ источника данных​ ячеек по вертикали​ ячейки (первого параметра).​ целого столбца B​ используется ссылка на​ решение лучше. С​на листе​ именованный диапазон расширяется.​Описание​+ формулу (или​ И чай люблю,​ нужно думать об​ попытке выбора значения​
​Осталось нажать на​
​ буквы алфавита. Поскольку​ПОИСКПОЗ(искомое_значение;диапазон;тип_сопоставления)​
​ на вкладке​

​Все это в сумме​​ в диапазоне будет​ Значения могут быть​ и после появления​ один и тот​ использованием относительной адресации​1сезон​
​Нажмите​

​Возвращает ссылку на​
​ имя формулы) можно​

​ и с девчонками​​ оптимизации обработки и​ из выпадающего списка.​ОК​

​ при поиске Excel,​​– функция, которая​Вставка – Сводная таблица​ не даст вам​ равно числу, которое​

​ нулевыми и отрицательными.​​ в нем записей​ же диапазон:​ можно ограничиться созданием​;​

​ОК​​ ячейку, расположенную на​ запихнуть в итоговую​

​ :)​​ использовании макросов, а​

​А вот формула​​и готовый диапазон​ фактически, сравнивает коды​ ищет заданное значение​ (Insert – Pivot​ скучать ;)​

​ нам даст функция​«Смещение по столбцам» –​ общая сумма изменялась​=СУММ(E2:E8)+СРЗНАЧ(E2:E8)/5+10/СУММ(E2:E8)​

​ только​на вкладке Формулы в​, а затем​ пересечении …​
​ ячейку внутри СУММ()​Любил применять СМЕЩ().​ не формул.​
​ ячейки, которая ссылается​ можно использовать в​ символов, то любой​

​ в диапазоне (строке​ Table)​Гораздо удобнее и правильнее​ СЧЕТ. А за​ параметр определяет, на​ бы автоматически. Но​Если нам потребуется изменить​одного​
​ группе Определенные имена​Close​Кстати, если так​ или, например, ПРОМЕЖУТОЧНЫЕ.ИТОГИ(…),​

​ Когда узнал ДВССЫЛ()​​ЗЫ мы сталкиваемся​ на имя с​ любых формулах, выпадающих​ текст в нашей​ или столбце) и​и введя имя​ будет создать динамический​ ширину диапазона у​ какое количество нужно​ это некорректный способ​ ссылку на диапазон​Именованного диапазона Сезонные_продажи.​ выберите команду Присвоить​(Закрыть).​ понятнее, то Ленину​и спокойно добавлять/удалять​

​ — тоже очень​​ на форуме уже​ летучими функциями, действительно​ списках или диаграммах.​
​ таблице будет технически​
​ выдает порядковый номер​
​ умной таблицы в​ «резиновый» диапазон, который​ нас отвечает последний​ смещать по горизонтали​ решения задач в​ данных, то это​
​Для этого:​ имя;​Теперь, когда вы добавляете​ формулу можно переписать​
​ записи таблицы.​
​ понравилась.​
​ с критичными объемами​ сама может стать​GIG_ant​ «меньше» такой длинной​ ячейки, где оно​ качестве источника данных:​
​ автоматически будет подстраиваться​ 5-тый параметр, где​
​ от начальной ячейки.​ Excel. Во-первых, нам​ придется сделать 3​
​выделите ячейку​в поле Имя введите:​ значение в диапазон,​
​ вот так​Шептун​Но… Чем дальше​ чаще чем в​ летучей, но только​
​: Добрый день.​ «яяяяя….я» строки:​

planetaexcel.ru

Динамический диапазон функции по условию (Формулы/Formulas)

​ было найдено. Например,​​Если выделить фрагмент такой​
​ в размерах под​ находиться число 1.​ Значения могут быть​ нельзя будет использовать​ раза. Например, ссылку ​B11​ Продажи;​ Excel автоматически обновляет​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТ(A20:ИНДЕКС(A1:A20;B1))​: Добрый день,​ в лес, тем​ реальной жизни так,​

​ если в формуле​​Возник вопрос, почему​​Теперь, когда мы знаем​​ формула ПОИСКПОЗ(“март”;A1:A5;0) выдаст​ таблицы (например, первых​ реальное количество строк-столбцов​Благодаря функции СЧЕТ мы​ даже нулевыми и​

​ ячейки столбца B​​E2:E8​
​, в которой будет​

​в поле Область выберите​​ сумму.​
​11:20 и 20:11​скажите пжлста можно​ хуже компас :)​ как люди начинают​ этой ячейки срабатывают​ для определения динамического​

​ позицию последнего непустого​​ в качестве результата​ два столбца) и​
​ данных. Чтобы реализовать​

​ рационально загружаем в​​ отрицательными.​ для ввода других​

​поменять на ​​ находится формула суммирования​ лист​Урок подготовлен для Вас​
​ — одно и​

​ ли изменить диапазон​​Хорошая вещь оптимизация​ искать решение проблем​ условия для обращения​ диапазона зачастую используется​ элемента в таблице,​ число 4, т.к.​

​ создать диаграмму любого​​ такое, есть несколько​ память только заполненные​«Размер диапазона в высоту»​;)
​ данных. Во-вторых, так​J14:J20​ (при использовании относительной​

​1сезон​​ командой сайта office-guru.ru​​ то же в​​ функции (СЧЁТ например)​ — и подумать,​ обработки больших массивов:)​
​ к имени.​​ летучая СМЕЩ ?​
​ осталось сформировать ссылку​
​ слово «март» расположено​ типа, то при​ способов.​
​ ячейки из столбца​ – количество ячеек,​ функция суммирования будет​.​
​ адресации важно четко​
​(имя будет работать​Источник: http://www.excel-easy.com/examples/dynamic-named-range.html​ данном случае​ при изменении условия.​

excelworld.ru

​ и не навредить.​

Это глава из книги: Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel.

Предыдущая глава                            Оглавление                              Следующая глава

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

На рис. 13.1 и 13.2 приведен пример расширения исходного набора данных. Если вы используете динамический диапазон внутри функции СУММ, диапазон A2:A4 будет автоматически расширяться до А2:А5, если новое число (в ячейке А5) добавляется к исходным данным.

Рис. 13.1. Функция СУММ для диапазона А2,A4

Рис. 13.1. Функция СУММ для диапазона А2:А4

Скачать заметку в формате Word или pdf, примеры в Excel2013

Рис. 13.2. Динамический диапазон внутри функции СУММ

Рис. 13.2. Динамический диапазон внутри функции СУММ должен автоматически расширяться с А2:А4 до А2:А5 при добавлении новых данных

Рис. 13.3 демонстрирует еще один пример, в котором без динамического диапазона также не обойтись. Вам нужна формула в аргументе диапазон функции СЧЁТЕСЛИ, чтобы этот диапазон обращался только к рейтингам одного семестра. В ячейке C5, вам нужно, чтобы функция СЧЁТЕСЛИ подсчитывала данные из диапазона B2:B5. А при копировании формулы вниз, С6 оставлась пустой, а в C7, функция обращалась к диапазону B6:B7.

Рис. 13.3. Формула для расчета довольно простая

Рис. 13.3. Формула для расчета довольно простая (Е5 и Е7), однако скопировтаь ее вдоль столбца не получится, так как аргумент диапазон функции СЧЁТЕСЛИ должен изменяться, чтобы охватывать только значения одного семестра. Этот пример будет завершен в конце заметки

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

Летучие функции пересчитываются, даже если данные, относящиеся к формуле, не изменились. Поэтому летучие функции замедляют работу. Вот некоторые действия, которые могут инициировать пересчет летучей функции:

  • Ввод новых данных (даже в другой книге).
  • Удаление или вставка строки или столбца.
  • Выполнение действий автофильтра.
  • Двойной щелчек на разделителе строк или столбцов.
  • Переименование листа.
  • Изменение положения листа в книге относительно других листов.

Ранее мы уже обсуждали летучую функцию ДВССЫЛ. Также летучими являются: ЯЧЕЙКА, СЛЧИС, ИНФОРМАЦИЯ, ТДАТА, СЕГОДНЯ. [1] Если скорость пересчета не является проблемой (у вас небольшой набор данных, не много формул, или вас это не волнует), летучая функция СМЕЩ также отлично подойдет для создания динамического диапазона. [2]

Создание динамических диапазонов с помощью опции Таблица. Если вы выбрали диапазон и конвертировали его в таблицу (нажав Ctrl+T), то последующее добавление данных автоматически расширит диапазон Таблицы. В некторых случаях этого будет вполне достаточно для управления изменяющимися данными. Однако, Таблицы имеют ряд ограничений:

  • Динамический диапазон, подобный показанному на рис. 13.3 не может быть создан с помощью опции Таблица.
  • Заголовки Таблиц не могут содержать формулы.
  • Таблицы не поддерживают функции ПРОМЕЖУТОЧНЫЕ.ИТОГИ.
  • Вы не можете применить пользовательские представления (custom views) в Таблице. [3]

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

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

Обычно, вы выполняете поиск в двумерном диапазоне, помещая этот диапазон в аргумент массив. Например, формула =ИНДЕКС(B4:E15;2;3) вернет значение, хранящееся в ячейке D5, находящейся на пересечении второй строки и третьего столбца в массиве B4:E15. Если ваша цель – получить весь столбец а не ячейку на пересечении строки и столбца, вы вводите ноль или оставляете пустым аргумент номер_строки, и вводите требуемое значение в аргумент номер_столбца. Оставив аргумент номер_строки пустой (или введя ноль), вы говорите «получить все строки» в выбранном столбце. Поскольку в этом случае функция ИНДЕКС вернет массив значений, прежде чем ее ввести выберите соответствующее число ячеек и введите функцию, нажав Ctrl+Alt+Enter. Например, формула {=ИНДЕКС(B4:E15;;3)} вернет 12 значений.

Если вашей целью является получение всей строки, просто опустите аргумент номер_столбца (он является необязательным). Оставив аргумент номер_столбца пустым (или введя ноль), вы говорите «получить все столбцы» в выбранной строке. Рис. 13.4 и 13.5 иллюстрируют формулы для выборки целой строки или целого столбца. Поскольку цель – суммировать все значения, относящиеся к одному месяцу, функция ИНДЕКС помещается в качестве аргумента внутрь функции СУММ.

Рис. 13.4. Функция ИНДЕКС

Рис. 13.4. Если в качестве условяи выбран Фев, ИНДЕКС просматривает столбец В3:В6 или строку В10:Е10

Рис. 13.5. Функция ИНДЕКС для марта

Рис. 13.5. Если в качестве условяи выбран Мар, ИНДЕКС просматривает столбец С3:С6 или строку В11:Е11

Функции массива, использующие массив, возвращаемый функцией ИНДЕКС (в примерах 13.4 и 13.5 это СУММ), не требуют нажатия Ctrl+Shift+Enter. Есть, правда, два исключения:

  • Если вы помещаете в формулу прямой оператор массива, который требует Ctrl+Shift+Enter, то вам нужно использовать Ctrl+Shift+Enter.
  • Если вы хотите, чтобы функция вернула несколько значений в несколько ячеек, вы должны использовать Ctrl+Shift+Enter.

Прежде чем создавать формулу динамического диапазона, выясните:

  • Будет ли он вертикальным, горизонтальным или двумерным?
  • Являются ли исходные данными числовыми, текстовыми, или смешанными?
  • Есть ли пустые ячейки?

Ответы на эти вопросы определяют, какой формулой вы могли бы воспользоваться. Часто вы должны будете использовать концепцию «поиска последнего вхождения». Ниже мы рассмотрим различные формулы для определения последней строки исходных данных.

На рис. 13.6 представлены четыре столбца с различными типами данных: диапазон A5:A10 содержит смешанные данные без пустых ячеек до последней строки; диапазон А16:А21 содержит смешанные данные и пустую ячейку посреди массива; диапазон C5:C10 содержит числовые данные с пустыми ячейками до последнего элемента, диапазон C16:C21, содержит текстовые данные с пустыми ячейками до последнего элемента.

Рис. 13.6. Поиск последней позиции для данных различного формата

Рис. 13.6. Поиск последней позиции для данных различного формата

Во всех четырех случаях для того, чтобы создать динамический диапазон на основе формулы, которая будет расширяться и сжиматься, когда вы добавляете или удаляете данные, вам потребуется определить последнюю значимую относительную позицию в столбце. (Обратите внимание, что выражение «последняя строка в наборе данных» является неточным. Я говорю: «последняя значимая относительная позиция». Применительно к диапазону A5:A10 на рис. 13.6 следует сказать не строка 9, а позиция 5.)

Ключевая концепция для формул [2]–[6] состоит в том, что вам следует выбрать искомое_значение заведомо большим, чем любое возможное значение в диапазоне, а также выбрать тип_сопоставления – приблизительное (третий аргумент = 1 или опущен). В этом случае функция вернет номер последней значимой позиции в списке, даже если есть пустые ячейки.

Давайте рассмотрим работу этих формул подробнее.

Формула [1] =СЧЁТЗ(A5:A10)

  • Эта формула вернет последнюю относительную позицию в диапазоне, не имеющем пустых ячеек. Функция СЧЁТЗ подсчитывает непустые ячейки в диапазоне. Формула обработает данные любого типа, даже текстовую строку нулевой длины.
  • Если же где-то в середине диапазона есть пустая ячейка, этот метод не даст правильный ответ.

Формула [2] {=ПОИСКПОЗ(2;1/(A16:A21<>""))}

  • Эта формула пригодна для смешанных данных, когда есть пустые ячейки до последнего элемента.
  • Оператор массива в аргументе просматриваемый_масив функции ПОИСКПОЗ работает следующим образом: 1/(A16:A21<>"") → 1/{#ДЕЛ/0!:ИСТИНА:ЛОЖЬ:ИСТИНА:ИСТИНА: ЛОЖЬ} → {#ДЕЛ/0!:1:#ДЕЛ/0!:1:1:#ДЕЛ/0!}
  • Поскольку число 2 больше, чем любое значение в вышеприведенном результирующем массиве, приблизительное совпадение выбирает последнее значимое число (1) и вовращает его позицию (5).
  • Формула требует Ctrl+Shift+Enter, потому аргумент просматриваемый_масив функции ПОИСКПОЗ не был запрограммирован для обработки операций с массивами.
  • К сожалению, формула вернет ошибочное значение, если последним значением в диапазоне будет текстовая строка нулевой длины или значение ошибки.

Формула [3] =ПОИСКПОЗ(9,99E+307;C5:C10)

  • Эта формула пригодна для числовых данных. Введя максимально доступное в Excel число, с помощью приблизительного совпадения, вы определите позицию последнего числа в диапазоне. Использование формулы гарантирует правильный ответ, даже если внутри диапазона чисел есть пустые ячейки.

Формула [4] =ПОИСКПОЗ(100;C5:C10)

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

Формуле [5] =ПОИСКПОЗ("Ω";C16:C21)

  • Эта формула пригодна для текстовых данных. Она является примером концепции «большой текст». Если вы дадите аргументу искомое_значение формулы ПОИСКПОЗ значение, которое заведомо «больше» любого значения в диапазоне просматриваемый_масив, она всегда вернет относительную позицию последней значимой ячейки в диапазоне. Здесь Ω – последняя буква греческого алфавита (Омега). [4]
  • Эта формула работает на данных любого типа, даже для текстовой строки нулевой длины.

Формуле [6] =ПОИСКПОЗ(ПОВТОР("z";255);C16:C21)

  • Эта формула пригодна для текстовых данных. Подобно формуле [5], она использует концепцию «большого текста». В качестве аргумента искомое_значение используется повтор буквы z 255 раз. Зачем так много? На всякий случай)) Эта формула не обнаружит ячейки, содержащие Омегу, но посчитают текстовые строки нулевой длины внутри диапазона.

Все концепции о нахождении в столбце относительной позиции последнего значимого элемента, будут также работать и для строк (рис. 13.7).

Рис. 13.7. Последняя значимая позиция в строке – четвертая

Рис. 13.7. Последняя значимая позиция в строке – четвертая

Совместное использование функций ИНДЕКС и ПОИСКПОЗ позволяет получать значение последнего элемента в диапазоне (рис. 13.8 и 13.9). На рис. 13.8 одно значение (Е2) возвращает последнее число, а другое (Е4) – идентификатор (ID) последней строки. На рис. 13.9 просто добавлено еще две строки данных.

Рис. 13.8. Формула ищет последние значения в столбцах А и С для четырех строк исходных данных

Рис. 13.8. Формула ищет последние значения в столбцах А и С для четырех строк исходных данных

Рис. 13.9. Если в исходные данные добвать еще две строки, формулы вернут правильные значения

Рис. 13.9. Если в исходные данные добвать еще две строки, формулы вернут правильные значения

Используя функции ИНДЕКС и ПОИСКПОЗ можно создавать динамические диапазоны, которые расширяются и сокращаются при изменении объема исходных данных. Как показано на рис. 13.10, в ячейке E2 у вас раскрывающийся список на основе текстовых элементов диапазона $A$2:$A$5, а в ячейке F2 формула на основе ВПР, которая обращается к диапазону $A$2:$C$5 (аргумент таблица функции ВПР).

Рис. 13.10. Раскрывающийся список и функция ВПР

Рис. 13.10. Раскрывающийся список и функция ВПР

Проблема с этой формулой заключается в том, что при добавлении строк исходных данных, ни раскрывающийся список, ни аргумент таблица функции ВПР, не будут обновляться. Если вы добавляете новую запись, вы бы хотели, чтобы аргумент таблица изменился с $A$2:$C$5 на $A$2:$C$6. Обратите внимание, что оба диапазона в качестве начальной ссылаются на одну и туже ячейку – $A$2. Вот если бы существовал способ получить ссылку на последнюю ячейку в диапазоне после добавления или удаления записи! И такой способ есть! Используйте только что изученную комбинацию функций ИНДЕКС и ПОИСКПОЗ.

Вы можете создать динамический диапазон, поместив функцию ИНДЕКС в саму ссылку в качестве второй составляющей. Например, $A$2 и $C$5 по отдельности просто ссылки на ячейки. Однако, если вы поместите двоеточие между ними ($A$2:$C$5), они становятся началом и окончанием ссылки на диапазон ячеек. Статический диапазон выглядит так: $A$2:$C$5. Динамический диапазон, так $A$2:ИНДЕКС($C$2:$C$8;ПОИСКПОЗ(9,99E+307;$C$2:$C$8)). Поскольку функция ИНДЕКС находится за двоеточием и началом ссылки на диапазон, она больше не будет извлекать последний элемент в массиве; а вернет адрес ячейки (ссылку на ячейку) последнего элемента в диапазоне. Фантастика, но контекст изменил работу функции! Сама по себе функция ИНДЕКС возвращает содержимое ячейки. Функция ИНДЕКС, как элемент ссылки на диапазон, возвращает ссылку на ячейку (адрес). Чтобы увидеть, как это работает, создайте формулу, как в ячейке E2 на рис. 13.11.

Рис. 13.11. Контекст меняет все

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

Чтобы показать, что эта формула действительно создала динамический диапазон, выделяйте различные фрагмены формулы и с помощью F9 посмотрите, какие результаты вы получите:

  • Рис. 13.12. Выделите полностью функцию ИНДЕКС.
  • Рис. 13.13. Нажмите F9, и вы увидите, что функция просто возвращает значение последнего элемента. Это еще раз показывает, что обычно ИНДЕКС возвращает содержимое ячейки. Отменить расчет, нажав Ctrl+Z.
  • Рис. 13.14. Выделите всю формулу и нажмите F9. Поскольку функция ИНДЕКС помещена в контекст ссылки, теперь формула возвращает весь диапазон в синтаксисе массива.
  • Рис. 13.15. Введите формулу с помощью Ctrl+Shift+Enter. Помните, что это массив из многих элементов, следовательно, формула, введенная в одну ячейку не может отобразить более одного элемента одновременно. Отображается только первый элемент массива.
  • Рис. 13.16. Выполните вычисление формулы, перейдя на вкладку Формулы → область Зависимости формулВычислить формулы (или, удерживая Alt, нажмите последовательно Л, Ч). Откроется окно Вычисление формулы, и вы увидите, что ИНДЕКС возвращает ссылку на ячейку $C$5.

Рис. 13.12. Выделяя полностью функцию ИНДЕКС со всем ее содержимым

Рис. 13.12. Выделяя полностью функцию ИНДЕКС со всем ее содержимым

Рис. 13.13. Функция ИНДЕКС сама по себе возвращает содержимое последнего элемента

Рис. 13.13. Функция ИНДЕКС сама по себе возвращает содержимое последнего элемента

Рис. 13.14. Выделение начальной ссылки, двоеточия и ИНДЕКС возвращает весь диапазон

Рис. 13.14. Выделение начальной ссылки, двоеточия и ИНДЕКС возвращает весь диапазон

Рис. 13.15. Хотя у вас формула массива, в одной ячейке может отражаться только один элемент

Рис. 13.15. Хотя у вас формула массива, в одной ячейке может отражаться только один элемент

Рис. 13.16. Функция ИНДЕКС в контексте ссылки на диапазон

Рис. 13.16. Функция ИНДЕКС в контексте ссылки на диапазон

Как показано на рис. 13.18–13.20, формула справляется с добавлением и удалением записей, а также с пустыми ячейками внутри диапазона.

Рис. 13.18. Динамический диапазон на основе формулы работает при добавлении записи

Рис. 13.18. Динамический диапазон на основе формулы работает при добавлении записи

Рис. 13.19. А также при удалении

Рис. 13.19. А также при удалении

Рис. 13.20. Динамический диапазон работает при наличии пустой ячейки

Рис. 19.20. Динамический диапазон работает при наличии пустой ячейки

При создании формулы динамического диапазона учтите следующее:

  • Выделите достаточное количество строк, чтобы вместить все потенциальные записи. Например, если число записей никогда не превысит 50, используйте формулу =$A$2:ИНДЕКС($C$2:$C$51;ПОИСКПОЗ(9,99E+307;$C$2:$C$51)). Если вы не можете предположить, сколько будет записей, используйте что-то типа: =$A$2:ИНДЕКС($C:$C;ПОИСКПОЗ(9,99E+307;$C:$C)).
  • Не набирайте лишние данные ниже в ячейках, относящихся к диапазону. Они ненароком могут быть засчитаны.

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

Более того, старайтесь присваивать имя любому динамическому диапазону. В дальнейшем вы сможете использовать имя в формулах, диаграммах, сводных таблицах, коде VBA и др. Если вы присвоили имя диапазону на основе формулы, которая требует Ctrl+Shift+Enter, и затем используете имя в другой формуле, эта последняя уже не будет требовать нажатия Ctrl+Shift+Enter (подробнее см. главу 23).

Я обычно начинаю с создания формулы в ячейке, а затем копирую ее в буфер и вставляю в поле Диапазон диалогового окна Создание имени. Это намного проще, чем создавать формулу непосредственно в диалоговом окне. На рис. 13.21 показано, как можно создать формулы в ячейках Е2 и Е4, соответственно, для выпадающего списка и таблицы подстановки.

Рис. 13.21. Для начала создайте формулы динамического диапазона в ячейках Е2 и Е4

Рис. 13.21. Для начала создайте формулы динамического диапазона в ячейках Е2 и Е4

После того как вы создали формулу для раскрывающегося списка (в ячейке E4), скопируйте ее в буфер. Откройте диалоговое окно Диспетчер имен, нажав Ctrl+F3, а затем нажмите на кнопку Создать. В открывшемся окне Создание имени ведите имя без пробелов в текстовом поле Имя (рис. 13.22). Введите примечание, чтобы в последствии вспомнить, что вы, собственно говоря, создали. Вставьте из буфера формулу в поле Диапазон. Нажмите Ok.

Рис. 13.22. Присвоение имени динамическому диапазону идентификаторов

Рис. 13.22. Присвоение имени динамическому диапазону идентификаторов

Создайте раскрывающийся список. Выделите ячейку Е7. Откройте окно Проверка вводимых значений, нажав Alt а затем последовательно Ы, Ы, В, или пройдите по меню ДанныеПроверка данныхПроверка данных (рис. 13.23). Выберите тип данных Список. В поле Формула введите знак равенства и имя Список.

Рис. 13.23. Введите имя диапазона в окно Проверки вводимых значений

Рис. 13.23. Введите имя диапазона в окно Проверка вводимых значений

Теперь, когда у вас в ячейке Е7 есть раскрывающийся список на основе поименованного динамического диапазона, можно ввести формулу ВПР в ячейку F7. Можете воспользоваться примером, как на рис. 13.24, или можете создать имя для динамической таблицы подстановки и затем использовать это имя в формуле ВПР. После ввода формулы в ячейку F7, вы можете скопировать ее в ячейку G7. Обратите внимание, как оригинально задан аргумент номер_столбца.

Рис. 13.24. Аргумент таблица функции ВПР содержит формулу динамического диапазона

Рис. 13.24. Аргумент таблица функции ВПР содержит формулу динамического диапазона

Теперь, когда у вас две формулы динамического диапазона (в выпадающем списке и внутри ВПР), вы можете протестировать эту конструкцию (рис. 13.25). Если вы добавляете данные, и раскрывающийся список, и формула ВПР обновятся. Они также работают при удалении данных.

Рис. 13.25. При добавлении данных динамический диапазон работает отлично

Рис. 13.25. При добавлении данных динамический диапазон работает отлично

В некоторых случаях у вас может быть набор данных, который содержит пустую строку или в котором отсутствуют некоторые данные. При этом вы бы хотели определить динамический диапазон так, чтобы он включал в себя все значения (рис. 13.26). На рис. 13.27 приведены две формулы, которые определяют диапазон $A$2:$C$6 несмотря на пустую строку и недостающие данные.

Рис. 13.26. Отсутствующие данные могут помешать «правильно» определить динамический диапазон

Рис. 13.26. Отсутствующие данные могут помешать «правильно» определить динамический диапазон, а вы бы хотели, чтобы он включал все данные $A$2:$C$6

Рис. 13.27. Эти формулы определяет диапазон A2_C6

Рис. 13.27. Эти формулы определяет диапазон $A$2:$C$6

Давайте рассмотрим еще более необычную ситуацию. Что, если у вас могут быть ячейки, содержащие пробелы (невидимые глазу)!? Если вы не хотите включать их в динамический диапазон, добавьте функцию СЖПРОБЕЛЫ, которая удаляет все пробелы, за исключением одного пробела между словами (рис. 13.28). А как вы помните, текстовые строки нулевой длины в диапазон не включаются.

Рис. 13.28. Формула не включит в диапазон ячейки с пробелами и текстовыми строками нулевой длины

Рис. 13.28. Формула не включит в диапазон ячейки с пробелами и текстовыми строками нулевой длины

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

Рис. 13.29

Использование функции СМЕЩ для создания динамического диапазона

Функция СМЕЩ имеет пять аргументов:

Рис. 13.29а. Функция СМЕЩ

Функция СМЕЩ говорит: сместись от отправной точки (аргумент ссылка) на столько-то строк и столбцов (смещ_по_строкам и смещ_по_столбцам), и от этой новой ячейки выбери диапазон такой-то высоты и ширины (аргументы высота и ширина). Заметьте, что функция СМЕЩ определяет диапазон. На рис 13.30 показан пример СМЕЩ, который предполагает, что в диапазоне А2:А5 могут быть только числа и не будет пустых ячеек (иначе функция СЧЁТ не справится с определением количества непустых ячеек).

Рис. 13.30. Функция СМЕЩ определяет диапазон $A$2_$A$3

Рис. 13.30. Функция СМЕЩ определяет диапазон $A$2:$A$3

Динамический диапазон начинается в ячейке $A$2 (аргумент ссылка), точка отсчета диапазона не смещается, ни по строкам, ни по столбцам (второй и третий аргументы опущены); высота диапазона 2 (именно это значение возвращает формула СЧЁТ($A$2:$A$5); ширина диапазона 1, потому что аргумент ширина также опущен. Обратите внимание, что в случае, если аргументы опущены, то смещ_по_строкам и смещ_по_столбцам принимают значение 0, а высота и ширина – значения, соответствующие ширине и высоте диапазона в аргументе ссылка (в нашем случае это одна ячейка $A$2, и следовательно, ширина и высота по умолчанию равняются 1). При этом аргументы смещ_по_строкам и смещ_по_столбцам являются обязательными, а высота и ширина – необязательными. Например, формула =СМЕЩ($A$2) вернет ошибку – Для данной функции введено слишком мало аргументов, а формула =СМЕЩ($A$2;;) вернет значение 174. Ну, и наконец, функция СМЕЩ не требует Ctrl+Shift+Enter.

Если вам нужно создать динамический диапазон как часть таблицы, какой метод предпочесть: ИНДЕКС или СМЕЩ? На рис. 13.31 приведены данные, включающие название города, инициалы и телефон представителя. Названия некоторых городов будут повторяться, потому что у вас может быть более одного представителя в каждом городе. Вы хотите создать динамический диапазон инициалов, основанный на названии города (помещенном в ячейку E2). Например, если у вас в Е2 Сиэтл, вы бы хотели извлечь диапазон $B$4:$B$6. Если у вас в ячейке E2 Сан-Франциско (SF), вы бы хотели извлечь диапазон $B$2:$B$3. Такая формула может быть использована, например, для формирования выпадающего списка, в котором вы хотите видеть инициалы представителей одного города, указанного в ячейке. На рис. 13.31 приведены три формулы, которые могут выполнить эту задачу.

Рис. 13.31. Функции СМЕЩ и Индекс для извлечения динамичсекого диапазона из таблицы

Рис. 13.31. Функции СМЕЩ и Индекс для извлечения динамичсекого диапазона из таблицы

Давайте подробнее рассмотрим работу этих формул.

Формула [1] {=СМЕЩ($B$1;ПОИСКПОЗ($E$2;$A$2:$A$6;0);;СЧЁТЕСЛИ($A$2:$A$6;$E$2))}

  • Аргумент ссылка функции СМЕЩ обозначает точку отсчета – ячейку $B$1.
  • ПОИСКПОЗ находит относительное положение Сиэтла в диапазоне A2:A6 и возвращает 3 – первое вхождение Сиэтла в таблице. Таким образом, аргумент смещ_по_строкам = 3. Начальная ячейка для извлекаемого диапазона – $B$4.
  • Аргумент смещ_по_столбцам опущен, так что остаемся в столбце В.
  • СЧЁТЕСЛИ насчитывает три Сиэтла в диапазоне A2:A6. Потому аргумент высота функции СМЕЩ = 3; динамический диапазон будет включать три строки.
  • Аргумент ширина пуст, и поэтому динамический диапазон будет такой же ширины, как и диапазон в аргументе ссылка; в нашем случае = 1.
  • Динамический диапазон определяется, как $B$4:$B$6, когда в ячейке E2 Сиэтл и $B$2:$B$3, когда – SF (проверьте!).

Формула [2] {=ИНДЕКС($B$2:$B$6;ПОИСКПОЗ($E$2;$A$2:$A$6;0)): ИНДЕКС($B$2:$B$6;ПОИСКПОЗ($E$2;$A$2:$A$6;0)+СЧЁТЕСЛИ($A$2:$A$6;$E$2)-1)}

  • Эта формула динамического диапазона использует две функции ИНДЕКС, чтобы найти начальную и конечную ссылки диапазона.
  • Первая формула ИНДЕКС($B$2:$B$6;ПОИСКПОЗ($E$2;$A$2:$A$6;0)) возвращает ссылку $B$4 (помните, что в соответствующем контексте ИНДЕКС возвращает не значение, хранящееся в ячейке, а ссылку на ячейку).
  • Формула принимает вид {=$B$4:ИНДЕКС($B$2:$B$6;ПОИСКПОЗ($E$2;$A$2:$A$6;0)+ СЧЁТЕСЛИ($A$2:$A$6;$E$2)-1)}
  • ПОИСКПОЗ($E$2;$A$2:$A$6;0)+СЧЁТЕСЛИ($A$2:$A$6;$E$2)-1 → 3 + СЧЁТЕСЛИ($A$2:$A$6;$E$2)-1 → 3 + 3 – 1 = 5
  • Формула примет вид =$B$4:ИНДЕКС($B$2:$B$6;5) → $B$4:$B$6.

Формула [3] {=ИНДЕКС($B$2:$B$6;ПОИСКПОЗ($E$2;$A$2:$A$6;0)): ИНДЕКС($B$2:$B$6;ПОИСКПОЗ(2;1/($A$2:$A$6=$E$2)))}

  • Эта формула аналогична предыдущей, за исключением того, что вместо сочетания ПОИСКПОЗ и СЧЁТЕСЛИ для определения позиции последнего вхождения Сиэтла, здесь используется оператор массива.
  • Вот этот фрагмент формулы: ИНДЕКС($B$2:$B$6;ПОИСКПОЗ(2;1/($A$2:$A$6=$E$2))).
  • ПОИСКПОЗ(2;1/($A$2:$A$6=$E$2))) → ПОИСКПОЗ(2;1/($A$2:$A$6= «Seattle»))) → ПОИСКПОЗ(2;1/({ЛОЖЬ:ЛОЖЬ:ИСТИНА:ИСТИНА:ИСТИНА})) → ПОИСКПОЗ(2;{#ДЕЛ/0!:#ДЕЛ/0!:1:1:1}) → 5
  • Формула далее примет вид =$B$4:ИНДЕКС($B$2:$B$6;5) → $B$4:$B$6.

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

Диаграммы с использованием имен на основе формул динамического диапазона

Одно из основных применений формул динамического диапазона – это диаграммы. Например, если у вас есть набор данных, которые постоянно добавляются, очень удобно, если новые данные автоматически отображаются на диаграмме. Другой пример – график конкретного набора данных, выбираемый из большого числа различных наборов данных на основе критерия, хранящегося в ячейке. В обоих случаях, чтобы создать диаграмму на основе динамического диапазона:

  1. Создайте динамические диапазоны на основе формул.
  2. Присвойте каждому диапазону имя.
  3. Создайте диаграмму.
  4. Вставить имена в диаграмму.

Рассмотрим примеры. На рис. 13.34 цель – построить гистограмму, где по оси Х будут инициалы представителей, а по оси Y – продажи; гистограмма должна быть построена только для города, хранящегося в ячейке F1. Ячейка А8 содержит формулу динамического диапазона для продаж, а ячейка A9 – для представителей. Чтобы показать различные подходы, одна формула основана на функции СМЕЩ, а вторая – ИНДЕКС. Вы можете выбрать тот, который вам больше нравится. Вы используете динамический диапазон представителей для горизонтальной оси, и динамический диапазон продаж для вертикальной оси. Далее, вам потребуется создать два имени. На рис. 13.35 показано создание одного из них – для продаж. По аналогии создайте имя для представителей.

Рис. 13.34. Создание формулы на основе динамического диапазона

Рис. 13.34. Создание формулы на основе динамического диапазона

Рис. 13.35. Присвоение имени формуле динамического диапазона продаж

Рис. 13.35. Присвоение имени формуле динамического диапазона продаж

Создайте диаграмму на основе значений в ячейках В1:С6 (рис. 13.36).

Рис. 13.36. Диаграмма на основе значений в ячейках В1_С6

Рис. 13.36. Диаграмма на основе значений в ячейках В1:С6

Далее, вам нужно заменить диапазоны ячеек диаграммы на имена динамических диапазонов. Чтобы сделать это, щелкните правой кнопкой мыши на диаграмме, и кликните в контекстном меню на Выбрать данные, или перейдите на вкладку Работа с диаграммамиКонструктор и кликните на кнопке Выбрать данные. Далее, выделите ряд Продажи в левой части окна и щелкните на кнопку Изменить (рис. 13.37).

Рис. 13.37. Выберите ряд Продажи и кликните на кнопку Изменить

Рис. 13.37. Выберите ряд Продажи и кликните на кнопку Изменить

В открывшемся окне Изменение ряда выделите только диапазон ячеек в области Значения. Не выделяйте ссылку на лист (рис. 13.38). Удалите выделенные ячейки, и введите имя диапазона (рис. 13.39). Убедитесь, что вы не удалили восклицательный знак. Нажмите Оk.

Рис. 13.38. Выделите только диапазон ячеек в ряду Значения, не трогая название листа

Рис. 13.38. Выделите только диапазон ячеек в области Значения, не трогая название листа

Рис. 13.39. После удаления ссылки на ячейки введите имя диапазона

Рис. 13.39. После удаления ссылки на ячейки введите имя диапазона

Аналогичным образом введите имя Представители вместо ссылки на ячейки (рис. 13.40). Кликните на кнопку Изменить в правой части окна Выбор исчтоника данных (а); в открывшемся окне Подписи оси (б) выделите только диапазон ячеек. Не выделяйте ссылку на лист. Удалите ссылку на ячейки и введите имя диапазона Представители (в). Убедитесь, что вы не удалили восклицательный знак. Нажмите Оk.

Рис. 13.40. Кликните на кнопку Изменить в правой части окна Выбор исчтоника данных

Рис. 13.40. Введите имя Представители вместо ссылки на ячейки

Как показано на рис. 13.41, вы можете проверить как диаграмма отреагирует на изменение города в ячейке F1.

Рис. 13.41. Выбрав в ячейке F1 Сиэтл (а) или Сан-Франциско (б), диаграмма отобразит только соответствующих городу представителей

Рис. 13.41. Выбрав в ячейке F1 Сиэтл (а) или Сан-Франциско (б), диаграмма отобразит продажи только соответствующих городу представителей

Создание динамической диаграммы с помощью сводной таблицы:

  1. Создайте сводную таблицу (рис. 13.43).
  2. Вставьте срез (в Excel 2013 вкладка Работа со сводными таблицамиАнализ → область Фильтры → кнопка Вставить срез).
  3. Виберите город в срезе и нажмите Alt+F1; создастся диаграмма по умолчанию; отформатируйте ее.

Рис. 13.43. Фильтр среза сводной таблицы позволяет создать динамическую диаграмму

Рис. 13.43. Фильтр среза сводной таблицы позволяет создать динамическую диаграмму

В следующем примере динамический диапазон позволяет получать пять последних чисел столбца (рис. 13.44). Создайте динамический диапазон на основе функций ИНДЕКС и ПОИСКПОЗ. Формула [1] находит адрес последней ячейке в столбце, а адрес первой просто на 4 строки меньше. При этом формула [1] включит в суммирование ячейку А6 (пустую), как одну их пяти последних. Если вы этого не хотите, воспользуйтесь формулой [2].

Рис. 13.44. Формула суммирующая пять последних значение в столбце

Рис. 13.44. Формула суммирующая пять последних значение в столбце

Формула [2] для ввода требует Ctrl+Shift+Enter (помните козырное правило функции ЕСЛИ?). Для создания формулы, которая бы не требовала нажатия Ctrl+Shift+Enter, сохраните фрагмент с ЕСЛИ под определенным именем, а затем подставляйте это имя в большие формулы. Например, сохраните целиком аргумент функции [2] СУММ под именем ПоследниеПять (рис. 13.45). Теперь формула не потребует нажатия Ctrl+Shift+Enter.

Рис. 13.45. Создайте имя, и подставьте его в формулу; это избавит вас от нажатия Ctrl+Shift+Enter

Рис. 13.45. Создайте имя, и подставьте его в формулу; это избавит вас от нажатия Ctrl+Shift+Enter

Давайте подробнее рассмотрим работу фрагмента формулы [2]: НАИБОЛЬШИЙ(ЕСЛИ(ЕЧИСЛО($A$2:$A$10);СТРОКА($A$2:$A$10)-СТРОКА($A$2)+1);$C$2)

Этот фрагмент должен вернуть относительные позиции в массиве пяти последних чисел без учета пустых ячеек: НАИБОЛЬШИЙ(ЕСЛИ(ЕЧИСЛО($A$2:$A$10);СТРОКА($A$2:$A$10)-СТРОКА($A$2)+1); $C$2) → НАИБОЛЬШИЙ(ЕСЛИ({ИСТИНА:ИСТИНА:ИСТИНА:ИСТИНА:ЛОЖЬ: ИСТИНА:ИСТИНА:ЛОЖЬ: ЛОЖЬ};СТРОКА($A$2:$A$10)-СТРОКА($A$2)+1);$C$2) → НАИБОЛЬШИЙ({1:2:3:4:ЛОЖЬ:6:7:ЛОЖЬ: ЛОЖЬ};5) → 2. Функция ИНДЕКС затем использует этот параметр 2 для выбора адреса второго элемнета в массиве $A$2:$A$10 в качестве начальной ссылки для динамического диапазона ($A$3).

Теперь мы обладаем достаточными навыками, чтобы написать формулу (см. рис. 13.3), которую можно скопировать вдоль столбца, а не использовать несколько различных формул в заранее определенных ячейках (как это было на рис. 13.3). С помощью динамического диапазона мы можем извлечь только те значения рейтингов, которые относятся к определенному семестру и отвечают пороговому критерию (рис. 13.46). В ячейке C4 вы создали формулу, которую можно скопировать вниз, чтобы подсчитать количество ркйтингов за семестр превышающих порог в 2,5 балла. Вы можете использовать функцию СЧЁТЕСЛИ, для которой просматриваемый диапазон будет меняться в различных ячейках столбца С.

Примечание. Аргумент диапазон функции СЧЁТЕСЛИ не может обрабатывать операторы массива (см. главу 10). Но, поскольку функция ИНДЕКС возвращает не массив, а ссылку, функция СЧЁТЕСЛИ справляется со своей работой.

Рис. 13.46. Использование динамического диапазона

Рис. 13.46. Использование динамического диапазона позволяет извлечь только те значения, которые относятся к строкам после предыдущего вхождения текста в столбце А; например, в ячейке С12, анализируются только значения В10:В12, так как предыдущий текст встретился в ячейке А10

Рассмотрим подробнее работу формулы, например в ячейке C9. Вам нужен динамический диапазон, который будет включать только значения, введенные после последнего ввода текста в столбце А.

1. =ЕСЛИ(A10<>"";СЧЁТЕСЛИ(ИНДЕКС($B$3:B9;ПОИСКПОЗ("ЯЯЯ";$A$3:A9)): B9;">"&$C$1);"")

Обратите внимание, что диапазоны, первоначально введенные в формулу в ячейке С4, расширились до $B$3:B9 и $A$3:A9. Элемент формулы ПОИСКПОЗ("ЯЯЯ";$A$3:A9) возвращает относительное положение (6) в аргумент номер_строки функции ИНДЕКС, которое соответствует относительному положению текста Осень-12 в диапазоне $A$3:A9.[5]

2. =ЕСЛИ(A10<>"";СЧЁТЕСЛИ(ИНДЕКС($B$3:B9;6):B9;">"&$C$1);"")

Элемент формулы ИНДЕКС($B$3:B9;6) возвращает ссылку на ячейку B8.

3. =ЕСЛИ(A10<>"";СЧЁТЕСЛИ(В8:B9;">"&$C$1);"") → =ЕСЛИ(A10<>"",СЧЁТЕСЛИ(B8:B9,">2,5");"") → =ЕСЛИ(A10<>"";1;"")

Т.к. ячейка A10 не является пустой, ЕСЛИ возвращает значение 1. Результат работы формулы в ячейке C9 – единица.


[1] Мне встретился и более широкий список.

[3] Извините, но я не смог понять, чтобы это значило…

[4] Надо заметить, что современные шрифты на основе шестнадцатеричного Юникода обладают существенно большим набором символов, так что греческая Омега уже не является символом с самым большим кодом.

[5] Любопытно, что в оригинальном (английском) тексте использовался другой символ в качестве «большого текста» – ПОИСКПОЗ("Ω";$A$3:A9); в нашем случае эта функция возвращала ошибку, так как код любого русского символа больше кода греческой буквы Омега.

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

Одна из неприятностей, связанных с поддержкой списков — необходимость править диапазон в Формулы > Диспетчер имён после каждого добавления/удаления строк данных в исходном диапазоне. Чтобы избежать подобной ситуации, можно создать динамический диапазон, применив формулы вместо жёстко заданных координат. Чаще всего используется функция СМЕЩ, как показано ниже. Запрос «Excel динамический диапазон» в любом поисковике вернёт сотни ссылок, большинство из которых будут вариантами формулы:

=СМЕЩ(Лист!$A$1, 0, 0, СЧЁТЗ ($A:$A), 1)

СМЕЩ возвращает диапазон, модифицированный относительно базового – пункт Ссылка. Смещпострокам и Смещпостолбцам смещают начало диапазона на соответствующее число строк и столбцов. Высота и Ширина задают количество строк и столбцов в диапазоне.

Ссылка: обычно указывается верхняя левая ячейка именованного диапазона.

Смещпострокам: обычно 0, т.к. стартовую позицию мы уже определили.

Смещпостолбцам: так же обычно 0, по той же самой причине.

Высота: количество строк нашего диапазона (здесь будет формула, см. ниже).

Ширина: количество столбцов в нашем диапазоне (минимум 1).

Понятно, что функция СМЕЩ сама по себе не слишком полезна для наших целей. Если вы собираетесь использовать статические числа, то откажитесь от СМЕЩ, непосредственно прописав диапазон. Причина, по которой мы используем СМЕЩ — возможность замены параметров (аргументов) формулами. Они и позволяют получить динамическую часть.

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

В действительности, если вы внимательно читали, мы получим диапазон высотой в то количество строк, которое мы получили от СЧЁТЗ. Если в диапазоне присутствуют пустые ячейки, то выходной диапазон окажется короче, чем необходимо, и последние ячейки потеряются. Помните об этой тонкости.

Наиболее часто динамический диапазон используется в следующих случаях:

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

Если у нас есть таблица, в которой меняется количество строк, и есть формулы, использующие ссылку на эту таблицу, то применение динамического диапазона вполне логичный шаг. Допустим у нас есть «база данных», в которую мы заносим каждое обращение клиента, и мы хотим подсчитать количество обращений определённого клиента. Тогда можно сделать нечто такое:

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

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

Начнем с простейшего динамического именованного диапазона, который будет расширяться вниз по одному столбцу, но только до тех пор, пока в этом столбце есть записи. Например, если в столбце А есть 10 последовательных строк с данными, динамический именованный диапазон будет охватывать диапазон А1:А10. Чтобы создать базовый динамический именованный диапазон, сделайте следующее.

Выберите команду Вставка → Имя → Присвоить (Insert → Name → Define) и в поле Имя (Names in workbook) введите MyRange. В поле Формула (Refers to) введите следующую формулу: =OFFSET($A$1;0;0;COUNTA($A$l:$A$100);l), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А$1:$А$100);1). Теперь щелкните на кнопке Добавить (Add), затем щелкните на кнопке ОК.
[stextbox id=»warning»]При определении диапазона для функции COUNTA (СЧЁТЗ) не следует включать столбец данных полностью, чтобы функции не пришлось при вычислении учитывать, возможно, тысячи ненужных ячеек.[/stextbox]
Теперь, если вы добавите некоторые данные в столбец А, этот диапазон будет содержать все данные в соседних строках, начиная с ячейки А1. Если вы хотите проверить динамический именованный диапазон, это можно сделать несколькими способами.

К сожалению, динамические именованные диапазоны нельзя проверить в стандартном поле имени слева от строки формул. Несмотря на это, можно щелкнуть в поле имени, ввести имя MyRange и нажать клавишу Enter. Excel автоматически выделит диапазон. Конечно, можно воспользоваться и диалоговым окном Переход (Go То), выбрав команду Правка → Перейти (Edit → Go To) (сочетание клавиш Ctrl/Apple+G). В поле Ссылка (Reference) введите MyRange и щелкните на кнопке ОК.

В динамическом именованном диапазоне, который вы создали в предыдущем примере, функция СЧЁТЗ (COUNTA) стоит на месте аргумента Высота (Height) функции СМЕЩ (OFFSET).
[stextbox id=»warning»]Помните, что функция СЧЁТЗ (COUNTA) подсчитывает все непустые ячейки: будут учитываться и формулы в ячейках, возвращающих пустой текст («»).[/stextbox]
Если у вас есть список, который содержит только числовые данные, а в конце списка вы хотите записать текстовое значение, но не помещать его в динамический именованный диапазон, можно заменить функцию СЧЁТЗ (COUNTA) стандартной функцией Excel СЧЁТ (COUNT). Она подсчитывает только ячейки, содержащие числовые данные.

В следующем примере динамический именованный диапазон мы применим для определения таблицы данных, которая должна быть динамической. Для этогоn в поле Формула (Refers to) введите следующую формулу: =OFFSET($A$1;0;0;COUNTA($A$1:$A$100);COUNTA($1:$1)), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А$1:$А$100);СЧЁТЗ($1:$1)). Теперь динамический именованный диапазон будет расширяться на столько записей, сколько есть в столбце А, и на столько строк, сколько заголовков в строке 1. Если вы уверены, что количество столбцов в таблице данных меняться не будет, можете заменить вторую функцию СЧЁТЗ (COUNTA) постоянным числом, например, 10.

Единственная проблема при использовании динамического именованного диапазона для таблицы данных заключается в том, что предполагается, что столбец А определяет максимальную длину таблицы. Чаще всего это так, однако иногда самым длинным столбцом может быть другой столбец таблицы. Преодолеть эту проблему можно при помощи функции Excel МАКС (МАХ), которая возвращает самое большое число в диапазоне ячеек. В качестве примера создайте таблицу, как на рис. 3.4.

Рис. 3.4. Динамическая таблица данных и диалоговое окно присвоения имени

Рис. 3.4. Динамическая таблица данных и диалоговое окно присвоения имени

В строке 1 хранятся функции СЧЁТЗ (COUNTA), которые ссылаются вниз на соответствующий столбец и, таким образом, возвращают количество записей в каждом столбце. Функция МАКС (МАХ) будет использоваться в качестве аргумента Высота (Height) функции СМЕЩ (OFFSET). Это гарантирует, что динамический именованный диапазон для этой таблицы всегда будет расширяться вниз на столько ячеек, сколько их содержится в самом длинном столбце в таблице. Конечно же, можно скрыть строку 1, так как пользователю совершенно не нужно ее видеть.

Во всех этих примерах мы предполагали, что данные всегда будут размещаться в соседних строках, между которыми не будет пустых ячеек. Хотя именно этот способ настройки списка или таблицы данных является правильным, иногда он становится неуправляемым.

В следующем примере список чисел в столбце А также содержит пустые ячейки. Это означает, что, если вы попытаетесь воспользоваться функцией СЧЁТ (COUNT) или СЧЁТЗ (COUNTA), динамический именованный диапазон закончится раньше, чем последняя ячейка с данными. Взгляните, например, на рис. 3.5.

Рис. 3.5. Диапазон чисел и диалоговое окно присвоения имени

Рис. 3.5. Диапазон чисел и диалоговое окно присвоения имени

В этом случае, хотя последнее число диапазона в действительности находится в строке 10, динамический диапазон расширяется вниз только до шестой строки. Причина этого лежит в функции СЧЁТ (COUNT), которая считает значения в ячейках от А1 до А100. Так как в списке только шесть числовых значений, диапазон содержит только шесть строк.

Чтобы преодолеть эту проблему, воспользуйтесь функцией Excel ПОИСКПОЗ (MATCH). Функция ПОИСКПОЗ (MATCH) возвращает относительную позицию элемента массива, соответствующего указанному значению в указанном порядке. Например, если вы примените следующую функцию ПОИСКПОЗ (MATCH): =МАТСН(6;$А$1:$А$100;0), в русской версии Excel =ПОИСКПОЗ(6;$А$1:$А$100;0), к тому же набору чисел, что и на рис. 3.5, она вернет число 10, представляющее строку 10 столбца А. Она возвращает 10, так как вы приказали функции найти число 6 в диапазоне А1:А100.

Очевидно, когда вы используете функцию ПОИСКПОЗ (MATCH) в динамическом именованном диапазоне, последнее число диапазона, вероятно, заранее неизвестно. Таким образом, понадобится задать в функции поиск слишком большого числа, которое никогда не появится в диапазоне, и изменить ее последний аргумент с 0 на 1.

В предыдущем примере вы приказали функции ПОИСКПОЗ (MATCH) найти в точности число 6, не больше и не меньше. Заменив 0 на 1, вы заставите функцию искать самое большое значение, меньшее или равное указанному. Для этого воспользуйтесь формулой =МАТСН(1Е+306;$А$1:$А$100;1), в русской версии Excel =ПОИСКПОЗ(1Е+306;$А$1:$А$100;1).

Чтобы создать динамический именованный диапазон, который будет расширяться до последней строки, содержащей число (независимо от наличия пустых ячеек до нее), введите следующую формулу в поле Формула (Refers to) диалогового окна Присвоение имени (Define Name) (рис. 3.6): =OFFSET(Sheet2!$A$1;0;0;MATCH(lE+306;Sheet2!$A$l:$A$100;1);1), в русской версии Excel =CMEЩ(Sheet2!$A$1;0;0;ПОИСКПОЗ(1E+306;Sheet2!$A$l:$A$100;1);1).

Рис. 3.6. Динамический диапазон, расширяющийся до последней записи, содержащей число

Рис. 3.6. Динамический диапазон, расширяющийся до последней записи, содержащей число

Следующий логический тип динамических именованных диапазонов, вытекающий из данного, — это диапазон, расширяющийся до последней текстовой записи независимо от пустых ячеек в списке или таблице. Для этого измените функцию ПОИСКПОЗ (MATCH) таким образом: МАТСН(«*»;$А$1:$А$100;-1), в русской версии Excel ПОИСКПОЗ(«*»;$А$1;$А$100;-1). Такая функция всегда возвращает номер строки, где содержится последняя текстовая запись в диапазоне $А$1:$А$100.

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

Для этого сначала вставьте две пустые строки выше списка. Выделите строки 1 и 2 и выберите команду Вставка → Строки (Insert → Row). В первой строке (строка 1) введите следующую функцию: =МАХ(МАТСН»*»;$А$3:$А$100;-1);МАТСН(1Е+306;$А$3:$А$100;1)), в русской версии Excel =МАКС(ПОИСКПОЗ»*»;$А$3:$А$100;-1);ПОИСКПОЗ(1Е+306;$А$3:$А$100;1)). В ячейке под ячейкой с формулой введите число 1. Ячейка еще ниже, под ячейкой с числом 1, должна содержать текстовый заголовок списка. Число 1 было добавлено, чтобы вторая функция ПОИСКПОЗ (MATCH) не вернула ошибку #N/A, если в диапазоне АЗ:А100 не окажется чисел. Первая функция ПОИСКПОЗ (MATCH) всегда найдет текст — в заголовке.

Дайте ячейке А1 имя MaxRow. Выберите команду Вставка → Имя → Присвоить (Insert → Name → Define), присвойте динамическому диапазону имя, например, MyList и в поле Формула (Refers to:) введите следующую формулу: =OFFSET(Sheet2!$A$3;0;0;MaxRow;1), в русской версии Excel =CMEЩ(Sheet2!$A$3;0;0;MaxRow;1).

В следующем списке перечислены типы динамических именованных диапазонов, которые могут оказаться полезными. Для веет этих примеров понадобится заполнить столбец А и текстом, и числовыми значениями. Кроме того, выберите команду Вставка → Имя → Присвоить (Insert → Name → Define) и в поле Имя (Names in workbook) введите имя, состоящее из одного слова (например, MyRange). Все, что будет изменяться, — это формула в поле Формула (Refers to).

Расширить диапазон на столько строк, сколько существует числовых записей: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;COUNT($A:$A);1), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТ($А;$А);1).

Расширить диапазон на столько строк, сколько существует числовых и текстовых записей: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;COUNTA($A:$A);1), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А:$А);1).

Расширить до последней числовой записи: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;MATCH(1E+306;$A:$A)), в русской версии Excel =СМЕЩ($А$1;0;0;ПОИСКПОЗ(1Е+306;$А:$А)). Если вы ожидаете, что может встретиться число, большее 1Е+306 (1 с 306 нулями), введите еще большее число.

Расширить до последней текстовой записи: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;МАТCH(«*»;$А:$А;-1)), в русской версии Excel =СМЕЩ($А$1;0;0;ПОИСКПОЗ(«*»;$А:$А;-1)).

Расширить вниз в зависимости от значения в другой ячейке:В ячейку В1 введите число 10, а затем в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;$B$1;1), в русской версии Excel =СМЕЩ($А$1;0;0;$В$1;1). Теперь измените число в ячейке В1, и диапазон изменится соответствующим образом.

Расширять вниз по одной строке каждый месяц: В поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0,MONTH(TODAY());1), в русской версии Excel =СМЕЩ($А$1;0;0.МЕСЯЦ(СЕГОДНЯ));1).

Расширять вниз по одной строке каждую неделю: В поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;WEEKNUM(TODAY());1), В русской версии Excel =СМЕЩ($А$1;0;0;ДЕНЬНЕД(СЕГОДНЯ());1)

Для последней формулы необходимо установить Пакет анализа (Analysis ToolPak). Это можно сделать командой Сервис → Надстройки (Tools → Add-ins).

Динамический диапазон в MS EXCEL

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

Динамический диапазон — это Именованный диапазон с изменяющимися границами. Границы диапазона изменяются в зависимости от количества значений в определенном диапазоне.

Имеется таблица продаж по месяцам некоторых товаров (см. Файл примера ):

Необходимо найти сумму продаж товаров в определенном месяце. Пользователь должен иметь возможность выбрать нужный ему месяц и получить итоговую сумму продаж. Выбор месяца пользователь должен осуществлять с помощью Выпадающего списка.

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

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

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

Для создания динамического диапазона:

  • на вкладке Формулы в группе Определенные имена выберите команду Присвоить имя;
  • в поле Имя введите: Месяц;
  • в поле Область выберите лист Книга;
  • в поле Диапазон введите формулу =СМЕЩ(лист1!$B$5;;;1;СЧЁТЗ(лист1!$B$5:$I$5))
  • нажмите ОК.

Теперь подробнее.
Любой диапазон в EXCEL задается координатами верхней левой и нижней правой ячейки диапазона. Исходной ячейкой, от которой отсчитывается положение нашего динамического диапазона, является ячейка B5. Если не заданы аргументы функции СМЕЩ() смещ_по_строкам, смещ_по_столбцам (как в нашем случае), то эта ячейка является левой верхней ячейкой диапазона. Нижняя правая ячейка диапазона определяется аргументами высота и ширина. В нашем случае значение высоты =1, а значение ширины диапазона равно результату вычисления формулы СЧЁТЗ(лист1!$B$5:$I$5) , т.е. 4 (в строке 5 присутствуют 4 месяца с января по апрель). Итак, адрес нижней правой ячейки нашего динамического диапазона определен – это E5.

При заполнении таблицы данными о продажах за май, июнь и т.д., формула СЧЁТЗ(лист1!$B$5:$I$5) будет возвращать число заполненных ячеек (количество названий месяцев) и соответственно определять новую ширину динамического диапазона, который в свою очередь будет формировать Выпадающий список.

ВНИМАНИЕ! При использовании функции СЧЕТЗ() необходимо убедиться в отсутствии пустых ячеек! Т.е. нужно заполнять перечень месяцев без пропусков.

Теперь создадим еще один динамический диапазон для суммирования продаж.

Для создания динамического диапазона:

  • на вкладке Формулы в группе Определенные имена выберите команду Присвоить имя;
  • в поле Имя введите: Продажи_за_месяц;
  • в поле Диапазон введите формулу = СМЕЩ(лист1!$A$6;;ПОИСКПОЗ(лист1!$C$1;лист1!$B$5:$I$5;0);12)
  • нажмите ОК.

Функция ПОИСКПОЗ() ищет в строке 5 (перечень месяцев) выбранный пользователем месяц (ячейка С1 с выпадающим списком) и возвращает соответствующий номер позиции в диапазоне поиска (названия месяцев должны быть уникальны, т.е. этот пример не годится для нескольких лет). На это число столбцов смещается левый верхний угол нашего динамического диапазона (от ячейки А6), высота диапазона не меняется и всегда равна 12 (при желании ее также можно сделать также динамической – зависящей от количества товаров в диапазоне).

И наконец, записав в ячейке С2 формулу = СУММ(Продажи_за_месяц) получим сумму продаж в выбранном месяце.

Или, например, в апреле.

Примечание:
Вместо формулы с функцией СМЕЩ() для подсчета заполненных месяцев можно использовать формулу с функцией ИНДЕКС() :
= $B$5:ИНДЕКС(B5:I5;СЧЁТЗ($B$5:$I$5))

Формула подсчитывает количество элементов в строке 5 (функция СЧЁТЗ() ) и определяет ссылку на последний элемент в строке (функция ИНДЕКС() ), тем самым возвращает ссылку на диапазон B5:E5.

Визуальное отображение динамического диапазона

Выделить текущий динамический диапазон можно с помощью Условного форматирования. В файле примера для ячеек диапазона B6:I14 применено правило Условного форматирования с формулой:
= СТОЛБЕЦ(B6)=СТОЛБЕЦ(Продажи_за_месяц)

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

Динамический диапазон с автоподстройкой размеров

Есть ли у вас таблицы с данными в Excel, размеры которых могут изменяться, т.е. количество строк (столбцов) может увеличиваться или уменьшаться в процессе работы? Если размеры таблицы «плавают», то придется постоянно мониторить этот момент и подправлять:

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

Все это в сумме не даст вам скучать 😉

Гораздо удобнее и правильнее будет создать динамический «резиновый» диапазон, который автоматически будет подстраиваться в размерах под реальное количество строк-столбцов данных. Чтобы реализовать такое, есть несколько способов.

Способ 1. Умная таблица

Выделите ваш диапазон ячеек и выберите на вкладке Главная – Форматировать как Таблицу (Home – Format as Table):

Если вам не нужен полосатый дизайн, который добавляется к таблице побочным эффектом, то его можно отключить на появившейся вкладке Конструктор (Design). Каждая созданная таким образом таблица получает имя, которое можно заменить на более удобное там же на вкладке Конструктор (Design) в поле Имя таблицы (Table Name) .

Теперь можно использовать динамические ссылки на нашу «умную таблицу»:

  • Таблица1 – ссылка на всю таблицу кроме строки заголовка (A2:D5)
  • Таблица1[#Все] – ссылка на всю таблицу целиком (A1:D5)
  • Таблица1[Питер] – ссылка на диапазон-столбец без первой ячейки-заголовка (C2:C5)
  • Таблица1[#Заголовки] – ссылка на «шапку» с названиями столбцов (A1:D1)

Такие ссылки замечательно работают в формулах, например:

=СУММ(Таблица1[Москва]) – вычисление суммы по столбцу «Москва»

=ВПР(F5;Таблица1;3;0) – поиск в таблице месяца из ячейки F5 и выдача питерской суммы по нему (что такое ВПР?)

Такие ссылки можно успешно использовать при создании сводных таблиц, выбрав на вкладке Вставка – Сводная таблица (Insert – Pivot Table) и введя имя умной таблицы в качестве источника данных:

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

При создании выпадающих списков прямые ссылки на элементы умной таблицы использовать нельзя, но можно легко обойти это ограничение с помощью тактической хитрости – использовать функцию ДВССЫЛ (INDIRECT) , которая превращает текст в ссылку:

Т.е. ссылка на умную таблицу в виде текстовой строки (в кавычках!) превращается в полноценную ссылку, а уж ее выпадающий список нормально воспринимает.

Способ 2. Динамический именованный диапазон

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

Задача: сделать динамический именованный диапазон, который ссылался бы на список городов и автоматически растягивался-сжимался в размерах при дописывании новых городов либо их удалении.

Нам потребуются две встроенных функции Excel, имеющиеся в любой версии – ПОИКСПОЗ (MATCH) для определения последней ячейки диапазона и ИНДЕКС (INDEX) для создания динамической ссылки.

Ищем последнюю ячейку с помощью ПОИСКПОЗ

ПОИСКПОЗ(искомое_значение;диапазон;тип_сопоставления) – функция, которая ищет заданное значение в диапазоне (строке или столбце) и выдает порядковый номер ячейки, где оно было найдено. Например, формула ПОИСКПОЗ(“март”;A1:A5;0) выдаст в качестве результата число 4, т.к. слово «март» расположено в четвертой по счету ячейке в столбце A1:A5. Последний аргумент функции Тип_сопоставления = 0 означает, что мы ведем поиск точного соответствия. Если этот аргумент не указать, то функция переключится в режим поиска ближайшего наименьшего значения – это как раз и можно успешно использовать для нахождения последней занятой ячейки в нашем массиве.

Суть трюка проста. ПОИСКПОЗ перебирает в поиске ячейки в диапазоне сверху-вниз и, по идее, должна остановиться, когда найдет ближайшее наименьшее значение к заданному. Если указать в качестве искомого значение заведомо больше, чем любое имеющееся в таблице, то ПОИСКПОЗ дойдет до самого конца таблицы, ничего не найдет и выдаст порядковый номер последней заполненной ячейки. А нам это и нужно!

Если в нашем массиве только числа, то можно в качестве искомого значения указать число, которое заведомо больше любого из имеющихся в таблице:

Для гарантии можно использовать число 9E+307 (9 умножить на 10 в 307 степени, т.е. 9 с 307 нулями) – максимальное число, с которым в принципе может работать Excel.

Если же в нашем столбце текстовые значения, то в качестве эквивалента максимально большого числа можно вставить конструкцию ПОВТОР(“я”;255) – текстовую строку, состоящую из 255 букв «я» — последней буквы алфавита. Поскольку при поиске Excel, фактически, сравнивает коды символов, то любой текст в нашей таблице будет технически «меньше» такой длинной «яяяяя….я» строки:

Формируем ссылку с помощью ИНДЕКС

Теперь, когда мы знаем позицию последнего непустого элемента в таблице, осталось сформировать ссылку на весь наш диапазон. Для этого используем функцию:

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

Она выдает содержимое ячейки из диапазона по номеру строки и столбца, т.е. например функция =ИНДЕКС(A1:D5;3;4) по нашей таблице с городами и месяцами из предыдущего способа выдаст 1240 – содержимое из 3-й строки и 4-го столбца, т.е. ячейки D3. Если столбец всего один, то его номер можно не указывать, т.е. формула ИНДЕКС(A2:A6;3) выдаст «Самару» на последнем скриншоте.

Причем есть один не совсем очевидный нюанс: если ИНДЕКС не просто введена в ячейку после знака =, как обычно, а используется как финальная часть ссылки на диапазон после двоеточия, то выдает она уже не содержимое ячейки, а ее адрес! Таким образом формула вида $A$2:ИНДЕКС($A$2:$A$100;3) даст на выходе уже ссылку на диапазон A2:A4.

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

=$A$2:ИНДЕКС($A$2:$A$100; ПОИСКПОЗ(ПОВТОР(«я»;255) ;A2:A100))

Создаем именованный диапазон

Осталось упаковать все это в единое целое. Откройте вкладку Формулы (Formulas) и нажмите кнопку Диспетчер Имен (Name Manager) . В открывшемся окне нажмите кнопку Создать (New) , введите имя нашего диапазона и формулу в поле Диапазон (Reference) :

Осталось нажать на ОК и готовый диапазон можно использовать в любых формулах, выпадающих списках или диаграммах.

Трюк №42. Создание увеличивающихся и уменьшающихся диапазонов Excel

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

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

Начнем с простейшего динамического именованного диапазона, который будет расширяться вниз по одному столбцу, но только до тех пор, пока в этом столбце есть записи. Например, если в столбце А есть 10 последовательных строк с данными, динамический именованный диапазон будет охватывать диапазон А1:А10. Чтобы создать базовый динамический именованный диапазон, сделайте следующее.

Выберите команду Вставка → Имя → Присвоить (Insert → Name → Define) и в поле Имя (Names in workbook) введите MyRange. В поле Формула (Refers to) введите следующую формулу: =OFFSET($A$1;0;0;COUNTA($A$l:$A$100);l), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А$1:$А$100);1). Теперь щелкните на кнопке Добавить (Add), затем щелкните на кнопке ОК.

К сожалению, динамические именованные диапазоны нельзя проверить в стандартном поле имени слева от строки формул. Несмотря на это, можно щелкнуть в поле имени, ввести имя MyRange и нажать клавишу Enter. Excel автоматически выделит диапазон. Конечно, можно воспользоваться и диалоговым окном Переход (Go То), выбрав команду Правка → Перейти (Edit → Go To) (сочетание клавиш Ctrl/Apple+G). В поле Ссылка (Reference) введите MyRange и щелкните на кнопке ОК.

В динамическом именованном диапазоне, который вы создали в предыдущем примере, функция СЧЁТЗ (COUNTA) стоит на месте аргумента Высота (Height) функции СМЕЩ (OFFSET).

В следующем примере динамический именованный диапазон мы применим для определения таблицы данных, которая должна быть динамической. Для этогоn в поле Формула (Refers to) введите следующую формулу: =OFFSET($A$1;0;0;COUNTA($A$1:$A$100);COUNTA($1:$1)), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А$1:$А$100);СЧЁТЗ($1:$1)). Теперь динамический именованный диапазон будет расширяться на столько записей, сколько есть в столбце А, и на столько строк, сколько заголовков в строке 1. Если вы уверены, что количество столбцов в таблице данных меняться не будет, можете заменить вторую функцию СЧЁТЗ (COUNTA) постоянным числом, например, 10.

Единственная проблема при использовании динамического именованного диапазона для таблицы данных заключается в том, что предполагается, что столбец А определяет максимальную длину таблицы. Чаще всего это так, однако иногда самым длинным столбцом может быть другой столбец таблицы. Преодолеть эту проблему можно при помощи функции Excel МАКС (МАХ), которая возвращает самое большое число в диапазоне ячеек. В качестве примера создайте таблицу, как на рис. 3.4.

Рис. 3.4. Динамическая таблица данных и диалоговое окно присвоения имени

В строке 1 хранятся функции СЧЁТЗ (COUNTA), которые ссылаются вниз на соответствующий столбец и, таким образом, возвращают количество записей в каждом столбце. Функция МАКС (МАХ) будет использоваться в качестве аргумента Высота (Height) функции СМЕЩ (OFFSET). Это гарантирует, что динамический именованный диапазон для этой таблицы всегда будет расширяться вниз на столько ячеек, сколько их содержится в самом длинном столбце в таблице. Конечно же, можно скрыть строку 1, так как пользователю совершенно не нужно ее видеть.

Во всех этих примерах мы предполагали, что данные всегда будут размещаться в соседних строках, между которыми не будет пустых ячеек. Хотя именно этот способ настройки списка или таблицы данных является правильным, иногда он становится неуправляемым.

В следующем примере список чисел в столбце А также содержит пустые ячейки. Это означает, что, если вы попытаетесь воспользоваться функцией СЧЁТ (COUNT) или СЧЁТЗ (COUNTA), динамический именованный диапазон закончится раньше, чем последняя ячейка с данными. Взгляните, например, на рис. 3.5.

Рис. 3.5. Диапазон чисел и диалоговое окно присвоения имени

В этом случае, хотя последнее число диапазона в действительности находится в строке 10, динамический диапазон расширяется вниз только до шестой строки. Причина этого лежит в функции СЧЁТ (COUNT), которая считает значения в ячейках от А1 до А100. Так как в списке только шесть числовых значений, диапазон содержит только шесть строк.

Чтобы преодолеть эту проблему, воспользуйтесь функцией Excel ПОИСКПОЗ (MATCH). Функция ПОИСКПОЗ (MATCH) возвращает относительную позицию элемента массива, соответствующего указанному значению в указанном порядке. Например, если вы примените следующую функцию ПОИСКПОЗ (MATCH): =МАТСН(6;$А$1:$А$100;0), в русской версии Excel =ПОИСКПОЗ(6;$А$1:$А$100;0), к тому же набору чисел, что и на рис. 3.5, она вернет число 10, представляющее строку 10 столбца А. Она возвращает 10, так как вы приказали функции найти число 6 в диапазоне А1:А100.

Очевидно, когда вы используете функцию ПОИСКПОЗ (MATCH) в динамическом именованном диапазоне, последнее число диапазона, вероятно, заранее неизвестно. Таким образом, понадобится задать в функции поиск слишком большого числа, которое никогда не появится в диапазоне, и изменить ее последний аргумент с 0 на 1.

В предыдущем примере вы приказали функции ПОИСКПОЗ (MATCH) найти в точности число 6, не больше и не меньше. Заменив 0 на 1, вы заставите функцию искать самое большое значение, меньшее или равное указанному. Для этого воспользуйтесь формулой =МАТСН(1Е+306;$А$1:$А$100;1), в русской версии Excel =ПОИСКПОЗ(1Е+306;$А$1:$А$100;1).

Чтобы создать динамический именованный диапазон, который будет расширяться до последней строки, содержащей число (независимо от наличия пустых ячеек до нее), введите следующую формулу в поле Формула (Refers to) диалогового окна Присвоение имени (Define Name) (рис. 3.6): =OFFSET(Sheet2!$A$1;0;0;MATCH(lE+306;Sheet2!$A$l:$A$100;1);1), в русской версии Excel =CMEЩ(Sheet2!$A$1;0;0;ПОИСКПОЗ(1E+306;Sheet2!$A$l:$A$100;1);1).

Рис. 3.6. Динамический диапазон, расширяющийся до последней записи, содержащей число

Следующий логический тип динамических именованных диапазонов, вытекающий из данного, — это диапазон, расширяющийся до последней текстовой записи независимо от пустых ячеек в списке или таблице. Для этого измените функцию ПОИСКПОЗ (MATCH) таким образом: МАТСН(«*»;$А$1:$А$100;-1), в русской версии Excel ПОИСКПОЗ(«*»;$А$1;$А$100;-1). Такая функция всегда возвращает номер строки, где содержится последняя текстовая запись в диапазоне $А$1:$А$100.

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

Для этого сначала вставьте две пустые строки выше списка. Выделите строки 1 и 2 и выберите команду Вставка → Строки (Insert → Row). В первой строке (строка 1) введите следующую функцию: =МАХ(МАТСН»*»;$А$3:$А$100;-1);МАТСН(1Е+306;$А$3:$А$100;1)), в русской версии Excel =МАКС(ПОИСКПОЗ»*»;$А$3:$А$100;-1);ПОИСКПОЗ(1Е+306;$А$3:$А$100;1)). В ячейке под ячейкой с формулой введите число 1. Ячейка еще ниже, под ячейкой с числом 1, должна содержать текстовый заголовок списка. Число 1 было добавлено, чтобы вторая функция ПОИСКПОЗ (MATCH) не вернула ошибку #N/A, если в диапазоне АЗ:А100 не окажется чисел. Первая функция ПОИСКПОЗ (MATCH) всегда найдет текст — в заголовке.

Дайте ячейке А1 имя MaxRow. Выберите команду Вставка → Имя → Присвоить (Insert → Name → Define), присвойте динамическому диапазону имя, например, MyList и в поле Формула (Refers to:) введите следующую формулу: =OFFSET(Sheet2!$A$3;0;0;MaxRow;1), в русской версии Excel =CMEЩ(Sheet2!$A$3;0;0;MaxRow;1).

В следующем списке перечислены типы динамических именованных диапазонов, которые могут оказаться полезными. Для веет этих примеров понадобится заполнить столбец А и текстом, и числовыми значениями. Кроме того, выберите команду Вставка → Имя → Присвоить (Insert → Name → Define) и в поле Имя (Names in workbook) введите имя, состоящее из одного слова (например, MyRange). Все, что будет изменяться, — это формула в поле Формула (Refers to).

Расширить диапазон на столько строк, сколько существует числовых записей: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;COUNT($A:$A);1), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТ($А;$А);1).

Расширить диапазон на столько строк, сколько существует числовых и текстовых записей: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;COUNTA($A:$A);1), в русской версии Excel =СМЕЩ($А$1;0;0;СЧЁТЗ($А:$А);1).

Расширить до последней числовой записи: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;MATCH(1E+306;$A:$A)), в русской версии Excel =СМЕЩ($А$1;0;0;ПОИСКПОЗ(1Е+306;$А:$А)). Если вы ожидаете, что может встретиться число, большее 1Е+306 (1 с 306 нулями), введите еще большее число.

Расширить до последней текстовой записи: в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;МАТCH(«*»;$А:$А;-1)), в русской версии Excel =СМЕЩ($А$1;0;0;ПОИСКПОЗ(«*»;$А:$А;-1)).

Расширить вниз в зависимости от значения в другой ячейке:В ячейку В1 введите число 10, а затем в поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;$B$1;1), в русской версии Excel =СМЕЩ($А$1;0;0;$В$1;1). Теперь измените число в ячейке В1, и диапазон изменится соответствующим образом.

Расширять вниз по одной строке каждый месяц: В поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0,MONTH(TODAY());1), в русской версии Excel =СМЕЩ($А$1;0;0.МЕСЯЦ(СЕГОДНЯ));1).

Расширять вниз по одной строке каждую неделю: В поле Формула (Refers to) введите следующее: =OFFSET($A$1;0;0;WEEKNUM(TODAY());1), В русской версии Excel =СМЕЩ($А$1;0;0;ДЕНЬНЕД(СЕГОДНЯ());1)

Для последней формулы необходимо установить Пакет анализа (Analysis ToolPak). Это можно сделать командой Сервис → Надстройки (Tools → Add-ins).

Динамический именованный диапазон в Excel

Динамический именованный диапазон автоматически расширяется при добавлении значения в диапазон.

  1. Например, выберите диапазон A1:A4 и присвойте ему имя Prices.
  2. Рассчитайте сумму.
  3. Когда вы добавляете значение к диапазону, Excel не обновляет сумму.

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

  1. На вкладке Formulas (Формулы) выберите Name Manager (Диспетчер имен).
  2. Нажмите кнопку Edit (Изменить).
  3. Кликните по полю Refers to (Диапазон) и введите формулу:

Объяснение: Функция OFFSET (СМЕЩ) принимает 5 аргументов:

  • ссылка: $A$1,
  • смещение по строкам: ,
  • смещение по столбцам: ,
  • высота: COUNTA($A:$A) или СЧЕТЗ($A:$A),
  • ширина: 1.

Формула COUNTA($A:$A) или СЧЕТЗ($A:$A) – подсчитывает число значений в столбце А. Когда вы добавляете значение к диапазону, количество элементов увеличивается. В результате, именованный диапазон расширяется.

  • Нажмите ОК, а затем Close (Закрыть).
  • Теперь, когда вы добавляете значение в диапазон, Excel автоматически обновляет сумму.
  • Динамические именованные диапазоны

    Очень часто при использовании связки Выпадающий списокИменованный диапазон возникает проблема: при добавлении новых данных в диапазон они не отразятся сразу в списке — для этого необходимо будет изменить адрес именованного диапазона. Либо указать заранее расширенный диапазон. Но тогда появляются лишние пустые значения в списке, что тоже не очень-то красиво и совсем не удобно, особенно если список не маленький. И вот здесь помогут так называемые Динамические диапазоны. Создав вместо обычного именованного диапазона динамический, уже не придется каждый раз менять адрес диапазона для отображения в списке всех добавленных значений. И отображаться будут только значения, никаких пустых строк.
    Вызываем Диспетчер создания имен(Ctrl+F3), задаем имя диапазона и в поле Диапазон (Refers to) пишем формулу:

    Вариант с формулой СМЕЩ
    =СМЕЩ(Лист2! $A$1 ;;;СЧЁТЗ(Лист2! $A$1:$A$1000 );)
    =OFFSET(Лист2! $A$1 . COUNTA(Лист2! $A$1:$A$1000 ),)

    • Где Лист2! $A$1 — первая ячейка значений для выпадающего списка
    • а Лист2! $A$1:$A$1000 максимальный диапазон ячеек, в котором будут храниться значения для списка. Если значений может быть более 1000, то необходимо увеличить диапазон $A$1:$A$1000 на необходимое количество строк. Хотя мне лично страшно представить себе такой выпадающий список. Но динамический диапазон может ведь пригодиться и для других целей

    В чем главный недостаток этого метода: если добавить в список значений пропуск между значениями в виде пустой строки — список отобразит не все значения списка, т.к. СЧЕТЗ считает количество непустых ячеек:

    Вариант с формулой ИНДЕКС
    =Лист2!$A$1:ИНДЕКС(Лист2! $A$1:$A$1000 ;ПРОСМОТР(2;1/(Лист2! $A$1:$A$1000 <>«»);СТРОКА(Лист2! $A$1:$A$1000 )))
    =Лист2!$A$1:INDEX(Лист2! $A$1:$A$1000 ,LOOKUP(2,1/(Лист2! $A$1:$A$1000 <>«»),ROW(Лист2! $A$1:$A$1000 )))

    Изменяемые ссылки для этой формулы такие же, как и в случае с вариантом через СМЕЩ:

    • Лист2! $A$1 — первая ячейка значений для выпадающего списка
    • Лист2! $A$1:$A$1000 максимальный диапазон ячеек, в котором будут храниться значения для списка

    Однако метод через данную формулу лишен недостатка предыдущего метода: если добавить в список разрыв в виде пустой строки — список отобразится правильно, с этим разрывом и всеми значениями:

    Примечание: созданные таким образом диапазоны нельзя использовать в составе функции ДВССЫЛ (INDIRECT) для создания зависимых выпадающих списков — список просто не будет работать

    Tips_Lists_Dinamic_Range.xls (37,5 KiB, 6 032 скачиваний)

    Статья помогла? Поделись ссылкой с друзьями!

    Поиск по меткам

    Есть вариант ещё интереснее.
    Размещаем список в «Таблице» (ВставкаТаблица)
    Создаём Диапазон ссылающийся на часть таблицы с данными например =Таблица1[Почта](если заголовок списка «Почта» в таблице «Таблица1»)
    Далее всё как указано в основном описании по созданию списка в третьем варианте отсюда: http://www.excel-vba.ru/chto-umeet-excel/vypadayushhie-spiski/

    При необходимости увеличения или изменения состава списка просто добавляете значения вниз таблицы со списком (таблица сама расширится включив новое значение в список) и сортируете. Пустые значения упадут вниз и их можно просто исключить из таблицы или оставить.
    При изменении заголовка списка ссылка в именованном диапазоне поменяется сама.
    Важный момент в настройках должна быть включена функция «ФормулыИспользовать имена таблиц в формулах».

    Поделитесь своим мнением

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

    Понравилась статья? Поделить с друзьями:
  • Как задать область диаграммы в excel
  • Как задать области печати в excel на нескольких страницах
  • Как задать нумерацию строк в excel
  • Как задать нумерацию страниц word
  • Как задать нумерацию столбцов в excel