Перейти к содержимому

Массивы Excel VBA для начинающих

Tiger Spreadsheet Solutions

0:00 / 0:00

Массивы Excel VBA для начинающих

13 736 просмотров · 5 л. назад
Tiger Spreadsheet Solutions
96,2 тыс. подписчиков
13 736 просмотров · 5 л. назад
Вот пример, который я долгое время избегал. Почему? Мне было сложно понять, что такое «массив» в VBA. Я пришел к такому выводу: это диапазон ячеек, хранящийся в памяти VBA. Да, мы не можем «видеть» массив — мы можем только извлекать из него части; но в представлении Excel это таблица данных — ячейки, содержащие значения или, в нашем случае, текстовые строки. Таблица в памяти Excel! 💻БЕСПЛАТНО: ВАШ МИНИ-КУРС ПО EXCEL https://tinyurl.com/jxezd355 00:00 Введение 01:20 Ключевые понятия и методы 03:00 Начало программирования на VBA 03:40 Функция Split в Excel VBA 06:05 Функции Lbound и Ubound 07:35 Использование номеров индексов массивов 09:40 Интеграция цикла For-Next 12:20 Интеграция метода Offset Если вы сможете это понять, последствия окажутся интригующими. Мы постоянно работаем с таблицами или диапазонами данных в Excel — и это может быть утомительно: формулы, такие как VLOOKUP, могут занимать время, и даже макросы могут работать медленно при записи или чтении из электронной таблицы. Что, если бы электронной таблицы вообще не было? Что, если бы данные «жили» в VBA? Это просто невероятно… но может ли это сработать? 💼СКАЧАТЬ ФАЙЛЫ https://tinyurl.com/ne4jyfxx Приготовьтесь к крутым макросам VBA, сложному кодированию для их реализации и как минимум одному моменту, когда вы будете в восторге. Добро пожаловать в Excel VBA «Массивы для начинающих»! Когда массив VBA может быть полезен в реальной жизни? Мой клиент хотел, чтобы я «фрагментировал» одну ячейку с текстовыми данными, разделенными точками с запятой, на отдельные ячейки. Таким образом, «ABC;DEF;GHI» превратится в «ABC», «DEF», «GHI», причем эти значения будут введены в разные ячейки в одном столбце. Конечно, это возможно с помощью формул, и решение на основе формул включено в загружаемый файл. Но что, если у вас нет места в таблице для реализации формул? Возможно, вам просто нужно более быстрое и простое решение? Давайте посмотрим, как это сделать с массивами в Excel VBA. Функция Split в VBA начинает работу. Она выполняет большую часть работы: функция разделяет текстовую строку (например, исходный текст) на части с помощью «разделителя». Для разделения или «разделения» текста необходим определенный символ — в нашем случае это точка с запятой. Да, какой-либо разделитель необходим для этого применения массивов в Excel VBA. Итак, в фоновом режиме Excel создал «массив», состоящий из наших 3 меньших текстовых строк. Однако визуализировать это сложно — именно поэтому мне потребовалось так много времени, чтобы разобраться с массивами. Как я показываю в видео, метод 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