Что такое динамические массивы
В сентябре 2018 года Microsoft выпустила обновление, которое добавляет в Microsoft Excel совершенно новый инструменты: динамические массивы (Dynamic Arrays) и 7 новых функций для работы с ними. Эти вещи, без преувеличения, совершенно кардинальным образом меняет всю привычную технику работы с формулами и функциями и касаются, буквально, каждого пользователя.
Рассмотрим простой пример, чтобы объяснить суть.
Предположим, что у нас есть простая табличка с данными по городам-месяцам. Что будет если мы выделим любую пустую ячейку справа на листе и введем в нее формулу-ссылку не на одну ячейку, а сразу на диапазон?
Во всех прошлых версиях Excel после нажатия на Enter мы бы получили содержимое только одной первой ячейки B2. А как иначе?
Ну, или можно было бы завернуть этот диапазон в какую-нибудь аггрегирующую функцию типа =СУММ(B2:C4) и получить по нему общий итог.
Если бы нам потребовались операции посложнее примитивной суммы, например, извлечение уникальных значений или Топ-3, то пришлось бы вводить нашу формулу как формулу массива, используя сочетание клавиш Ctrl+Shift+Enter.
Теперь всё по-другому.
Теперь после ввода такой формулы мы можем просто нажать на Enter — и получить в результате сразу все значения, на которые мы ссылались:
Это не магия, а новые динамические массивы, которые теперь есть в Microsoft Excel. Добро пожаловать в новый мир
Особенности работы с динамическими массивами
Технически, весь наш динамический массив хранится в первой ячейке G4, заполняя своими данными необходимое количество ячеек вправо и вниз. Если выделить любую другую ячейку массива, то в строке формул ссылка будет неактивной, показывая, что мы находимся в одной из «дочерних» ячеек:
Попытка удалить одну или несколько «дочерних» ячеек ни к чему не приведёт — Excel тут же заново их вычислит и заполнит.
При этом ссылаться на эти «дочерние» ячейки в других формулах мы можем совершенно спокойно:
Если копировать первую ячейку массива (например из G4 в F8), то и и весь массив (его ссылки) сдвинется в том же направлении, как и в обычных формулах:
Если нам нужно переместить массив, то достаточно будет перенести (мышью или сочетанием Ctrl+X, Ctrl+V), опять же, только первую главную ячейку G4 — вслед за ней перенесется на новое место и заново развернётся весь наш массив.
Если вам нужно сослаться где-нибудь еще на листе на созданный динамический массив, то можно использовать спецсимвол # («решётка») после адреса его ведущей ячейки:
Например, теперь можно легко сделать выпадающий список в ячейке, который ссылается на созданный динамический массив:
Ошибки динамических массивов
Но что будет, если для развёртывания массива не будет достаточно пространства или на его пути окажутся ячейки уже занятые другими данными? Знакомьтесь с принципиально новым типом ошибок в Excel — #ПЕРЕНОС! (#SPILL!):
Как всегда, если щелкнуть мышью по значку с желтым ромбом и восклицательным знаком, то мы получим более подробное пояснение по источнику проблемы и сможем быстро найти мешающие ячейки:
Аналогичные ошибки будут возникать, если массив выходит за пределы листа или натыкается на объединенную ячейку. Если удалить препятствие, то всё тут же исправится на лету.
Динамические массивы и «умные» таблицы
Если динамический массив указывает на «умную» таблицу, созданную сочетанием клавиш Ctrl+T или с помощью Главная — Форматировать как таблицу (Home — Format as Table), то он также унаследует её главное качество — автоподстройку размеров.
При добавлении новых данных внизу или справа «умная» таблица и динамический диапазон тоже будут автоматически растягиваться:
При этом, однако, есть одно ограничение: мы не можем использовать ссылку на динамический диапазон в форумулах внутри «умной» таблицы:
Динамические массивы и другие функции Excel
Хорошо, скажете вы. Всё это интересно и забавно. Не нужно, как раньше, вручную протягивать формулу со ссылкой на первую ячейку исходного диапазона вниз и вправо и всё такое. И всё?
Не совсем.
Динамические массивы — это не просто еще один инструмент в Excel. Теперь они внедрены в самое сердце (или мозг) Microsoft Excel — его вычислительный движок. А это значит что и другие, привычные нам формулы и функции Excel теперь тоже поддерживают работу с динамическими массивами. Давайте разберём несколько примеров, чтобы вы осознали всю глубину произошедших изменений.
Транспонирование
Чтобы транспонировать диапазон (обменять местами строки и столбцы) в Microsoft Excel всегда имелась встроенная функция ТРАНСП (TRANSPOSE). Однако, чтобы её использовать, вы должны были сначала правильно выделить диапазон для результатов (например, если на входе был диапазон 5х3, то вы должны были обязательно выделить 3×5), потом ввести функцию и нажать сочетание Ctrl+Shift+Enter, т.к. она умела работать только в режиме формул массива.
Теперь можно просто выделить одну ячейку, ввести в нее эту же формулу и нажать на обычный Enter — динамический массив сделает всё сам:
Таблица умножения
Этот пример я обычно приводил, когда меня просили наглядно показать преимущества формул массива в Excel. Теперь чтобы посчитать всю таблицу Пифагора достаточно встать в первую ячейку B2, ввести туда формулу перемножающую два массива (вертикальный и горизонтальный набор чисел 1..10) и просто нажать на Enter:
Склейка и преобразование регистра
Массивы можно не только перемножать, но склеивать стандартным оператором & (амперсанд). Предположим, нам нужно сцпеить имя и фамилию из двух столбцов и поправить скачущий регистр в исходных данных. Делаем это одной короткой формулой, которая формирует весь массив, а потом применяем к нему функцию ПРОПНАЧ (PROPER), чтобы привести в порядок регистр:
Вывод Топ-3
Предположим, что у нас есть куча чисел, из которых нужно вывести три лучших результата, расположив их в порядке убывания. Теперь это делается одной формулой и, опять же, без всяких Ctrl+Shift+Enter как раньше:
Если захочется, чтобы результаты располагались не в столбец, а в строку, то достаточно заменить в этой формуле двоеточия (разделитель строк) на точку с запятой (разделитель элементов внутри одной строки). В англоязычной версии Excel роль этих разделителей играют точка с запятой и запятая, соответственно.
ВПР извлекающая сразу несколько столбцов
Функцей ВПР (VLOOKUP) теперь можно вытаскивать значения не из одного, а сразу из нескольких столбцов — достаточно указать их номера (в любом желаемом порядке) в виде массива в третьем аргументе функции:
Функция СМЕЩ (OFFSET) возвращающая динамический массив
Одной из самых интересных и полезных (после ВПР) функций для анализа данных является функция СМЕЩ (OFFSET), которой я посвятил в своё время целую главу в своей книжке и статью здесь. Сложность в понимании и освоении этой функции всегда была в том, что она возвращала в качестве результата массив (диапазон) данных, но увидеть его мы не могли, т.к. Excel до сих пор не умел работать с массивами «из коробки».
Сейчас эта проблема в прошлом. Посмотрите, как теперь с помощью одной формулы и динамического массива, возвращаемого СМЕЩ, можно извлечь все строки по заданному товару из любой отсортированной таблицы:
Давайте разберём её аргументы:
- А1 — стартовая ячейка (точка отсчёта)
- ПОИСКПОЗ(F2;A2:A30;0) — вычисление сдвига от стартовой ячейки вниз — до первой найденной капусты.
- 0 — сдвиг «окна» вправо относительно стартовой ячейки
- СЧЁТЕСЛИ(A2:A30;F2) — вычисление высоты возвращаемого «окна» — количества строк, где есть капуста.
- 4 — размер «окна» по горизонтали, т.е. выводим 4 столбца
Новые функции для динамических массивов
Помимо поддержки механизма динамических массивов в старых функциях, в Microsoft Excel были добавлены несколько совершенно новых функций, заточенных именно под работу с динамическими массивами. В частности, это:
- СОРТ (SORT) — сортирует входной диапазон и выдает динамический массив на выходе
- СОРТПО (SORTBY) — умеет сортировать один диапазон по значениям из другого
- ФИЛЬТР (FILTER) — извлекает из исходного диапазона строки, удовлетворяющие заданным условиям
- УНИК (UNIQUE) — извлекает из диапазона уникальные значения или убирает повторы
- СЛМАССИВ (RANDARRAY) — генерит массив случайных чисел заданного размера
- ПОСЛЕД (SEQUENCE) — формирует массив из последовательности чисел с заданным шагом
Подробнее про них — чуть позже. Они стоят отдельной статьи (и не одной) для вдумчивого изучения
Выводы
Если вы прочитали всё написанное выше, то, думаю, уже осознаёте масштаб изменений, которые произошли. Очень многие вещи в Excel теперь можно будет делать проще, легче и логичнее. Я, признаться, немного в шоке от того, сколько статей теперь придется корректировать здесь, на этом сайте и в моих книгах, но готов это сделать с легким сердцем.
Подбивая итоги, в плюсы динамических массивов можно записать следующее:
- Можно забыть про сочетание Ctrl+Shift+Enter. Теперь Excel не видит различий между «обычными формулами» и «формулами массива» и обрабатывает их одинаково.
- Про функцию СУММПРОИЗВ (SUMPRODUCT), которую раньше использовали для ввода формул массива без Ctrl+Shift+Enter тоже можно забыть — теперь достаточно просто СУММ и Enter.
- Умные таблицы и привычные функции (СУММ, ЕСЛИ, ВПР, СУММЕСЛИМН и т.д.) теперь тоже полностью или частично поддерживают динамические массивы.
- Есть обратная совместимость: если открыть книгу с динамическими массивами в старой версии Excel, то они превратятся в формулы массива (в фигурных скобках) и продолжат работать в «старом стиле».
Нашлось и некоторое количество минусов:
- Нельзя удалить отдельные строки, столбцы или ячейки из динамического массива, т.е. он живёт как единый объект.
- Нельзя сортировать динамический массив привычным образом через Данные — Сортировка (Data — Sort). Для этого есть теперь специальная функция СОРТ (SORT).
- Динамический диапазон нельзя превратить в умную таблицу (но можно сделать динамический диапазона на основе умной таблицы).
Само-собой, это еще не конец и, я уверен, Microsoft продолжит совершенствовать этот механизм в будущем.
Где скачать?
И, наконец, главный вопрос
Microsoft впервые анонсировало и показало превью динамических массивов в Excel еще в сентябре 2018 года на конференции Ignite. В последующие несколько месяцев происходило тщательное тестирование и обкатка новых возможностей сначала на кошках сотрудниках самой Microsoft, а потом на добровольцах-тестировщиках из круга Office Insiders. В этом году обновление, добавляющее динамические массивы стали постепенно раскатывать уже по обычным подписчикам Office 365. Я, например, получил его только в августе с моей подпиской Office 365 Pro Plus (Monthly Targeted).
Если в вашем Excel ещё нет динамических массивов, а поработать с ними очень хочется, то есть следующие варианты:
- Если у вас подписка Office 365, то можно просто продождать, пока до вас дойдет это обновление. Как быстро это случится — зависит от настройки частоты доставки обновлений для вашего Office (раз в год, раз в полгода, раз в месяц). Если у вас корпоративный ПК, то можно попросить вашего администратора настроить загрузку обновлений почаще.
- Можно записаться в ряды тех самых добровольцев-тестировщиков Office Insiders — тогда вы будете первым получать все новые возможности и функции (но есть шанс повышенной глючности в работе Excel, само-собой).
- Если у вас не подписка, а коробочная standalone-версия Excel, то придется ждать до выхода следующей версии Office и Excel в 2022 году, как минимум. Пользователи таких версий получают только обновления безопасности и исправления ошибок, а все новые «плюшки» теперь достаются только подписчикам Office 365. Sad but true
В любом случае, когда динамические массивы появятся в вашем Excel — после этой статьи вы будете к этому уже готовы
Ссылки по теме
- Что такое формулы массива и как их использовать в Excel
- Суммирование по окну (диапазону) с помощью функции СМЕЩ (OFFSET)
- 3 способа транспонировать таблицу в 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: Выборка данных из определенного диапазона
.
На чтение 25 мин. Просмотров 12.3k.
Алан Перлис
Постоянная одного человека — переменная другого
Эта статья содержит полное руководство по работе с переменными и использованию VBA Dim.
Первый раздел содержит краткое руководство по использованию оператора
Dim, включая примеры и формат оператора Dim.
Остальная часть поста содержит наиболее полное руководство, которое вы
найдете в VBA Dim Statement.
Если вы заинтересованы в объявлении параметров, вы можете прочитать о
них здесь.
Содержание
- Краткое руководство по использованию VBA Dim Statement
- Полезные ссылки
- Что такое VBA Dim Statement?
- Формат VBA Dim Statement
- Как использовать Dim с несколькими переменными
- Где я должен поместить Dim Statement?
- Использование Dim в циклах
- Могу ли я использовать Dim для присвоения значения?
- Dim действительно требуется?
- Использование Dim с Basic Variables
- Использование Dim с Variants
- Использование Dim с Objects
- Использование Dim с Arrays
- Устранение неполадок ошибок Dim
- Локальные и глобальные переменные
- Заключение
Краткое руководство по использованию VBA Dim Statement
Описание | Формат | Пример |
Базовая переменная |
Dim [имя переменной] As [Тип] |
Dim count As Long Dim amount As Currency Dim name As String Dim visible As Boolean |
Фиксированная строка |
Dim [имя переменной] As String *[размер] |
Dim s As String * 4 Dim t As String * 10 |
Вариант | Dim [имя переменной] As Variant Dim [имя переменной] |
Dim var As Variant Dim var |
Объект использует Dim и New |
Dim [имя переменной] As New [тип объекта] |
Dim coll As New Collection Dim coll As New Class1 |
Объект использует Dim и New |
Dim [имя переменной] As [тип объекта] Set [имя переменной] = New [тип объекта] |
Dim coll As Collection Set coll = New Collection Dim coll As Class1 Set coll = New Class1 |
Статический массив |
Dim [имя переменной] ([первый] To [последний] ) As[Тип] |
Dim arr(1 To 6) As Long |
Динамический массив |
Dim [имя переменной]() As [Тип] ReDim [имя переменной] ([первый] To [последний]) |
Dim arr() As Long ReDim arr(1 To 6) |
Внешняя библиотека (Раннее связывание) * |
Dim [имя переменной] As New [пункт] |
Dim dict As New Dictionary |
Внешняя библиотека (Раннее связывание с использованием Set) * |
Dim [имя переменной] As [пункт] Set [имя переменной] = New [пункт] |
Dim dict As Dictionary Set dict = New Dictonary |
Внешняя библиотека (Позднее связывание) |
Dim [имя переменной] As Object Set [имя переменной] = CreateObject («[библиотека]») |
Dim dict As Object Set dict = CreateObject(«Scripting. Dictionary») |
* Примечание. Для раннего связывания необходимо добавить
справочный файл с помощью меню «Инструменты» -> «Ссылки». Смотрите здесь,
как добавить ссылку на Dictonary.
Полезные ссылки
- Объявление параметров в подпрограмме или функции
- Использование объектов в VBA
- Массивы VBA
- Коллекции VBA
- Словарь VBA
- VBA Workbook
- VBA Worksheet
Что такое VBA Dim Statement?
Ключевое слово Dim — это сокращение от Dimension. Он
используется для объявления переменных в VBA.
Объявление означает, что мы говорим VBA о переменной,
которую будем использовать позже.
Существует четыре типа Dim Statement. Все они очень похожи по синтаксису.
Вот они:
- Basic variable
- Variant
- Object
- Array
Ниже приводится краткое описание каждого типа
- Basic variable — этот тип переменной содержит одно значение. Это такие типы, как Long, String, Date, Double, Currency.
- Variant — VBA решает во время выполнения, какой тип будет использоваться. Вы должны избегать вариантов, где это возможно, но в некоторых случаях требуется их использование.
- Object — это переменная, которая может иметь несколько методов (то есть подпрограмм / функций) и несколько свойств (то есть значений). Есть 3 вида:
Объекты Excel, такие как объекты Workbook, Worksheet и Range.
Пользовательские объекты, созданные с использованием модулей классов.
Внешние библиотеки, такие как Словарь. - Array — это группа переменных или объектов.
В следующем разделе мы рассмотрим формат оператора VBA Dim с
некоторыми примерами каждого из них.
В последующих разделах мы рассмотрим каждый тип более
подробно.
Формат VBA Dim Statement
Формат выражения Dim показан ниже.
' 1. BASIC VARIABLE ' Объявление основной переменной Dim [Имя переменной] As [тип] ' Объявление фиксированной строки Dim [Имя переменной] As String * [размер] ' 2. VARIANT Dim [Имя переменной] As Variant Dim [Имя переменной] ' 3. OBJECT ' Объявление объекта Dim [Имя переменной] As [тип] ' Объявление и создание объекта Dim [Имя переменной] As New [тип] ' Объявление объекта с использованием позднего связывания Dim [Имя переменной] As Object ' 4. ARRAY ' Объявление статического массива Dim [Имя переменной](first To last) As [тип] ' Объявление динамического массива Dim [Имя переменной]() As [тип] Ниже приведены примеры использования различных форматов. Sub Primeri() ' 1. BASIC VARIABLE ' Объявление основной переменной Dim name As String Dim count As Long Dim amount As Currency Dim eventdate As Date ' Объявление фиксированной строки Dim userid As String * 8 ' 2. VARIANT Dim var As Variant Dim var ' 3. OBJECT ' Объявление объекта Dim sh As Worksheet Dim wk As Workbook Dim rg As Range ' Объявление и создание объекта Dim coll1 As New Collection Dim o1 As New Class1 ' Объявление объекта - создайте объект ниже, используя Set Dim coll2 As Collection Dim o2 As Class1 Set coll2 = New Collection Set o2 = New Class1 ' Объявление и присвоение с использованием позднего связывания Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 4. ARRAY ' Объявление статического массива Dim arrScores(1 To 5) As Long Dim arrCountries(0 To 9) As String ' Объявление динамического массива - установите размер ниже, используя ReDim Dim arrMarks() As Long Dim arrNames() As String ReDim arrMarks(1 To 10) As Long ReDim arrNames(1 To 10) As String End Sub
Мы рассмотрим эти различные типы операторов Dim в следующих
разделах.
Как использовать Dim с несколькими переменными
Мы можем объявить несколько переменных в одном выражении Dim.
Dim name As String, age As Long, count As Long
Если мы опускаем тип, то VBA автоматически устанавливает тип как Variant. Мы увидим больше
о Variant позже.
' Сумма является вариантом Dim amount As Variant ' Сумма является вариантом Dim amount ' Адрес это вариант - имя это строка Dim name As String, address ' имя - это вариант, адрес – строка Dim name, address As String
Когда вы объявляете несколько переменных, вы должны указать тип каждой отдельно.
Dim wk As Workbook, marks As Count, name As String
Вы можете поместить столько переменных, сколько захотите, в
одном выражении Dim, но
для удобства чтения рекомендуется оставить его равным 3 или 4.
Где я должен поместить Dim Statement?
Оператор Dim может быть помещен в любое место кода. Тем не менее, он должен предшествовать любой строке, где используется переменная.
Если переменная используется перед оператором Dim, вы получите ошибку
«переменная не определена»
Когда дело доходит до позиционирования ваших Dim утверждений, вы можете сделать это двумя основными способами. Вы можете разместить все свои Dim заявления в верхней части процедуры.
Sub DimVverh() ' Размещение всех Dim statements наверху Dim count As Long, name As String, i As Long Dim wk As Workbook, sh As Worksheet, rg As Range Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") Set sh = wk.Worksheets(1) Set rg = sh.Range("A1:A10") For i = 1 To rg.Rows.count count = rg.Value Debug.Print count Next i End Sub
ИЛИ вы можете объявить переменные непосредственно перед их
использованием:
Sub DimIsp() Dim wk As Workbook Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") Dim sh As Worksheet Set sh = wk.Worksheets(1) Dim rg As Range Set rg = sh.Range("A1:A10") Dim i As Long, count As Long, name As String For i = 1 To rg.Rows.count count = rg.Value name = rg.Offset(0, 1).Value Debug.Print name, count Next i End Sub
Я лично предпочитаю последнее, так как оно делает код более
аккуратным, и его легче читать, обновлять и обнаруживать ошибки.
Использование Dim в циклах
Помещение оператора Dim в цикл не влияет на переменную.
Когда VBA запускает Sub (или Function), первым делом он
создает все переменные, которые были объявлены в выражениях Dim.
Следующие 2 фрагмента кода практически одинаковы. Во-первых,
переменная Count объявляется перед циклом. Во втором он объявлен в цикле.
Sub CountPeredCiklom() Dim count As Long Dim i As Long For i = 1 To 3 count = count + 1 Next i ' значение счета будет 3 Debug.Print count End Sub
Sub CountPosleCikla() Dim i As Long For i = 1 To 3 Dim count As Long count = count + 1 Next i ' значение счета будет 3 Debug.Print count End Sub
Код будет вести себя точно так же, потому что VBA создаст переменные при
входе в подпрограмму.
Могу ли я использовать Dim для присвоения значения?
В таких языках, как C ++, C # и Java, мы можем объявлять и назначать переменные в одной строке:
' C++ int i = 6 String name = "Иван"
Мы не можем сделать это в VBA. Мы можем использовать оператор двоеточия для размещения
объявлений и назначения строк в одной строке.
Dim count As Long: count = 6
Мы не объявляем и не присваиваем в одной строке VBA. Что мы
делаем, это помещаем эти две строки (ниже) в одну строку в редакторе. Что
касается VBA, это две отдельные строки, как здесь:
Dim count As Long count = 6
Здесь мы помещаем 3 строки кода в одну строку редактора,
используя двоеточие:
count = 1: count = 2: Set wk = ThisWorkbook
Нет никаких преимуществ или недостатков в назначении и
объявлении в одной строке редактора. Все сводится к личным предпочтениям.
Dim действительно требуется?
Ответ в том, что это не обязательно. VBA не требует от вас
использовать Dim Statement.
Однако не использовать оператор Dim — плохая практика и
может привести к множеству проблем.
Вы можете использовать переменную без предварительного
использования оператора Dim. В этом случае переменная автоматически будет типом
варианта.
Это может привести к таким проблемам, как
- Все переменные являются вариантами (проблемы с
этим см. В разделе «Варианты»). - Некоторые переменные ошибки останутся
незамеченными.
Из-за этих проблем рекомендуется сделать использование Dim
обязательным в нашем коде. Мы делаем это с помощью оператора Option Explicit.
Option Explicit
Мы можем сделать Dim
обязательным в модуле, набрав «Option Explicit» в верхней части модуля.
Мы можем сделать это автоматически в каждом новом модуле,
выбрав Tools-> Options из меню и отметив флажок «Требовать декларацию
переменной». Затем, когда вы вставите новый модуль, «Option Explicit» будет
автоматически добавлен в начало.
Давайте посмотрим на некоторые ошибки, которые могут
остаться незамеченными, если мы не будем использовать Dim.
Ошибки Переменной
В приведенном ниже коде мы используем переменную Total без использования оператора Dim.
Sub BezDim() Total = 6 Total = Total + 1 Debug.Print Total End Sub
Если мы случайно написали Total неправильно, VBA сочтет это
новой переменной.
В приведенном ниже коде мы неправильно написали переменную Total как Totall.
Sub BezDimOshibki() Total = 6 ' Первый Total - это ошибка Totall = Total + 1 ' напечатает 6 вместо 7 Debug.Print Total End Sub
VBA не обнаружит ошибок в коде, и будет напечатано неверное
значение.
Давайте добавим Option Explicit и попробуйте приведенный
выше код снова
Option Explicit Sub BezDimOshibki() Total = 6 ' Первый Total - это ошибка Totall = Total + 1 ' Напечатает 6 вместо 7 Debug.Print Total End Sub
Теперь, когда мы запустим код, мы получим ошибку «Переменная
не определена». Чтобы эта ошибка не появлялась, мы должны использовать Dim для каждой переменной,
которую мы хотим использовать.
Когда мы добавим оператор Dim для Total
и запустим код, мы получим ошибку, сообщающую, что опечатка Totall не была определена.
Это действительно полезно, так как помогает нам найти
ошибку, которая в противном случае осталась бы незамеченной.
Ошибка в ключевом слове
Вот второй пример, который более тонкий.
Когда следующий код выполняется, он должен изменить шрифт в
ячейке A1 на синий.
Однако, когда код запускается, ничего не происходит.
Sub ZadatCvet() Sheet1.Range("A1").Font.Color = rgblue End Sub
Ошибка здесь в том, что rgblue должен быть rgbBlue. Если вы
добавите Option Explicit в модуль, появится ошибка «переменная не определена».
Это значительно облегчает решение проблемы.
Эти два примера очень просты. Если у вас много кода, то
подобные ошибки могут стать кошмаром для отслеживания.
Использование Dim с Basic Variables
VBA имеет те же основные типы переменных, которые
используются в электронной таблице Excel.
Вы можете увидеть список всех типов переменных VBA здесь.
Тем не менее, большую часть времени вы будете использовать следующие:
Тип | Хранение | Диапазон | Описание |
Boolean | 2 байта | ИСТИНА или ЛОЖЬ | Эта переменная может быть ИСТИНА или ЛОЖЬ. |
Long | 4 байта | от -2,147,483,648 до 2,147,483,647 |
Long — это сокращение от Long Integer. Используйте это вместо типа Integer * |
Currency | 8 байт | от -1,79769313486231E308 до -4,94065645841247E-324 для отрицательных значений; от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений |
Аналогично Double, но имеет только 4 знака после запятой |
Double | 8 байт | от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 |
|
Date | 8 байт | С 1 января 100 по 31 декабря 9999 |
|
String | меняется | От 0 до примерно 2 миллиардов |
Содержит текст |
* Первоначально мы использовали бы тип Long вместо Integer,
потому что Integer был 16-разрядным, и поэтому диапазон был от -32 768 до 32
767, что довольно мало для многих случаев использования целых чисел.
Однако в 32-битной (или выше) системе целое число автоматически
преобразуется в длинное. Поскольку Windows была 32-битной начиная с Windows 95
NT, нет смысла использовать Integer.
В двух словах, всегда используйте Long для целочисленного
типа в VBA.
Фиксированный тип строки
В VBA есть один необычный тип базовой переменной, с которым
вы, возможно, не знакомы.
Это фиксированный тип строки. Когда мы создаем нормальную строку в VBA, мы можем добавить текст, и VBA автоматически изменит размер строки для нас.
Sub TipStroki() Dim s As String ' s is "Иван Петров" s = "John Smith" ' s is "Игорь" s = "Tom" End Sub
Фиксированная строка никогда не изменяется. Эта строка
всегда будет иметь одинаковый размер независимо от того, что вы ей назначаете
вот несколько примеров:
Sub FiksStroka() Dim s As String * 4 ' s is "Иван" s = "Иван Перов" ' s = "Игорь " s = "Игорь" End Sub
Использование Dim с Variants
Когда мы объявляем переменную как вариант, VBA решает во время выполнения, какой
тип переменной должен быть.
Мы объявляем варианты следующим образом
' Оба варианта Dim count Dim count As Variant Это звучит как отличная идея в теории. Больше не нужно беспокоиться о типе переменной Sub IspVariants() Dim count As Variant count = 7 count = "Иван" count = #12/1/2018# End Sub
Однако использование вариантов является плохой практикой, и
вот почему:
- VBA
не будет замечать неправильных ошибок типа (т. Е. Несоответствие данных). - Вы не можете получить доступ к Intellisense.
- VBA
угадывает лучший тип, и это может быть не то, что вы хотите.
Тип ошибки
Ошибки твои друзья!
Они могут раздражать и расстраивать, когда они случаются, но
они предупреждают вас о будущих проблемах, которые не так легко найти.
Ошибка несоответствия типов предупреждает вас, когда используются неверные данные.
Например. Представьте, что у нас есть лист оценок учеников.
Если кто-то случайно (или намеренно) заменит метку на текст, данные будут
недействительными.
Если мы используем вариант для хранения меток, то ошибки не
возникнет
Sub MarksVariant() Dim marks As Variant Dim i As Long For i = 1 To 10 ' Прочитайте отметку mark = Sheet1.Range("A" & i).Value Next End Sub
Это не хорошо, потому что в ваших данных есть ошибка, а вы
не знаете об этом.
Если вы зададите переменную Long, VBA сообщит вам об ошибке
«Несоответствие типов», если значения являются текстовыми.
Sub MarksLong() Dim mark As Long Dim i As Long For i = 1 To 10 ' Прочитайте отметку mark = Sheet1.Range("A" & i).Value Next End Sub
Доступ к Intellisense
Intellisense — удивительная особенность VBA. Он дает вам
доступные параметры в зависимости от типа, который вы создали.
Представьте, что вы объявляете переменную листа, используя
Dim
Когда вы используете переменную wk с десятичной точкой, VBA
автоматически отобразит доступные опции для переменной.
Вы можете увидеть Intellisense на скриншоте ниже
Если вы используете Variant как тип, то Intellisense будет
недоступен
Это потому, что VBA не будет знать тип переменной до времени
выполнения.
Использование Dim с Objects
Если вы не знаете, что такое Objects, вы можете прочитать
мою статью об VBA Objects здесь.
Есть 3 типа объектов:
- Объекты Excel
- Объекты модуля класса
- Внешние объекты библиотеки
Примечание. Объект VBA Collection используется аналогично тому, как мы используем объект Class Module. Мы используем новое, чтобы создать его.
Давайте посмотрим на каждый из них по очереди.
Объекты Excel
Объекты Excel, такие как Рабочая книга, Рабочий лист,
Диапазон и т. Д., Не используют Новый, поскольку они автоматически создаются
Excel. Смотрите, «когда New не требуется».
При создании или открытии книги Excel автоматически создает
связанный объект.
Например, в приведенном ниже коде мы открываем рабочую
книгу. VBA создаст объект, а функция Open вернет книгу, которую мы можем
сохранить в переменной
Sub OtkrWorkbook() Dim wk As Workbook Set wk = Workbooks.Open("C:ДокументыОтчет.xlsx") End Sub
Если мы создадим новый лист, произойдет похожая вещь. VBA
автоматически создаст его и предоставит доступ к объекту.
Sub DobavSheet() Dim sh As Worksheet Set sh = ThisWorkbook.Worksheets.Add End Sub
Нам не нужно использовать ключевое слово New для этих объектов Excel.
Мы просто присваиваем переменную функции, которая либо
создает новый объект, либо дает нам доступ к существующему.
Вот несколько примеров назначения переменных Workbook, Worksheet и range
Sub DimWorkbook() Dim wk As Workbook ' назначить wk новой книге Set wk = Workbooks.Add ' назначить wk первой открытой книге Set wk = Workbooks(1) ' назначить wk рабочей книге Отчет.xlsx Set wk = Workbooks("Отчет.xlsx") ' назначить wk активной книге Set wk = ActiveWorkbook End Sub
Sub DimWorksheet() Dim sh As Worksheet ' Назначить sh на новый лист Set sh = ThisWorkbook.Worksheets.Add ' Назначьте sh на крайний левый лист Set sh = ThisWorkbook.Worksheets(1) ' Назначьте sh на лист под названием «Клиенты» Set sh = ThisWorkbook.Worksheets("Клиенты") ' Присвойте sh активному листу Set sh = ActiveSheet End Sub
Sub DimRange() ' Получить рабочий лист клиента Dim sh As Worksheet Set sh = ThisWorkbook.Worksheets("Клиенты") ' Объявите переменную диапазона Dim rg As Range ' Присвойте rg диапазону A1 Set rg = sh.Range("A1") ' Назначьте rg в диапазоне от B4 до F10 Set rg = sh.Range("B4:F10") ' Присвойте rg диапазону E1 Set rg = sh.Cells(1, 5) End Sub
Если вы хотите узнать больше об этих объектах, вы можете ознакомиться со следующими статьями: Workbook VBA, Worksheet VBA и Cell и Range VBA.
Использование Dim с Class Module Objects
В VBA мы используем Class Modules для создания наших собственных пользовательских объектов. Вы можете прочитать все о Class Modules здесь.
Если мы
создаем объект, нам нужно использовать ключевое слово New.
Мы можем сделать это в операторе Dim или в операторе Set.
Следующий код создает объект, используя ключевое слово New в выражении Dim:
' Объявить и создать Dim o As New class1 Dim coll As New Collection
Использование New в выражении Dim означает, что каждый раз
при запуске нашего кода будет создаваться ровно один объект.
Использование Set дает нам больше гибкости. Мы можем создать
много объектов из одной переменной. Мы также можем создать объект на основе
условия.
Этот следующий код показывает, как мы создаем объект Class Module, используя Set. (Чтобы создать модуль класса, перейдите в окно проекта, щелкните правой кнопкой мыши соответствующую книгу и выберите «Вставить модуль класса». Подробнее см. «Создание Simple Class Module».)
' Объявить только Dim o As Class1 ' Создать с помощью Set Set o = New Class1
Давайте посмотрим на пример использования Set. В приведенном ниже коде мы хотим
прочитать диапазон данных. Мы создаем объект только в том случае, если значение
больше 50.
Мы используем Set для создания объекта Class1. Это потому, что количество нужных нам объектов зависит от
количества значений более 50.
Sub IspSet() ' Объявите переменную объекта Class1 Dim o As Class1 ' Читать диапазон Dim i As Long For i = 1 To 10 If Sheet1.Range("A" & i).Value > 50 Then ' Создать объект, если условие выполнено Set o = New Class1 End If Next i End Sub
Я сохранил этот пример простым для ясности. В реальной версии этого кода мы бы заполнили объект Class Module данными и добавили его в структуру данных, такую как Collection или Dictionary.
Вот пример реальной версии, основанной на данных ниже:
' Class Module - clsStudent Public Name As String Public Subject As String ' Стандартный модуль Sub ChitatBalli() ' Создать коллекцию для хранения объектов Dim coll As New Collection ' Current Region получает соседние данные Dim rg As Range Set rg = Sheet1.Range("A1").CurrentRegion Dim i As Long, oStudent As clsStudent For i = 2 To rg.Rows.Count ' Проверьте значение If rg.Cells(i, 1).Value > 50 Then ' Создать новый объект Set oStudent = New clsStudent ' Читать данные на объект студента oStudent.Name = rg.Cells(i, 2).Value oStudent.Subject = rg.Cells(i, 3).Value ' добавить объект в коллекцию coll.Add oStudent End If Next i ' Распечатайте данные в Immediate Window, чтобы проверить их Dim oData As clsStudent For Each oData In coll Debug.Print oData.Name & " studies " & oData.Subject Next oData End Sub
Чтобы узнать больше о Set вы можете заглянуть сюда.
Объекты из внешней библиотеки
Действительно полезная часть VBA — это то, как у нас есть
доступ к внешним библиотекам. Это открывает целый новый мир тому, что мы можем
сделать.
Примерами являются библиотеки Access, Outlook и Word,
которые позволяют нам взаимодействовать с этими приложениями.
Мы можем использовать библиотеки для различных типов
структур данных, таких как Словарь, Массив, Стек и Очередь.
Существуют библиотеки для очистки веб-сайта (библиотека
объектов Microsoft HTML), использования регулярных выражений (регулярные
выражения Microsoft VBScript) и многих других задач.
Мы можем создать эти объекты двумя способами:
- Раннее связывание
- Позднее связывание
Давайте посмотрим на это по очереди.
Раннее связывание
Раннее связывание означает, что мы добавляем справочный
файл. Как только этот файл добавлен, мы можем рассматривать объект как объект
модуля класса.
Мы добавляем ссылку, используя Tools-> Reference, а затем
проверяем соответствующий файл в списке.
Например, чтобы использовать словарь, мы ставим флажок
«Microsoft Scripting Runtime»
Как только мы добавим ссылку, мы можем использовать словарь
как объект модуля класса
Sub RanSvyaz() ' Используйте только Dim Dim dict1 As New Dictionary ' Используйте Dim и Set Dim dict2 As Dictionary Set dict2 = New Dictionary End Sub
Преимущество раннего связывания заключается в том, что у нас
есть доступ к Intellisense. Недостатком является то, что это может вызвать
конфликтные проблемы на других компьютерах.
Лучше всего использовать раннюю привязку при написании кода,
а затем использовать позднюю привязку при распространении кода другим
пользователям.
Позднее связывание
Позднее связывание означает, что мы создаем объект во время
выполнения.
Мы объявляем переменную как тип «Объект». Затем мы
используем CreateObject для создания объекта.
Sub PozdSvyaz() Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") End Sub
Использование Dim с Arrays
В VBA есть два типа массивов:
- Статический — размер массива задается в
операторе Dim и не может изменяться. - Динамический — размер массива не указан в
выражении Dim. Это устанавливается позже с помощью оператора ReDim
' Статический массив ' Магазины 7 длинных - от 0 до 6 Dim arrLong(0 To 6) As Long ' Магазины 7 длинных - от 0 до 6 Dim arrLong(6) As String
Динамический массив дает нам гораздо больше гибкости. Мы
можем установить размер во время выполнения кода.
Мы объявляем динамический массив, используя инструкцию Dim,
и устанавливаем размер позже, используя ReDim.
' Динамический массив ' Объявите переменную Dim arrLong() As Long ' Установить размер ReDim arrLong(0 To 6) As Long
Использование ReDim
Большая разница между Dim и ReDim
заключается в том, что мы можем использовать переменную в выражении ReDim. В операторе Dim размер должен быть
постоянным значением.
Sub IspSet() ' Объявите переменную Dim arrLong() As Long ' Спросите пользователя о размере Dim size As Long size = InputBox("Пожалуйста, введите размер массива.", Default:=1) ' Установите размер на основе пользовательского ввода ReDim arrLong(0 To size) As Long End Sub
На самом деле мы можем использовать оператор Redim без
предварительного использования оператора Dim.
В первом примере вы можете видеть, что мы используем Dim:
Sub IspDimReDim() ' Использование Dim Dim arr() As String ReDim arr(1 To 5) As String arr(1) = "Яблоко" arr(5) = "Апельсин" End Sub
Во втором примере мы не используем Dim:
Sub IspTolkoReDim () ' Использование только ReDim ReDim arr(1 To 5) As String arr(1) = "Яблоко" arr(5) = "Апельсин" End Sub
Преимущество состоит в том, что вам не нужно тусклое
утверждение. Недостатком является то, что это может сбить с толку тех, кто
читает ваш код. В любом случае это не имеет большого значения.
Вы можете использовать ключевое слово Preserve с ReDim для сохранения существующих данных при изменении размера массива. Вы можете прочитать больше об этом здесь.
Вы можете найти все, что вам нужно знать о массивах в VBA здесь.
Устранение неполадок ошибок Dim
В таблице
ниже приведены ошибки, с которыми вы можете столкнуться при использовании Dim. См. Ошибки VBA для
объяснения различных типов ошибок.
Ошибка | Тип | Причина |
Массив уже рассчитан |
Компиляция | Использование Redim для статического массива. |
Ожидаемый: идентификатор |
Синтаксис | Использование зарезервированного слова в качестве имени переменной. |
Ожидаемый: новый тип имени |
Синтаксис | Тип отсутствует в выражении Dim. |
Переменная объекта или переменная блока не установлена |
Время выполнения | New не был использован для создания объекта. |
Переменная объекта или переменная блока не установлена |
Время выполнения | Set не использовался для назначения переменной объекта. |
Пользовательский тип не определен |
Компиляция | Тип не распознан. Это может произойти, если ссылочный файл не добавлен в меню «Инструменты-> Ссылка» или имя модуля класса написано неправильно. |
Недопустимый оператор вне блока Type |
Компиляция | Имя переменной отсутствует в выражении Dim |
Переменная не определена |
Компиляция | Переменная используется перед Dim-строкой. |
Локальные и глобальные переменные
Когда мы используем Dim в процедуре (то есть подпрограмме или функции), она считается
локальной. Это означает, что это доступно только с этой процедурой.
Глобальные переменные объявляются вне процедур. В
зависимости от типа, они могут быть доступны для всех процедур в одном и том же
модуле или для всех процедур во всех модулях в текущей рабочей книге.
В приведенном ниже коде мы объявили count как глобальную переменную:
' Глобальная Dim count As Long Sub UseCount1() count = 6 End Sub Sub UseCount2() count = 4 End Sub
Что произойдет, если у нас будет глобальная переменная и
локальная переменная с одинаковым именем?
На самом деле это не вызывает ошибку. VBA дает приоритет локальной декларации.
' Глобальная Dim count As Long Sub UseCount() ' Локальная Dim count As Long ' Относится к локальному счету count = 6 End Sub
Подобная ситуация может привести только к проблемам, так как
трудно отследить, какой счет используется.
Вообще глобальных переменных следует избегать, где это
возможно. Они делают код очень трудным для чтения, потому что их значения могут
быть изменены в любом месте кода. Это затрудняет обнаружение и устранение ошибок.
Важно знать и понимать глобальные переменные как вы,
поскольку вы можете встретить их в существующем коде.
Dim против Private
В VBA есть ключевое слово Private.
Если мы используем ключевое слово Private с переменной или
подфункцией / функцией, то этот элемент доступен только в текущем модуле.
Использование Dim и Private для переменной дает тот же
результат
' Доступно во всем этом модуле Private priCount As Long Dim dimCount As Long Sub UseCount() ' Доступно только в этом разделе Private priName As String Dim dimName As String End Sub
В VBA принято использовать Private для глобальных переменных
и Dim для локальных
' Доступно во всем этом модуле Private priCount As Long Sub UseCount() ' Только локальный Dim dimName As String End Sub
Local OnlyThere
в VBA есть 2 других
типа объявлений, которые называются Public и Global.
Ниже приводится краткое изложение всех 4 типов:
- Dim
— используется для объявления локальных переменных, т. Е. В процедурах. - Private
— используется для объявления глобальных переменных и процедур. Эти переменные
доступны только для текущего модуля. - Public
— используется для объявления глобальных переменных и процедур. Эти переменные
доступны во всех модулях. - Global
— старая и устаревшая версия Public.
Может использоваться только в стандартных модулях. Он существует только для обратной
совместимости.
Заключение
На этом мы заканчиваем статью о VBA Dim Statement. Если у вас есть
какие-либо вопросы или мысли, пожалуйста, дайте мне знать в комментариях ниже.
Содержание
- Ссылка на диапазоны и ячейки
- Динамические диапазоны с переменными
- SpecialCells — LastCell
- UsedRange
- CurrentRegion
- Именованный диапазон
- Таблицы
В этой статье будет продемонстрировано, как создать динамический диапазон в Excel VBA.
Объявление определенного диапазона ячеек в качестве переменной в Excel VBA ограничивает нас работой только с этими конкретными ячейками. Объявляя динамические диапазоны в Excel, мы получаем гораздо больше гибкости в нашем коде и функциональных возможностях, которые он может выполнять.
Ссылка на диапазоны и ячейки
Когда мы ссылаемся на объект Range или Cell в Excel, мы обычно обращаемся к ним путем жесткого кодирования в строке и столбцах, которые нам требуются.
Свойство диапазона
Используя свойство Range в приведенных ниже примерах строк кода, мы можем выполнять действия с этим диапазоном, такие как изменение цвета ячеек или выделение ячеек полужирным шрифтом.
12 | Диапазон («A1: A5»). Font.Color = vbRedДиапазон («A1: A5»). Полужирный шрифт = True |
Ячейки собственности
Точно так же мы можем использовать свойство Cells для ссылки на диапазон ячеек, напрямую ссылаясь на строку и столбец в свойстве Cells. Строка всегда должна быть числом, но столбец может быть числом или буквой, заключенной в кавычки.
Например, на адрес ячейки A1 можно ссылаться как на:
Или
Чтобы использовать свойство Cells для ссылки на диапазон ячеек, нам нужно указать начало диапазона и конец диапазона.
Например, для ссылки на диапазон A1: A6 мы могли бы использовать следующий синтаксис:
1 | Диапазон (Ячейки (1,1), Ячейки (1,6) |
Затем мы можем использовать свойство Cells для выполнения действий с диапазоном в соответствии с приведенными ниже примерами кода:
12 | Диапазон (Ячейки (2, 2), Ячейки (6, 2)). Font.Color = vbRedДиапазон (Ячейки (2, 2), Ячейки (6, 2)). Жирный шрифт = Истина |
Динамические диапазоны с переменными
Поскольку размер наших данных в Excel изменяется (т.е. мы используем больше строк и столбцов, чем диапазоны, которые мы закодировали), было бы полезно, если бы диапазоны, на которые мы ссылаемся в нашем коде, также изменились. Используя объект Range выше, мы можем создавать переменные для хранения максимальных номеров строк и столбцов в области рабочего листа Excel, которую мы используем, и использовать эти переменные для динамической настройки объекта Range во время выполнения кода.
Например
1234 | Dim lRow как целое числоDim lCol как целое числоlRow = Диапазон («A1048576»). Конец (xlUp) .RowlCol = Range («XFD1»). End (xlToLeft) .Column |
Последняя строка в столбце
Поскольку на листе 1048576 строк, переменная lRow переместится в нижнюю часть листа, а затем с помощью специальной комбинации клавиши End и клавиши со стрелкой вверх перейдите к последней строке, используемой на листе — это даст нам номер нужной нам строки в нашем диапазоне.
Последний столбец в строке
Аналогичным образом lCol переместится в столбец XFD, который является последним столбцом на листе, а затем с помощью специальной комбинации клавиш, состоящей из клавиши End и клавиши со стрелкой влево, перейдет к последнему столбцу, используемому на листе — это даст нам номер нужного нам столбца в нашем диапазоне.
Следовательно, чтобы получить весь диапазон, который используется на листе, мы можем запустить следующий код:
1234567891011 | Sub GetRange ()Dim lRow As IntegerDim lCol как целое числоDim rng As RangelRow = Диапазон («A1048576»). Конец (xlUp) .Row’используйте lRow, чтобы найти последний столбец в диапазонеlCol = Range («XFD» & lRow) .End (xlToLeft) .ColumnУстановить rng = Range (Cells (1, 1), Cells (lRow, lCol))’msgbox, чтобы показать нам диапазонMsgBox «Range is» & rng.AddressКонец подписки |
SpecialCells — LastCell
Мы также можем использовать метод SpecialCells объекта Range, чтобы получить последнюю строку и столбец, используемые в рабочем листе.
123456789101112 | Sub UseSpecialCells ()Dim lRow As IntegerDim lCol как целое числоDim rng As RangeDim rngBegin As RangeУстановить rngBegin = Range («A1»)lRow = rngBegin.SpecialCells (xlCellTypeLastCell) .RowlCol = rngBegin.SpecialCells (xlCellTypeLastCell) .ColumnУстановить rng = Range (Cells (1, 1), Cells (lRow, lCol))’msgbox, чтобы показать нам диапазонMsgBox «Range is» & rng.AddressКонец подписки |
UsedRange
Метод используемого диапазона включает все ячейки, в которых есть значения на текущем листе.
123456 | Sub UsedRangeExample ()Dim rng As RangeУстановить rng = ActiveSheet.UsedRange’msgbox, чтобы показать нам диапазонMsgBox «Range is» & rng.AddressКонец подписки |
CurrentRegion
Текущая область отличается от UsedRange тем, что она просматривает ячейки, окружающие ячейку, которую мы объявили как начальный диапазон (т.е. переменную rngBegin в приведенном ниже примере), а затем просматривает все ячейки, которые « прикреплены » или связаны в объявленную ячейку. Если в строке или столбце появится пустая ячейка, CurrentRegion перестанет искать другие ячейки.
12345678 | К югу от CurrentRegion ()Dim rng As RangeDim rngBegin As RangeУстановить rngBegin = Range («A1»)Установите rng = rngBegin.CurrentRegion’msgbox, чтобы показать нам диапазонMsgBox «Range is» & rng.AddressКонец подписки |
Если мы используем этот метод, нам нужно убедиться, что все ячейки в требуемом диапазоне связаны между собой, и среди них нет пустых строк или столбцов.
Именованный диапазон
Мы также можем ссылаться на именованные диапазоны в нашем коде. Именованные диапазоны могут быть динамическими, поскольку при обновлении или вставке данных имя диапазона может измениться, чтобы включить новые данные.
В этом примере шрифт для названия диапазона «Январь» будет изменен на полужирный.
12345 | Sub RangeNameExample ()Dim rng as RangeSet rng = Range («Январь»)rng.Font.Bold = = ВерноКонец подписки |
Как вы увидите на рисунке ниже, если строка добавляется в имя диапазона, имя диапазона автоматически обновляется, чтобы включить эту строку.
Если мы затем снова запустим пример кода, диапазон, на который воздействует код, будет C5: C9, тогда как в первом случае это будет C5: C8.
Таблицы
Мы можем ссылаться на таблицы (щелкните для получения дополнительной информации о создании и управлении таблицами в VBA) в нашем коде. Когда данные таблицы в Excel обновляются или изменяются, код, который ссылается на таблицу, будет ссылаться на обновленные данные таблицы. Это особенно полезно при обращении к сводным таблицам, подключенным к внешнему источнику данных.
Используя эту таблицу в нашем коде, мы можем ссылаться на столбцы таблицы по заголовкам в каждом столбце и выполнять действия с столбцом в соответствии с их именем. По мере того, как строки в таблице увеличиваются или уменьшаются в соответствии с данными, диапазон таблицы будет соответствующим образом корректироваться, и наш код будет по-прежнему работать для всего столбца в таблице.
Например:
123 | Подраздел DeleteTableColumn ()ActiveWorkbook.Worksheets («Лист1»). ListObjects («Таблица1»). ListColumns («Поставщик»). УдалитьКонец подписки |
Содержание
- Формулы динамических массивов и устаревшие формулы для массивов CSE
- Формулы динамического массива:
- Дополнительные сведения
- Билл Джелен. Динамические массивы в Excel
- Содержание
- Введение
- Глава 1. Начало работы
- Формулы теперь могу разливаться
- Что происходит, если формула не может пролиться?
- Если ваша формула указывает на Таблицу, динамический массив будет расширяться при добавлении новых строк в Таблицу
- Использование нового типа ссылок на массив: E3#
- Что такое неявное пересечение
- Формулы динамического массива в Excel, не поддерживающими динамические функции
- Подробные сведения
- Дополнительные сведения
- Формулы динамического массива и поведение перенесенного массива
- Что означает перенос?
- Ключевые моменты
- Дополнительные сведения
Формулы динамических массивов и устаревшие формулы для массивов CSE
В сентябре 2018 г. мы выпустили формулы динамического массива для Excel для Microsoft 365. Различия между динамическими массивами и устаревшими формулами CTRL+SHIFT+ВВОД (CSE) рассмотрены ниже.
Примечание: В настоящее время эта функция доступна только для части ее текущих insiders. Мы будем оптимизировать такие функции в течение следующих нескольких месяцев. Когда они будут готовы, мы разпустим их для всех инсайдеров Office и подписчиков Microsoft 365.
Формулы динамического массива:
Может «пролит» за пределами границ ячейки, в которой введена формула. В следующем примере показана функция RANDARRAY в D1, которая передается через D1:F5 или 5 строк на 3 столбца. Технически динамическая формула массива существует только в ячейке D1, в то время как при устаревшей формуле CSE формула должна в должна быть введена во всем диапазоне.
При добавлении или удалении данных в диапазоне источника автоматически будет меняться их объем. Формулы массива CSE утесируют возвращаемую область, если она слишком мала, или #N/A, если она слишком большая.
Вычислять в контексте 1×1. Например, функция СЛ RAND возвращает один результат, поэтому если требуется вернуть в сетку несколько случайных чисел, можно использовать функцию СЛРАСП. Функции СТРОКАи СТОЛБЕЦ возвращают строку и столбец ячейки источника. Функцию ПОСЛЕПОРЯДОК(СТРОКА()) можно использовать для репликации старого поведения функции СТРОКА в устаревшей формуле массива.
Новые формулы, которые возвращают больше одного результата, будут автоматически пролиты. Не нужно нажимать CTRL+SHIFT+ВВОД.
Формулы массива CSE сохраняются из соображений совместимости. В будущем следует использовать динамические формулы массивов.
Если ячейки в устаревшей формуле массива CSE зависят друг от друга, Excel будет пытаться вычислить каждую из них по отдельности, а не как массив. Такое поведение называется «разбиваниеМЕся по CSE», и в некоторых случаях формулы, вычислимые таким образом, могут привести к несогласованным результатам. Чтобы избежать возможных несогласованных результатов, мы рекомендуем использовать отдельные формулы, вместо того чтобы полагаться на разбиение CSE. Динамические формулы массива не будут разорвано. Вместо этого они будут сообщать о циклской ссылке, чтобы вы могли ее решить.
Их можно легко изменить, изменив исходные ячейки, в то время как формулы массива CSE требуют одновременного редактирования всего диапазона.
Вставка и удаление столбцов и строк запрещается в активном диапазоне формул массива CSE. Сначала необходимо удалить все существующие формулы массива, которые на этом на пути.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Билл Джелен. Динамические массивы в Excel
Незаметно для меня Microsoft совершил прорыв, представив в сентябре 2018 новые возможности – динамические массивы. Ниже – перевод книги Bill Jelen. Excel Dynamic Arrays Straight to the Point. Книги серии Straight to the Point предназначены для глубокого освещения одного аспекта Excel.
Билл Джелен – основатель сайта MrExcel.com и автор множества книг о Excel. Сайт бесплатно отвечает на более чем 30 000 вопросов в год. В моем блоге представлены три книги Джелена:
Скачать заметку в формате Word или pdf, примеры в формате Excel
Содержание
Введение
Ранее многие люди пытались изучать формулы массива и потерпели неудачу. Майк Гирвин написал отличную книгу, чтобы объяснить, как работают формулы массива. Целые главы той книги здесь будут сведены к коротким предложениям, благодаря новым функциям.
О динамических массивах было объявлено 24 сентября 2018 года, но даже в MS Excel 2019 они пока не представлены. Динамические массивы доступны только в Office 365. Я думаю, что парадигма покупки бессрочной лицензии на Office каждые три или шесть лет устарела, и рекомендую переходить на подписку.
Как организована эта книга. В главе 1 вы узнаете о концепции формулы, распространяющейся на соседние ячейки. Вы увидите, как непустая ячейка может блокировать разлив массива, и как это исправить. Вы услышите о неявном пересечении и о том, как нотация @ может решить эту проблему. Главы 2–8 посвящены каждой из шести новых функций и их комбинациям. Глава 9 основана на превосходном видео Джо Макдэйда. Из этой главы вы узнаете термины, которые использует команда Excel Calc: Подъем, Трансляция, Попарный подъем, Усечение массива и Неявное пересечение. В главе 10 рассматриваются два способа, с помощью которых динамические массивы делают новую функцию ПРОСМОТРX более мощной. В 11-й – приведены 24 примера объединения динамических массивов с рядом обычных функций Excel. В 12-й главе показано, как динамические массивы могут работать с функциями кубов.
Оригинальные файлы с примерами можно загрузить с сайта автора. К каждой главе я приложу файл, адаптированный к настоящему переводу.
Глава 1. Начало работы
Формулы теперь могу разливаться
В этой главе рассматривается новая формула =A2:A20, ошибка #ПЕРЕНОС! и новый неявный оператор пересечения @.
Начнем с базовой формулы массива. Перейдите в ячейку Е3. Наберите =A2:C10. В более ранних версиях Excel вам пришлось бы включить этот диапазон в качестве аргумента какой-нибудь функции, или использовать формулу массива, одновременно нажав Ctrl+Shift+Enter.
Рис. 1. Формула указывает на диапазон ячеек
Теперь же достаточно нажать Enter. Excel возвращает значения в 27 ячеек, которые выбираются автоматически вправо и вниз. Посмотрите на формулу в строке формул… здесь нет фигурных скобок, а это значит, что никто не нажимал Ctrl+Shift+Enter.
Рис. 2. Одна формула вернула множество значений
Ячейка E4 содержит текст Central, и, хотя строка формул показывает формулу для этой ячейки, она отображается серым цветом. Давайте проверим с помощью VBA, что содержится в ячейках Е3 и Е4?
Рис. 3. VBA подтверждает, что в ячейке Е4 не формула
VBA показывает, что в ячейке Е3 – формула, а в Е4 – нет. Также в Excel можно ввести формулу =ЕФОРМУЛА(E4). Она вернет ЛОЖЬ. И еще одна проверка. Выберете диапазон D1:H20, и пройдите по меню Главная –> Найти и заменить –> Формулы. Будет выделена только ячейка E3.
Один из первых вопросов на YouTube в ответ на мои первые видео с динамическими массивами был: можно ли вы копировать и вставлять значения? Да! Выберите диапазон E3:G11, нажмите Ctrl+C, кликните правой кнопкой мыши на выбранную новую ячейку и выберите Специальная вставка –> Значения.
Что происходит, если формула не может пролиться?
Что произойдет, если ячейка, куда должен разлиться диапазон, будет занята?
Рис. 4. Как Excel справится с занятой ячейкой?
Excel вернет ошибку #ПЕРЕНОС! Excel сообщает, что не может вернуть массив целиком. Поэтому не вернет ни одного результата. Если выбрать контекстное меню слева от ячейки с ошибкой, можно выделить мешающие ячейки. Возможно, их получится перенести в другое место листа.
Рис. 5. Ошибка #ПЕРЕНОС! и ее контекстное меню
Как только вы очистите ячейки, мешающие размещению массива, он автоматически разольется.
Существует несколько типов ошибки #ПЕРЕНОС! Та, что выше, называется Диапазон для переноса данных не пустой. Другие ошибки:
- Неопределенный размер. Вы не можете использовать волатильные функции, например, СЛУЧМЕЖДУ(), в качестве аргумента функции ПОСЛЕДОВ().
- Выходит за пределы листа. Вы не можете ввести функцию =СОРТ(C:C) в ячейке E2.
- Табличная формула. Вы не можете использовать функции динамического массива внутри Таблицы.
- Не хватает памяти. Вам следует ссылаться на диапазон меньшего размера.
- Разлив в объединенные ячейки. Динамический массив не может разливаться в объединенную ячейку.
- Неопознанная ошибка. Excel не может распознать ошибку.
Если ваша формула указывает на Таблицу, динамический массив будет расширяться при добавлении новых строк в Таблицу
Рис. 6. Динамический массив «отслеживает» Таблицу
Сравните с рис. 2. Вы преобразовали диапазон А1:С19 в Таблицу (Ctrl+T). Формула в ячейке Е3 изменилась на =Таблица1. Теперь, если вы добавите еще одну строку в Таблицу (А11:С11), формула в ячейке Е3 не изменится, а динамический массив автоматически расширится еще одной строкой (Е12:G12).
Хотя формулы динамического массива могут указывать на Таблицу, в самой Таблице использовать формулы динамического массива нельзя.
Использование нового типа ссылок на массив: E3#
Как вы захотите сослаться на массив E3:G12, но не знаете, какого он размера, добавьте оператор разлитого диапазона (#) после ячейки, содержащей формулу массива.
Например, =E3 вернет East, =E3# вернет весь массив, формула которого хранится в E3. Неофициально это называется ссылочной нотацией массива. Такая нотация поддерживается только при ссылке внутри одной книги.
Что такое неявное пересечение
Если вы введете =@C2:C11 в любой ячейке в строках со 2 по 10, формула вернет значение из столбца С той строки, в которой вы ввели формулу. Знак @ известен как неявный оператор пересечения.
Рис. 7. Используйте нотацию @, когда вам нужно неявное пересечение.
Источник
Формулы динамического массива в Excel, не поддерживающими динамические функции
В сентябре 2018 г. мы представили формулы динамического массива. Формулы динамического массива могут автоматически заполнять или «перетащать» в соседние пустые ячейки, устраняя необходимость в устаревших формулах массива CTRL+SHIFT+ВВОД (CSE). При открытии книги, содержащего формулы динамического массива в более ранней версии Excel, необходимо учитывать некоторые аспекты совместимости.
Примечание: Поддержка формул динамического массива была выпущена для подписчиков Microsoft 365 в Current Channel в январе 2020 г.
Подробные сведения
При написании формулы в Excel с поддержкой динамических массивов она определяет, может ли формула возвращать несколько значений (даже если она в настоящее время возвращает только одно значение). Если он может вернуть несколько значений, мы сохраняем его как формулу динамического массива, которая будет отображаться в более ранних версиях Excel как устаревшая формула CSE.
Ниже приведены примеры функции MUNIT, введенной в виде формулы динамического массива и устаревшей формулы CSE. Обратите внимание, что устаревшие формулы массива CSE ведут себя очень аналогично формулам динамического массива. Основное различие заключается в том, что они не могут изменять размер и не имеют границы сброса. Сравнение этих двух значений см. в разделе » Формулы динамического массива и устаревшие формулы массива CSE».
Если вы знаете, что будете совместно использовать книги с динамическими формулами массива с другими пользователями Excel, не поддерживающими динамические функции, лучше избегать использования недоступных им функций. Средство проверки совместимости можно использовать для поиска формул, которые сохраняются как формулы динамического массива и будут отображаться как массивы CSE в более ранних версиях Excel.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Формулы динамического массива и поведение перенесенного массива
Формулы Excel, возвращающие набор значений, также известный как массив, возвращают эти значения в смежные ячейки. Это действие называется переносом.
Формулы, способные возвращать массивы переменного размера, называются формулами динамического массива. Формулы, которые в сейчас возвращают успешно переносимые массивы, можно назвать формулами перенесенного массива.
Ниже приведены несколько заметок, которые помогут вам в понимании и использовании формул такого типа.
Что означает перенос?
Примечание: Более старые формулы массива, известные как устаревшие формулы массива, всегда возвращают результат фиксированного размера — они всегда переносятся в одно и то же количество ячеек. Поведение при переносе, описанное в этом разделе, не применяется к устаревшим формулам массива.
Перенос означает, что формула привела к нескольким значениям, и эти значения были помещены в смежные ячейки. Например, =SORT(D2:D11;1,-1),, сортирующая массив в порядке убывания, возвращает соответствующий массив высотой 10 строк. Но вам нужно только ввести формулу в верхнюю левую ячейку или в данном случае F2, и она автоматически переместится в ячейку F11.
Ключевые моменты
При нажатии на ВВОД для подтверждения формулы Excel динамически изменит размер диапазона вывода и поместит результаты в каждую ячейку в этом диапазоне.
Если вы пишете формулу динамического массива для работы со списком данных, может быть удобно поместить его в таблицу Excel, а затем использоватьструктурированные ссылки для ссылки на данные. Это происходит потому, что структурированные ссылки автоматически корректируются при добавлении или удалении строк из таблицы.
Формулы перенесенного массива не поддерживаются в самих таблицах Excel, поэтому их следует размещать в сетке за пределами таблицы. Таблицы лучше всего подходят для хранения строк и столбцов независимых данных.
После ввода формулы перенесенного массива при выделении любой ячейки в области переноса Excel выделит рамкой границу диапазона. Граница исчезнет при выборе ячейки за пределами области.
Редактировать можно только первую ячейку в области переноса. При выборе другой ячейки в области переноса, формула будет видна в строке формул, но текст будет «фантомным» и недоступным для изменения. При необходимости обновить формулу, необходимо выбрать верхнюю левую ячейку в диапазоне массива, изменить ее по мере необходимости. При нажатии Enter Excel автоматически обновит остальную часть области переноса.
Перекрытие формул. Формулы массива нельзя ввести, если что-то блокирует выходной диапазон. и если это происходит, Excel возвращает ошибку #SPILL!, указывающую на наличие блокировки. Если удалить помеху, формула будет перенесена должным образом. В приведенном ниже примере выходной диапазон формулы перекрывает другой диапазон с данными и отображается с пунктирной рамкой, перекрывающей ячейки со значениями, указывающими, что он не может быть перенесен. Удалите блокирующие данные или скопируйте их в другое место, и формула перенесется, как и ожидалось.
Устаревшие формулы массива, введенные с помощью CTRL+SHIFT+ENTER (CSE), по-прежнему поддерживаются по соображениям обратной совместимости, но их больше нельзя использовать. Если хотите, вы можете преобразовать устаревшие формулы массива в формулы динамического массива, найдя первую ячейку в диапазоне массива, скопировав текст формулы, удалив весь диапазон устаревшего массива, а затем повторно введя формулу в верхней левой ячейке. Перед обновлением устаревших формул массива до динамических формул массива следует помнить о некоторых счетных различиях между ними.
Приложение Excel ограничило поддержку динамических массивов в операциях между книгами, и этот сценарий поддерживается, только если открыты обе книги. Если закрыть исходную книгу, все связанные формулы динамического массива вернут ошибку #ССЫЛКА! после обновления.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Динамический именованный диапазон в Excel
Смотрите также То есть, вВот думал, что
- ЗЫ 2 иНапример, если имя Вот и в на весь наш в четвертой по дописывании новых строк
- Выделите ваш диапазон ячеек
- B, а не на которое нужно нерационально потреблять больше
Но, если перед составлением фиксировать нахождение активной только на этомПеревел: Антон Андронов
- Динамический именованный диапазон автоматически моём примере, хочу СМЕЩ() летуча везде, даже если формулы ЭтоДата имеет в
- приемах () то диапазон. Для этого счету ячейке в
- они автоматически будут и выберите на весь столбец целиком. увеличить диапазон в
памяти. Это может
сложной формулы мы
ячейки в момент листе) или оставьтеАвтор: Антон Андронов расширяется при добавлении чтобы при подстановке
- старался в именах работают медленно - RefersTo летучую формулу
- же. используем функцию: столбце A1:A5. Последний
- добавляться к диаграмме. вкладке Данный факт исключает
- высоту. По сути, привести к серьезным присвоим диапазону создания имени); значение Книга, чтобы
- Обычно ссылки на диапазоны значения в диапазон. цыфры 10 —>
ее избегать, благо предпочитаю попить чайку, =СЕГОДНЯ()Почему бы неИНДЕКС(диапазон; номер_строки; номер_столбца) аргумент функции Тип_сопоставленияПри создании выпадающих списковГлавная – Форматировать как
- возможные ошибки связанные название говорит само проблемам при работеE2:E8на вкладке Формулы в
- имя было доступно ячеек вводятся непосредственноНапример, выберите диапазон функция СЧЁТ меняла
ИНДЕКС() в помощь. но не делать
то формула ячейки
использовать обычный ИНДЕКС
Она выдает содержимое ячейки
office-guru.ru
Именованный диапазон в MS EXCEL
= 0 означает, прямые ссылки на Таблицу (Home – с памятью при за себя. с документом. Самым какое-нибудь имя (например, Цены), группе Определенные имена на любом листе
в формулы, напримерA1:A4 диапазон и начинала Но со СМЕЩ() работу ручками:) =ЕСЛИ(A1=1; ЭтоДата) станет ? Может тут
из диапазона по что мы ведем элементы умной таблицы Format as Table) работе с данным«Размер диапазона в ширину» рациональным решением является то ссылку на выберите команду Присвоить книги; =СУММ(А1:А10). Другим подходоми присвойте ему считать от одноимённого оптимальнее. Теперь умный,Казанский летучей, только если
где-то есть загвоздка номеру строки и поиск точного соответствия. использовать нельзя, но: документом. – количество ячеек,
использование динамических имен. диапазон придется менять имя;убедитесь, что в поле является использование в имя аргумента 10 !
Задача1 (Именованный диапазон с абсолютной адресацией)
знаю :): Сталкивался с тем, A1=1 ?
столбца, т.е. например Если этот аргумент можно легко обойтиЕсли вам не нуженУ нас есть динамическое
на которое нужно
- Выберите инструмент «Формулы»-«Определенные имена»-«Присвоитьтолько 1 разв поле Имя введите: Диапазон введена формула качестве ссылки имени
- PricesManyashaХотя вряд ли что СМЕЩ -
- Раз уж затронулВ примере два
- функция =ИНДЕКС(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 и введите и имя диапазона! $ перед названием
- среднее значение продаж, формулы для суммирования,
- (Диспетчер имен). ! У меня видно по структурене работает, а условного форматирования, также СМЕЩ? скриншоте. когда найдет ближайшее в умную таблицуИмя таблицы (Table Name)В отчет добавьте новую
- в 4-ом параметре функцию =СУММ сВ процессе работы с столбца). Такая адресация записав =СРЗНАЧ(Продажи).
например, объемов продаж:Нажмите кнопку так ещё ни данных) таблицы «мощные» так работает:
пересчитываются. Это нужно
Функция СМЕЩ в Excel
viktturПричем есть один не наименьшее значение к по каким-либо причинам.
запись в ячейки функции: =СМЕЩ. именем «доход» в данными в Excel позволяет суммировать значенияОбратите внимание, что EXCEL при создании =СУММ($B$2:$B$10) и =СУММ(Продажи).Edit одна формула не и применение в{ПОИСКПОЗ(…;ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(A1;;;(СТРОКА(1:12)))} учитывать, но не
- : Файл не смотрел. совсем очевидный нюанс: заданному. Если указать нежелательно, то можноТеперь можно использовать динамические A8 — «июль»,Функция =СЧЕТ($B:$B) автоматически считает
- ее параметрах. иногда заранее не находящиеся в строках имени использовал абсолютную адресацию Хотя формулы вернут(Изменить). подходила как эта них «массивных» формул
- Владимир бояться :-)Для имен СМЕЩ() если ИНДЕКС не в качестве искомого воспользоваться чуть более ссылки на нашу B8 — «77000»
- количество заполненных ячеекТеперь постепенно заполняя ячейки известно, сколько данных2 310 $B$1:$B$10. Абсолютная ссылка один и тотКликните по полю
- ! (а можно же: Игорь, полностью разделяюВывод: в формулах лучше — короче
просто введена в значение заведомо больше, сложным, но гораздо «умную таблицу»: соответственно. И убедитесь, в столбце B. в столбце B, будет собрано в, в том столбце, жестко фиксирует диапазон
же результат (если,Refers toPelena столбец-другой добавить) -
Что определяет функция СЧЕТ
Вашу позицию, чем именованных диапазонов для :)
ячейку после знака чем любое имеющееся более незаметным иТаблица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)Используя наше динамическое имя процесс формирования диапазона
- заранее знать какой в любой строке
- не написали формулу но иногда проще=СМЕЩ($A$1;0;0;СЧЕТЗ($A:$A);1)AVI динамического диапазона, «для
- девчонками посплетничать.GIG_ant текст «лекции»:
- на диапазон после ничего не найдет ссылающийся на нашуТаблица1[#Все] «доход» нам удалось для имени «доход»,Разберем более детально функции, диапазон должно охватывать
ниже десятой (иначе=СУММ(Продажи) – суммирование работать не напрямуюОбъяснение:: А что значит трудоголиков» :-):))
exceltable.com
Динамический диапазон с автоподстройкой размеров
: И это говоритZVI. О летучести двоеточия, то выдает и выдаст порядковый таблицу. Потом, как– ссылка на создать автоматически изменяемую что делает его которые мы вводили имя. Ведь количество возникнет циклическая ссылка). будет производиться по
- с диапазонами, аФункция «летучей»?
- Пример:—— наиглавнейший противник летучих
- имен и УФ она уже не
- номер последней заполненной и в случае всю таблицу целиком динамическую диаграмму, которая
динамическим. Теперь еще в поле диапазон данных может изменяться.
Теперь введем формулу =СУММ(Сезонные_Продажи) одному и тому с их именами.OFFSETPelena=ИНДЕКС($C$1:$C$5;2):ИНДЕКС($C$1:$C$5;ЧСТРОК($C$1:$C$5)-1)12350 формул ). КудаМы часто неосознанно
Способ 1. Умная таблица
содержимое ячейки, а ячейки. А нам с умной таблицей, (A1:D5) сама добавляет и раз посмотрим на при создании динамического
Для решения данной в ячейку же диапазонуСовет(СМЕЩ) принимает 5: Значит пересчитывается приОна включает диапазонКазанский катится планета ? избегаем использования летучих ее адрес! Таким это и нужно! можно будет свободноТаблица1[Питер] отображает новые данные нашу формулу, которой имени.
задачи следует автоматическиB11.B1:B10
- : Узнать на какой диапазон аргументов: любом изменении на столбца таблицы с
- : В общем, поиском )) функций в формулах образом формула вида
- Если в нашем массиве использовать имя созданного– ссылка на в отчете.
- мы присвоили имяФункция =СМЕЩ определяет наш изменить именованный диапазонЗатем, с помощью
. ячеек ссылается Имя можно
ссылка: листе заголовком и строкой по «ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;СМЕЩ(» довольно
Так есть все
имен, в частности, $A$2:ИНДЕКС($A$2:$A$100;3) даст на только числа, то диапазона в любых диапазон-столбец без первойЕсть ли у вас «доход»: =СМЕЩ(Лист1!$B$2;0;0;СЧЁТ(Лист1!$B:$B);1) диапазон в зависимости
используемых ячеек, в Маркера заполнения, скопируемИногда выгодно использовать не через Диспетчер имен$A$1Волатильные функции (ячейкой) итогов (которые много тем находится. таки разница в в формулах динамических
выходе уже ссылку можно в качестве формулах, отчетах, диаграммах ячейки-заголовка (C2:C5) таблицы с даннымиЧитать данную формулу следует от количества заполненных зависимости от количества
ее в ячейки абсолютную, а относительную расположенный в меню,AVI могут быть иМихаил С. предложенных вариантах кроме диапазонов для выпадающих на диапазон A2:A4. искомого значения указать
и т.д. ДляТаблица1[#Заголовки] в Excel, размеры так: первый параметры ячеек в столбце введенных данных.С11D11E11
Способ 2. Динамический именованный диапазон
ссылку, об этом Формулы/ Определенные имена/смещение по строкам:: Очень интересно как пустыми),: Просто ПРОМЕЖУТОЧНЫЕ.ИТОГИ и количества букав ? списков. При этомИ вот тут в число, которое заведомо начала рассмотрим простой– ссылка на которых могут изменяться, указывает на то, B. 5 параметровДопустим, у нас есть, и получим суммы ниже. Диспетчер имен.0 индекс вернул ссылку
но возвращает диапазон ИНДЕКСом не работают…Даvikttur формулы становятся длинными дело вступает функция больше любого из пример: «шапку» с названиями т.е. количество строк
что наш автоматически функции =СМЕЩ(начальная ячейка; объект инвестирования, по продаж в каждомТеперь найдем сумму продажНиже рассмотрим как присваивать, на ячейку? Отдельно только внутренних ячеек и СМЕЩение еще
Ищем последнюю ячейку с помощью ПОИСКПОЗ
: Контрольный: и плохо читаемыми. ПОИСКПОЗ, которую мы имеющихся в таблице:Задача столбцов (A1:D1) (столбцов) может увеличиваться изменяемый диапазон начинается смещение размера диапазона которому мы хотим из 4-х сезонов. товаров в четырех имя диапазонам. Оказывается,смещение по столбцам: индекс дал другое таблицы, без шапки правильно нужно задать…=СМЕЩ(Лист1!$B$2;;;ПОИСКПОЗ(«яя»;Лист1!$B:$B;1)-1) Но дело в вставляем внутрь ИНДЕКС,Для гарантии можно использовать: сделать динамический именованныйТакие ссылки замечательно работают или уменьшаться в в ячейке B2. по строкам; смещение знать суммарную прибыль Формула в ячейках сезонах. Данные о
что диапазону ячеек0 значение, а в и обуви.хто-тоМне так больше том, что опасения чтобы динамически определить число 9E+307 (9 диапазон, который ссылался в формулах, например: процессе работы? Если Следующие два параметра по столбцам; размер за весь периодB11, С11D11E11 продажах находятся на можно присвоить имя,
СЧЁТ’е ссылку?Минусы формулы:: Народ, а почему нравится :) насчет пересчета формул конец списка: умножить на 10
бы на список=СУММ( размеры таблицы «плавают», имеют значения 0;0 диапазона в высоту; его использования. Заранееодна и та листе по разному: используя
высота:Pelena- чуть длиннее; у меня формулаGIG_ant таких имен при=$A$2:ИНДЕКС($A$2:$A$100; ПОИСКПОЗ(ПОВТОР(«я»;255);A2:A100)) в 307 степени, городов и автоматическиТаблица1[Москва] то придется постоянно – это значит, размер диапазона в мы не можем же!4сезона абсолютную или смешанную
Формируем ссылку с помощью ИНДЕКС
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) выдаст таблицы (например, первых реальное количество строк-столбцовБлагодаря функции СЧЕТ мы даже нулевыми и
ячейки столбца BE2:E8
, в которой будет
в поле Область выберите сумму.
11:20 и 20:11скажите пжлста можно хуже компас :) как люди начинают этой ячейки срабатывают для определения динамического
позицию последнего непустого в качестве результата два столбца) и
данных. Чтобы реализовать
рационально загружаем в отрицательными. для ввода других
поменять на находится формула суммирования листУрок подготовлен для Вас
— одно и
ли изменить диапазонХорошая вещь оптимизация искать решение проблем условия для обращения диапазона зачастую используется элемента в таблице, число 4, т.к.
создать диаграмму любого такое, есть несколько память только заполненные«Размер диапазона в высоту»
данных. Во-вторых, такJ14:J20 (при использовании относительной
1сезон командой сайта office-guru.ru то же в функции (СЧЁТ например) — и подумать, обработки больших массивов:)
к имени. летучая СМЕЩ ?
осталось сформировать ссылку
слово «март» расположено типа, то при способов.
ячейки из столбца – количество ячеек, функция суммирования будет.
адресации важно четко
(имя будет работатьИсточник: http://www.excel-easy.com/examples/dynamic-named-range.html данном случае при изменении условия.
excelworld.ru
и не навредить.
Незаметно для меня Microsoft совершил прорыв, представив в сентябре 2018 новые возможности – динамические массивы. Ниже – перевод книги Bill Jelen. Excel Dynamic Arrays Straight to the Point. Книги серии Straight to the Point предназначены для глубокого освещения одного аспекта Excel.
Билл Джелен – основатель сайта MrExcel.com и автор множества книг о Excel. Сайт бесплатно отвечает на более чем 30 000 вопросов в год. В моем блоге представлены три книги Джелена:
- Сводные таблицы в Microsoft Excel 2013,
- Всё о ВПР: от первого применения до экспертного уровня,
- Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Скачать заметку в формате Word или pdf, примеры в формате Excel
Содержание
- Начало работы
- Функция СОРТ
- Функция СОРТПО
- Функция ФИЛЬТР
- Функция УНИК
- Комбинирование функций
- Функция ПОСЛЕД
- Функция СЛМАССИВ
- Почему формулы массива (Ctrl+Shift+Enter) такие жесткие: неявное пересечение
- Функция ПРОСМОТРX и динамические массивы
- Обычные функции, использующие динамические массивы
- Динамические массивы и функции кубов
Введение
Ранее многие люди пытались изучать формулы массива и потерпели неудачу. Майк Гирвин написал отличную книгу, чтобы объяснить, как работают формулы массива. Целые главы той книги здесь будут сведены к коротким предложениям, благодаря новым функциям.
О динамических массивах было объявлено 24 сентября 2018 года, но даже в MS Excel 2019 они пока не представлены. Динамические массивы доступны только в Office 365. Я думаю, что парадигма покупки бессрочной лицензии на Office каждые три или шесть лет устарела, и рекомендую переходить на подписку.
Как организована эта книга. В главе 1 вы узнаете о концепции формулы, распространяющейся на соседние ячейки. Вы увидите, как непустая ячейка может блокировать разлив массива, и как это исправить. Вы услышите о неявном пересечении и о том, как нотация @ может решить эту проблему. Главы 2–8 посвящены каждой из шести новых функций и их комбинациям. Глава 9 основана на превосходном видео Джо Макдэйда. Из этой главы вы узнаете термины, которые использует команда Excel Calc: Подъем, Трансляция, Попарный подъем, Усечение массива и Неявное пересечение. В главе 10 рассматриваются два способа, с помощью которых динамические массивы делают новую функцию ПРОСМОТРX более мощной. В 11-й – приведены 24 примера объединения динамических массивов с рядом обычных функций Excel. В 12-й главе показано, как динамические массивы могут работать с функциями кубов.
Оригинальные файлы с примерами можно загрузить с сайта автора. К каждой главе я приложу файл, адаптированный к настоящему переводу.
Глава 1. Начало работы
Формулы теперь могу разливаться
В этой главе рассматривается новая формула =A2:A20, ошибка #ПЕРЕНОС! и новый неявный оператор пересечения @.
Начнем с базовой формулы массива. Перейдите в ячейку Е3. Наберите =A2:C10. В более ранних версиях Excel вам пришлось бы включить этот диапазон в качестве аргумента какой-нибудь функции, или использовать формулу массива, одновременно нажав Ctrl+Shift+Enter.
Рис. 1. Формула указывает на диапазон ячеек
Теперь же достаточно нажать Enter. Excel возвращает значения в 27 ячеек, которые выбираются автоматически вправо и вниз. Посмотрите на формулу в строке формул… здесь нет фигурных скобок, а это значит, что никто не нажимал Ctrl+Shift+Enter.
Рис. 2. Одна формула вернула множество значений
Ячейка E4 содержит текст Central, и, хотя строка формул показывает формулу для этой ячейки, она отображается серым цветом. Давайте проверим с помощью VBA, что содержится в ячейках Е3 и Е4?
Рис. 3. VBA подтверждает, что в ячейке Е4 не формула
VBA показывает, что в ячейке Е3 – формула, а в Е4 – нет. Также в Excel можно ввести формулу =ЕФОРМУЛА(E4). Она вернет ЛОЖЬ. И еще одна проверка. Выберете диапазон D1:H20, и пройдите по меню Главная –> Найти и заменить –> Формулы. Будет выделена только ячейка E3.
Один из первых вопросов на YouTube в ответ на мои первые видео с динамическими массивами был: можно ли вы копировать и вставлять значения? Да! Выберите диапазон E3:G11, нажмите Ctrl+C, кликните правой кнопкой мыши на выбранную новую ячейку и выберите Специальная вставка –> Значения.
Что происходит, если формула не может пролиться?
Что произойдет, если ячейка, куда должен разлиться диапазон, будет занята?
Рис. 4. Как Excel справится с занятой ячейкой?
Excel вернет ошибку #ПЕРЕНОС! Excel сообщает, что не может вернуть массив целиком. Поэтому не вернет ни одного результата. Если выбрать контекстное меню слева от ячейки с ошибкой, можно выделить мешающие ячейки. Возможно, их получится перенести в другое место листа.
Рис. 5. Ошибка #ПЕРЕНОС! и ее контекстное меню
Как только вы очистите ячейки, мешающие размещению массива, он автоматически разольется.
Существует несколько типов ошибки #ПЕРЕНОС! Та, что выше, называется Диапазон для переноса данных не пустой. Другие ошибки:
- Неопределенный размер. Вы не можете использовать волатильные функции, например, СЛУЧМЕЖДУ(), в качестве аргумента функции ПОСЛЕДОВ().
- Выходит за пределы листа. Вы не можете ввести функцию =СОРТ(C:C) в ячейке E2.
- Табличная формула. Вы не можете использовать функции динамического массива внутри Таблицы.
- Не хватает памяти. Вам следует ссылаться на диапазон меньшего размера.
- Разлив в объединенные ячейки. Динамический массив не может разливаться в объединенную ячейку.
- Неопознанная ошибка. Excel не может распознать ошибку.
Если ваша формула указывает на Таблицу, динамический массив будет расширяться при добавлении новых строк в Таблицу
Рис. 6. Динамический массив «отслеживает» Таблицу
Сравните с рис. 2. Вы преобразовали диапазон А1:С19 в Таблицу (Ctrl+T). Формула в ячейке Е3 изменилась на =Таблица1. Теперь, если вы добавите еще одну строку в Таблицу (А11:С11), формула в ячейке Е3 не изменится, а динамический массив автоматически расширится еще одной строкой (Е12:G12).
Хотя формулы динамического массива могут указывать на Таблицу, в самой Таблице использовать формулы динамического массива нельзя.
Использование нового типа ссылок на массив: E3#
Как вы захотите сослаться на массив E3:G12, но не знаете, какого он размера, добавьте оператор разлитого диапазона (#) после ячейки, содержащей формулу массива.
Например, =E3 вернет East, =E3# вернет весь массив, формула которого хранится в E3. Неофициально это называется ссылочной нотацией массива. Такая нотация поддерживается только при ссылке внутри одной книги.
Что такое неявное пересечение
Если вы введете =@C2:C11 в любой ячейке в строках со 2 по 10, формула вернет значение из столбца С той строки, в которой вы ввели формулу. Знак @ известен как неявный оператор пересечения.
Рис. 7. Используйте нотацию @, когда вам нужно неявное пересечение.
Еще в начале этого года на глаза попался интересный пример Dashboard-а, подготовленного в Tableau. Ради интереса решил некоторые приёмы и оформление воспроизвести в Excel и сделал файл без «стероидов» – надстроек Power Query & Pivot, без которых последнее время не обходится практически ни один отчет. Ну и заодно чтобы проверить, получится ли воспроизвести функционал из оригинальной версии.
Оригинал в Tableau, советую обязательно посмотреть:
В итоге получился файл Excel, в котором используются сводные таблицы, срезы и многое другое. А также самые новые подходы и формулы, которые добавлены, чтобы вам было интереснее.
Отдельно хочу обратить внимание на формулы динамических массивов. Этот функционал разработчики относительно недавно добавили в Excel 365 и 2021 (у новизны есть побочный эффект: если файл не будет работать и выдаст ошибку, например, ИМЯ, вам придется обновить версию Excel). Но, как показывает опыт, у многих аналитиков версия Excel всегда самая свежая. Поэтому скачивайте, смотрите и разбирайте формулы 🙂
Динамические массивы
доступно в Excel 365 и Excel 2021
Относительно недавно разработчики добавили в Excel новый функционал – формулы и ссылки для динамических массивов. И заодно создали новую концепцию, которая, как нам кажется, повлияет на многие будущие подходы к построению таблиц и работе с ними. Чтобы объяснить, как работают динамические массивы, начнём с формул, которые их создают. Например, с формулы УНИК.
Формула УНИК извлекает уникальные значения из диапазона.
Формула вводится в одну ячейку и создает столбец, ячейки которого рассчитываются автоматически.
У созданного динамического spill-массива* нет фиксированного размера – столбец автоматически меняется при добавлении новых значений в таблицу с исходными данными.
Динамические массивы подсвечиваются синей рамкой при их выделении мышкой.
Ссылки для динамических массивов
Кто говорил, что типы ссылок в Excel – абсолютные и относительные – тема для новичков и все её знают? Разбираем новый функционал ссылок для динамических массивов. Заодно можно поностальгировать и вспомнить, когда вы впервые познакомились с темой про типы ссылок в Excel =)
Если в файле есть динамический массив или диапазон в фигурных скобках { }, то на него можно сделать ссылку.
В конце такой ссылки должен быть значок # – решетка.
В целом, у ссылок на динамические массивы логика очень похожа на ссылки диапазонов, которые записываются в фигурных скобках { } с нажатием Ctrl+Shift+Enter. Но, в отличие от диапазонов, ссылку на массив записывают только в одну ячейку, а ещё массивы умеют сами автоматически «протягиваться».
Диапазон
{ = A1:A3 }
Динамический массив
= A1#
Динамические массивы и обычные формулы
Ссылки на динамические массивы можно применять так же, как обычные, добавлять значки $. И применять в вычислениях с «обычными» формулами. Ниже несколько примеров применения таких ссылок с формулами ранжирования, транспонирования, подсчета значений. Проверка вводимых значений тоже становится проще и быстрее.
Ранжирование
= РАНГ.РВ( A2#; A2# )
Подсчёт количества непустых ячеек
= СЧЁТЗ( A2# )
Транспонирование
=ТРАНСП( A1# )
Выпадающие списки
в меню Данные → Проверка данных
Формулы для динамических массивов
доступно в Excel 365 и Excel 2021
На сегодняшний день в Excel существует восемь формул для динамических массивов. Первоначально в этот список не входили ПРОСМОТРX и ПОИСКПОЗX. Формула Let также «заточена» для работы с массивами. И ещё там можно использовать оператор неявного пересечения @ (обязательно почитайте, что это такое). При обращении к массивам может появиться новый вид ошибки — #ПЕРЕНОС! или #SPILL!
Формула | Для чего нужна |
УНИК | Извлекает список уникальных значений |
ФИЛЬТР | Фильтрация по заданным условиям |
СОРТ | Сортировка по столбцу (строке) |
СОРТПО | Сортирует по данным в другом массиве |
СЛМАССИВ | Генерация массива случайных чисел |
ПОСЛЕД | Генерация массива последовательных чисел |
ПРОСМОТРX | Современный аналог ВПР |
ПОИСКПОЗX | Современный аналог ПОИСКПОЗ |
Похоже, что в будущем динамические массивы будут всё чаще применяться в Excel. Нам с коллегами они показались классными – формула вводится только в одну ячейку, ничего не надо «протягивать», потому что массив обновляется сам, даже кнопку «Обновить» не надо нажимать. На этот раз разработчики хорошо позаботились о пользователях 😉