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

แชร์
ฝัง
  • เผยแพร่เมื่อ 11 พ.ย. 2024

ความคิดเห็น • 14

  • @analyst_klondike
    @analyst_klondike  9 หลายเดือนก่อน

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

  • @Русь-Родина
    @Русь-Родина ปีที่แล้ว

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

  • @access-program
    @access-program 11 หลายเดือนก่อน

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

    • @analyst_klondike
      @analyst_klondike  11 หลายเดือนก่อน

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

    • @access-program
      @access-program 11 หลายเดือนก่อน

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

    • @access-program
      @access-program 11 หลายเดือนก่อน

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

    • @ТатьянаМуравьева-ъ7м
      @ТатьянаМуравьева-ъ7м ปีที่แล้ว

      Молодец!

    • @marvellousPP
      @marvellousPP ปีที่แล้ว

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

  • @demitridem5859
    @demitridem5859 ปีที่แล้ว

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