Вот тот, которого я долго избегал. Почему? Мне было сложно понять, что такое «массив» VBA. Я понял его так: это диапазон ячеек, хранящийся в памяти VBA. Да, мы не можем «увидеть» массив — мы можем только извлечь его части; но с точки зрения Excel это таблица данных — ячейки, содержащие значения или, в нашем случае, текстовые строки. Таблица в памяти Excel!
💻БЕСПЛАТНО: ВАШ МИНИ-КУРС ПО ШПАРГАЛКЕ ПО EXCEL
https://tinyurl.com/jxezd355
00:00 Введение
01:20 Ключевые концепции и методы
03:00 Начало программирования на VBA
03:40 Функция разделения Excel VBA
06:05 Функции Lbound и Ubound
07:35 Использование индексов массива
09:40 Цикл интегрирования For-Next
12:20 Метод интегрирования смещения
Если вы сможете разобраться в этом, последствия будут интригующими. Мы постоянно работаем с таблицами или диапазонами данных в Excel, и это может быть обременительно: формулы, такие как ВПР, могут занимать время, и даже макросы могут работать медленно при записи или чтении данных из электронной таблицы. Так что, если бы электронной таблицы вообще не было? Что, если бы данные «жили» в VBA? Это просто ошеломляет… но сработает ли?
💼СКАЧАТЬ ФАЙЛЫ
https://tinyurl.com/ne4jyfxx
Приготовьтесь к изящным макросам VBA, сложному кодированию, чтобы всё это заработало, и как минимум к одному моменту, когда придётся повозиться с кувырком. Добро пожаловать в Excel VBA Arrays For Beginners!
Когда массив VBA может быть полезен в реальном мире? Мой заказчик попросил меня «фрагментировать» одну ячейку с текстовыми записями, разделёнными точкой с запятой. Таким образом, «ABC;DEF;GHI» превратится в «ABC», «DEF», «GHI», и эти значения будут введены в разные ячейки в одном столбце. Конечно, это возможно с помощью формул, и решение на их основе включено в файл для скачивания. Но что, если у вас недостаточно места в таблице для реализации формул? Возможно, вам просто нужно более быстрое и компактное решение? Давайте рассмотрим, как это сделать с массивами в Excel VBA.
Функция Split в VBA открывает всё. Она выполняет большую работу: функция разделяет текстовую строку (например, исходный текст) на фрагменты с помощью «разделителя». Для разделения или «ограничения» текста необходим определённый символ — в нашем случае точка с запятой. Да, какой-то разделитель необходим для этого применения массивов в Excel VBA.
Итак, в фоновом режиме Excel создал «массив», состоящий из наших трёх небольших текстовых строк. Однако визуализировать это сложно — именно поэтому мне потребовалось так много времени, чтобы разобраться с массивами. Как я показываю в видео, метод Msgbox для экстернализации значений переменных просто не работает с массивами. Массивы требуют специального типа переменной — или, по крайней мере, модификации строковой переменной — в формате VARIABLENAME(). Эти скобки, кажется, заставляют всё работать, но также делают код довольно непрозрачным/недоступным. Что же на самом деле происходит?
💻БЕСПЛАТНО: ВАШ МИНИ-КУРС ПО ШПАРГАЛКЕ ПО EXCEL
https://tinyurl.com/jxezd355
Всё становится проще, когда вы понимаете, что значениям в массиве (например, «ABD», «DEF», «GHI») присваивается индекс. Что должно означать 1, 2, 3, верно? Ну, не совсем. Потому что массивы всегда начинаются с 0. Почему? Я не знаю, и если знаете — пожалуйста, объясните мне это в комментариях на YouTube! Итак, значениям в массиве присваиваются индексы 0, 1 и 2. Функции Lbound (нижняя граница) и Ubound (верхняя граница) в VBA демонстрируют это и работают с Msgbox, как я показываю в видео.
Мы можем использовать индекс для экстернализации значений в массиве и, наконец, приоткрыть завесу тайны над происходящим. В видео я использую конструкцию Msgbox Chris_Array(0) для извлечения значений. Прогресс! Но задача ещё не выполнена. Как теперь внести значения массива в отдельные ячейки таблицы?
Для этого можно использовать цикл For-Next в сочетании с массивом. Цикл может «считать» индекс массива (0, 1, 2) и записать соответствующие значения в ячейку, например, Range(“A1”) = Chris_Array(Array_Counter), где Chris_Array — переменная, хранящая массив, а Array_Counter — целочисленная переменная, управляющая циклом. Вероятно, проще будет понять, посмотрев видеодемонстрацию — обещаю, оно того стоит!
Заключительный приём VBA объединяет всё воедино. Я много раз говорил на канале, что метод Offset может работать с циклом For-Next как рыба с чипсами: волшебство происходит, когда эти два метода используются вместе. По мере увеличения переменной-счетчика макрос перемещается вниз по таблице, чтобы перечислить значения массива в соседних строках. Работа сделана! Посмотрите, как я это настроил, в видео, и помните, что файлы для скачивания с начала и до конца доступны и должны помочь.
У вас всё получилось? Был ли у вас момент «потрясения»? Видите ли вы применение массивам VBA в своей работе? Буду рад услышать ваши мысли в комментариях на YouTube — я отвечу вам, как обычно.
💻БЕСПЛАТНО: ВАШ МИНИ-КУРС ШПАРГАЛОК ПО EXCEL
https://tinyurl.com/jxezd355
Информация по комментариям в разработке