Динамическая переменная в excel

Что такое динамические массивы

В сентябре 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 как раньше:

Топ-3

Если захочется, чтобы результаты располагались не в столбец, а в строку, то достаточно заменить в этой формуле двоеточия (разделитель строк) на точку с запятой (разделитель элементов внутри одной строки). В англоязычной версии 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

Алан Перлис

Постоянная одного человека — переменная другого

Эта статья содержит полное руководство по работе с переменными и использованию VBA Dim.

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

Остальная часть поста содержит наиболее полное руководство, которое вы
найдете в VBA Dim Statement.

Если вы заинтересованы в объявлении параметров, вы можете прочитать о
них здесь.

Содержание

  1. Краткое руководство по использованию VBA Dim Statement
  2. Полезные ссылки 
  3. Что такое VBA Dim Statement?
  4. Формат VBA Dim Statement
  5. Как использовать Dim с несколькими переменными
  6. Где я должен поместить Dim Statement?
  7. Использование Dim в циклах
  8. Могу ли я использовать Dim для присвоения значения?
  9. Dim действительно требуется?
  10. Использование Dim с Basic Variables
  11. Использование Dim с Variants
  12. Использование Dim с Objects
  13. Использование Dim с Arrays
  14. Устранение неполадок ошибок  Dim
  15. Локальные и глобальные переменные
  16. Заключение

Краткое руководство по использованию 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. Все они очень похожи по синтаксису.

Вот они:

  1. Basic variable
  2. Variant
  3. Object
  4. Array

Ниже приводится краткое описание каждого типа

  1. Basic variable — этот тип переменной содержит одно значение. Это такие типы, как Long, String, Date, Double, Currency.
  2. Variant — VBA решает во время выполнения, какой тип будет использоваться. Вы должны избегать вариантов, где это возможно, но в некоторых случаях требуется их использование.
  3. Object — это переменная, которая может иметь несколько методов (то есть подпрограмм / функций) и несколько свойств (то есть значений). Есть 3 вида:
    Объекты Excel, такие как объекты Workbook, Worksheet и Range.
    Пользовательские объекты, созданные с использованием модулей классов.
    Внешние библиотеки, такие как Словарь.
  4. 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 statements

Когда дело доходит до позиционирования ваших 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. В этом случае переменная автоматически будет типом
варианта.

Это может привести к таким проблемам, как

  1. Все переменные являются вариантами (проблемы с
    этим см. В разделе «Варианты»).
  2. Некоторые переменные ошибки останутся
    незамеченными.

Из-за этих проблем рекомендуется сделать использование Dim
обязательным в нашем коде. Мы делаем это с помощью оператора Option Explicit.

Option Explicit

 Мы можем сделать Dim
обязательным в модуле, набрав «Option Explicit» в верхней части модуля.

Мы можем сделать это автоматически в каждом новом модуле,
выбрав Tools-> Options из меню и отметив флажок «Требовать декларацию
переменной». Затем, когда вы вставите новый модуль, «Option Explicit» будет
автоматически добавлен в начало.

VBA Require Variable Declaration

Давайте посмотрим на некоторые ошибки, которые могут
остаться незамеченными, если мы не будем использовать 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 не была определена.

variable not defined 2

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

Ошибка в ключевом слове

Вот второй пример, который более тонкий.

Когда следующий код выполняется, он должен изменить шрифт в
ячейке 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

Однако использование вариантов является плохой практикой, и
вот почему:

  1. VBA
    не будет замечать неправильных ошибок типа (т. Е. Несоответствие данных).
  2. Вы не можете получить доступ к Intellisense.
  3. 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 на скриншоте ниже

VBA Intellisense

Если вы используете Variant как тип, то Intellisense будет
недоступен

Это потому, что VBA не будет знать тип переменной до времени
выполнения.

Использование Dim с Objects

Если вы не знаете, что такое Objects, вы можете прочитать
мою статью об VBA Objects здесь.

Есть 3 типа объектов:

  1. Объекты Excel
  2. Объекты модуля класса
  3. Внешние объекты библиотеки

Примечание. Объект 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.

Вот пример реальной версии, основанной на данных ниже:

dim sample data

' 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) и многих других задач.

Мы можем создать эти объекты двумя способами:

  1. Раннее связывание
  2. Позднее связывание

Давайте посмотрим на это по очереди.

Раннее связывание

Раннее связывание означает, что мы добавляем справочный
файл. Как только этот файл добавлен, мы можем рассматривать объект как объект
модуля класса.

Мы добавляем ссылку, используя Tools-> Reference, а затем
проверяем соответствующий файл в списке.

Например, чтобы использовать словарь, мы ставим флажок
«Microsoft Scripting Runtime»

vba references dialog

Как только мы добавим ссылку, мы можем использовать словарь
как объект модуля класса

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 есть два типа массивов:

  1. Статический — размер массива задается в
    операторе Dim и не может изменяться.
  2. Динамический — размер массива не указан в
    выражении 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 типов:

  1. Dim
    — используется для объявления локальных переменных, т. Е. В процедурах.
  2. Private
    — используется для объявления глобальных переменных и процедур. Эти переменные
    доступны только для текущего модуля.
  3. Public
    — используется для объявления глобальных переменных и процедур. Эти переменные
    доступны во всех модулях.
  4. 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 («Поставщик»). УдалитьКонец подписки

Содержание

  1. Формулы динамических массивов и устаревшие формулы для массивов CSE
  2. Формулы динамического массива:
  3. Дополнительные сведения
  4. Билл Джелен. Динамические массивы в Excel
  5. Содержание
  6. Введение
  7. Глава 1. Начало работы
  8. Формулы теперь могу разливаться
  9. Что происходит, если формула не может пролиться?
  10. Если ваша формула указывает на Таблицу, динамический массив будет расширяться при добавлении новых строк в Таблицу
  11. Использование нового типа ссылок на массив: E3#
  12. Что такое неявное пересечение
  13. Формулы динамического массива в Excel, не поддерживающими динамические функции
  14. Подробные сведения
  15. Дополнительные сведения
  16. Формулы динамического массива и поведение перенесенного массива
  17. Что означает перенос?
  18. Ключевые моменты
  19. Дополнительные сведения

Формулы динамических массивов и устаревшие формулы для массивов 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

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

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

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

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

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

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

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

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

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

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

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

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

office-guru.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

excel2.ru

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

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

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

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

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

Доходы.

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

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

Пример.

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

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

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

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

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

СМЕЩ.

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

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

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

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

СЧЕТ.

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

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

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

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

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

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

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

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

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

exceltable.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

​ т.е. 9 с​

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

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

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

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

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

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

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

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

planetaexcel.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

planetaexcel.ru

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

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

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

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

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

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

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

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

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

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

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

excelworld.ru

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

Незаметно для меня 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

Содержание

  1. Начало работы
  2. Функция СОРТ
  3. Функция СОРТПО
  4. Функция ФИЛЬТР
  5. Функция УНИК
  6. Комбинирование функций
  7. Функция ПОСЛЕД
  8. Функция СЛМАССИВ
  9. Почему формулы массива (Ctrl+Shift+Enter) такие жесткие: неявное пересечение
  10. Функция ПРОСМОТРX и динамические массивы
  11. Обычные функции, использующие динамические массивы
  12. Динамические массивы и функции кубов

Введение

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

О динамических массивах было объявлено 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 новый функционал – формулы и ссылки для динамических массивов. И заодно создали новую концепцию, которая, как нам кажется, повлияет на многие будущие подходы к построению таблиц и работе с ними. Чтобы объяснить, как работают динамические массивы, начнём с формул, которые их создают. Например, с формулы УНИК.

Формула УНИК в Excel

Формула УНИК извлекает уникальные значения из диапазона.

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

У созданного динамического spill-массива* нет фиксированного размера – столбец автоматически меняется при добавлении новых значений в таблицу с исходными данными.
Динамические массивы подсвечиваются синей рамкой при их выделении мышкой.

Ссылки для динамических массивов

Кто говорил, что типы ссылок в Excel – абсолютные и относительные – тема для новичков и все её знают? Разбираем новый функционал ссылок для динамических массивов. Заодно можно поностальгировать и вспомнить, когда вы впервые познакомились с темой про типы ссылок в Excel =)

Ссылка на динамический массив

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

В конце такой ссылки должен быть значок # – решетка.

В целом, у ссылок на динамические массивы логика очень похожа на ссылки диапазонов, которые записываются в фигурных скобках { } с нажатием Ctrl+Shift+Enter. Но, в отличие от диапазонов, ссылку на массив записывают только в одну ячейку, а ещё массивы умеют сами автоматически «протягиваться».

Диапазон

{ = A1:A3 }

Диапазоны в Excel

Динамический массив

= A1#

Динамический массив в Excel

Динамические массивы и обычные формулы

Ссылки на динамические массивы можно применять так же, как обычные, добавлять значки $. И применять в вычислениях с «обычными» формулами. Ниже несколько примеров применения таких ссылок с формулами ранжирования, транспонирования, подсчета значений. Проверка вводимых значений тоже становится проще и быстрее.

Ранжирование

= РАНГ.РВ( A2#; A2# )

Формула РАНГ

Подсчёт количества непустых ячеек

= СЧЁТЗ( A2# )

Формула СЧЁТЗ

Транспонирование

=ТРАНСП( A1# )

Транспонирование

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

в меню Данные → Проверка данных

Проверка ввода данных

Формулы для динамических массивов

доступно в Excel 365 и Excel 2021

На сегодняшний день в Excel существует восемь формул для динамических массивов. Первоначально в этот список не входили ПРОСМОТРX и ПОИСКПОЗX. Формула Let также «заточена» для работы с массивами. И ещё там можно использовать оператор неявного пересечения @ (обязательно почитайте, что это такое). При обращении к массивам может появиться новый вид ошибки — #ПЕРЕНОС! или #SPILL!

Формула Для чего нужна
УНИК Извлекает список уникальных значений
ФИЛЬТР Фильтрация по заданным условиям
СОРТ Сортировка по столбцу (строке)
СОРТПО Сортирует по данным в другом массиве
СЛМАССИВ Генерация массива случайных чисел
ПОСЛЕД Генерация массива последовательных чисел
ПРОСМОТРX Современный аналог ВПР
ПОИСКПОЗX Современный аналог ПОИСКПОЗ

Похоже, что в будущем динамические массивы будут всё чаще применяться в Excel.  Нам с коллегами они показались классными – формула вводится только в одну ячейку, ничего не надо «протягивать», потому что массив обновляется сам, даже кнопку «Обновить» не надо нажимать. На этот раз разработчики хорошо позаботились о пользователях 😉

Понравилась статья? Поделить с друзьями:
  • Динамическая область печати excel
  • Динамическая диаграмма в excel это
  • Динамическая диаграмма в excel с выпадающим списком
  • Динамическая диаграмма в excel пошагово
  • Динамическая дата в excel