Массивы в VBA (Visual Basic for Applications) - работа с данными и лучшие практики

Поділитися
Вставка
  • Опубліковано 17 січ 2023
  • Хотите знать все о сводных таблицах, использовать их как профессионал? Записывайтесь на наш курс по анализу данных и сводным таблицам! Подробности тут: clck.ru/34Ny5Z
    В этом видео рассматривается работа с массивами в VBA. Мы изучим статические и динамические массивы, различные способы создания массивов, методы обработки данных и напишем множество полезных функций, которые пригодятся в реальной работе.
    Содержание:
    00:26 - создаем статический массив
    03:36 - создаем и работаем с динамическим массивом
    08:22 - какую индексацию массива лучше использовать (0 .. N или 1..N, или X..Y)
    10:14 - разбираем различные варианты создания массивов (встроенные в язык VBA)
    12:48 - создаем массивы внутри функций, передаем массивы в качестве аргументов процедур и функций, возвращаем массивы из функций
    21:16 - пишем полезные функции для работы с массивами
    33:39 - подводим итоги
    Файл для видео: drive.google.com/file/d/1X_hU...

КОМЕНТАРІ • 14

  • @analyst_klondike
    @analyst_klondike  4 місяці тому

    Что-то непонятно? Объясним! Переходи по ссылке, оставляй вопрос:
    t.me/analyst_klondike

  • @user-oq9xr8dj1b
    @user-oq9xr8dj1b 9 місяців тому

    Лучше один раз увидеть, чем 100 раз услышать.

  • @access-program
    @access-program 6 місяців тому

    подскажите код пожалуйста, как можно из массива подсчитать кол-во одинаковых значений. Например в одномерном массиве от 1 до 31 содержащий символьный тип данных 1 - "В", 2-"Я", 3 "Я", 4 "Б" и тд. Вывести результат в переменные. Например, количество значений символа "В" в массиве - 8, "Я" - 20 и тд. И в коде указывать не явный символ для поиска, а автоматически определить значение из первого индекса, циклом подсчитать это значение в массиве, также из 2 до 31, 3 до 31. Наверно можно как то с помощью функций сделать код проще и более быстродействующим. Спасибо

    • @analyst_klondike
      @analyst_klondike  6 місяців тому

      Добрый день! Эта классическая задача наиболее просто решается через словари (Dictionary) в VBA (да и в любом другом языке программирования). Ключи в словаре всегда уникальны. На псевдокоде это может выглядеть так: для каждого элемента исходного массива проверяем, входит ли он в словарь. Если нет, то добавляем в словарь пару (где 1 - это значение, соответствующее ключу). Если да, увеличиваем значение, соответствующее ключу на 1. По итогу, у вас будет словарь, ключи которого - это уникальные значения из исходного массива. А соответствующие значения в словаре - это количество раз, которые каждый соответствующий ключ встречался в исходном массиве. Попробуйте этот способ сначала на бумаге, а потом в коде.

    • @access-program
      @access-program 6 місяців тому

      немного не понял, ключи в массиве тоже уникальны, а значения могут повторятся, в словаре ключи и значения элементов оба уникальны или нет? По логике в словаре должны и значения быть уникальными. А можете сделать видео на эту тему? Спасибо за ответ@@analyst_klondike

    • @access-program
      @access-program 6 місяців тому

      можно вместо словаря использовать тогда таблицу, где значения, которые в массиве - те же самые что и в таблице, эта таблица справочник у нее поле символа значения уникальны, ну немного стало доходить, проверяем первый символ из массива сравнивая его с таблицей справочником методом цикла (проходом), если совпадений нет, то 1 Далее также проверяем второй символ из массива. Нужно только в таблицу справочника символов добавить числовое поле для подсчета, перед началом процедуры это поле обновить 0 для всех записей (запросом). В итоге должно получится результат в самой таблице справочнике будут поля с символами и их кол-во в соответствии массива. Надо попробовать@@analyst_klondike

  • @Rusia-16
    @Rusia-16 Рік тому +1

    Интересно, но это не для новичков. Я после года изучения VBA только сейчас обратил внимание на массивы. Всегда без них обходился. Не знаю пока где их применить можно.

    • @analyst_klondike
      @analyst_klondike  Рік тому

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

    • @BogachevCHANEL
      @BogachevCHANEL Рік тому +1

      Там, если есть очень много данных, очень круто использовать массивы + словари (Scripting.Dictionary). В своё время я ускорил свой проект в Excel где-то в 150 раз. Там, в отличие от коллекций, есть ключи и команда Exist. Если у тебя десятки тысяч строк, то несколько циклов для перебора использовать достаточно долго. Если научиться это использовать, то скорость вырастет во много раз.
      Кроме того, при работе с массивами и словарями важно правильно выбирать типы данных для хранения информации. Например, использование числовых типов данных вместо строковых может ускорить выполнение операций. Также стоит помнить о возможности оптимизации алгоритмов и использовании более эффективных методов обработки данных.

    • @BogachevCHANEL
      @BogachevCHANEL Рік тому +2

      Для примера уточню: работал на крупном заводе в должности администратора. Мои обязанности включали распределение работы среди сотрудников, контроль за поступающим материалом из других отделений и отслеживание перемещения продукции в другие отделы. Все это можно было делать вручную, но это занимало слишком много времени. Ежедневно мне приходилось работать с большим количеством Excel-таблиц, и мне захотелось автоматизировать этот процесс. Учитывая, что компания была крупной, IT-специалисты были заняты другими задачами, а система была закрытой, я решил выполнить автоматизацию с помощью Excel.
      Постепенно я начал создавать функции с переменными, затем перешел к массивам, словарям, кнопкам и формам. Далее я настроил взаимодействие с операционной системой Windows, папками и файлами, автоматическое создание, удаление, заполнение и форматирование цветами целых книг и сводных таблиц. Также я разработал кнопки, отвечающие за различные действия. Все это происходило постепенно, но каждый новый шаг ускорял процесс работы.
      Я использовал Debug.Print, чтобы проверять время выполнения различных действий. Благодаря этому удалось сократить время работы программы с 30 минут до 12 секунд. Кроме того, я смог сократить время обработки другого большого проекта с нескольких часов до 7 минут. VBA для Excel - очень мощный инструмент для обработки данных.

    • @user-xu7ve8js7q
      @user-xu7ve8js7q 11 місяців тому

      Молодец!

    • @marvellousPP
      @marvellousPP 10 місяців тому

      @@BogachevCHANELочень интересный кейс, сталкиваюсь в данный момент со схожей монотонной работой в экселе в компании, не мог бы подсказать где черпал информацию для обучения , не то честно говоря глаза разбегаются каждый раз когда собираюсь учить vba

  • @demitridem5859
    @demitridem5859 Рік тому

    Понимаю, что происходит, но не понимаю зачем?
    Озвучивание примера, как это используется на практике, существенно поможет в понимании процессов.
    С другой стороны, не исключаю, что программисты на VBA и так всё понимают.
    Я не программист, а достаточно опытный юзер excel, но макросы использовал мало, только как создание кнопок в отдельных проектах, и мне более актуален в работе power query.