Dictionaries в VBA (Серия VBA 33)

Поделиться
HTML-код
  • Опубликовано: 20 мар 2020
  • Привет! В сегодняшнем видео мы рассмотрим очередной инструмент в VBA - Dictionary. Dictionaries в VBA служат созданию в памяти компьютера табличек с уникальными элементами и являются по своему функционалу схожими с коллекциями и массивами. При этом, у Dictionaries есть определенные преимущества, которые делают их в некоторых ситуациях более привлекательными, чем коллекции и массивы.
    В этом видео мы:
    • Узнаем, в чём заключается функционал Dictionaries и как с ними работать
    • Научимся использовать методы и свойства Dictionaries, а именно:
    ○ Add
    ○ Exists
    ○ Items
    ○ Keys
    ○ Remove
    ○ RemoveAll
    ○ CompareMode
    ○ Count
    • Узнаем, как запускать цикл по всем сохраненным в Dictionary элементам
    • Обсудим, в чём именно заключаются важные преимущества Dictionary перед коллекциями
    Приятного просмотра! 😊

Комментарии • 33

  • @Silent_whisperer
    @Silent_whisperer 25 дней назад +2

    Тысячу лайков как поставить, хоспади, спасибо!!!!❤❤❤❤❤

  • @user-bm8yq2hh6h
    @user-bm8yq2hh6h 3 года назад +6

    Билял, я уже ранее писал комментарий с благодарностью за этот урок! Теперь, с ещё большим уважением говорю: СПАСИБО. С помощью Dictionaries, и только с их помощью удалось победить проблему быстрейшей обработки базы данных (таблицы из 158000 строк и 6 столбцов) для дальнейшей работы своей программы!!! Повторение - не только мать учения, но и своевременная помощь в решении разных задач!

  • @Mr.Dava86
    @Mr.Dava86 4 года назад +5

    Билял,в каждом твоё видео,я задаюсь вопросом:А что,так можно было?!Билял,ты век живи,а мы будем учиться у тебя

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

      Здравствуйте Довлет!
      Большое спасибо за Ваш комментарий! Очень рад что у своими видео у меня получается помо-гать людям 😊
      Если будут какие-либо вопросы - всегда пишите, и я постараюсь на них как можно быстрее отве-тить 😊
      С уважением,
      Билял

  • @user-xe9uq9kl5y
    @user-xe9uq9kl5y 2 года назад

    Наконец найдены те самые стандартные массивы данных, а я как только не пытался плясать с array в VBA, но там явно не хватает возможностей. Спасибо.

  • @yflow5337
    @yflow5337 11 месяцев назад

    Крутейший урок, от спасибище друг! Сколько концентрированной пользы, вот это подача! И вачес почерпнул и вывод в дебаг грамотный табличкой. Ну про дикшинарис молчу вообще! Срочно, подписка, лайк. И почему раньше не подписался.

  • @user-sc6wz7ni9v
    @user-sc6wz7ni9v 3 года назад +2

    Спасибо за видео!

  • @alekseychaykovskiy3963
    @alekseychaykovskiy3963 4 года назад +3

    Спасибо

  • @IsHardynafthardynaft
    @IsHardynafthardynaft 2 года назад

    Fabulous ❤️ vidos. Thx, bro

  • @SamSambl4
    @SamSambl4 4 года назад +2

    Спасибо за труд!

  • @YanYarman
    @YanYarman 2 года назад

    Круто. Спасибо.

  • @Serega_Zaicev
    @Serega_Zaicev 3 года назад

    вот супер урок мне понравилось, конкретно на живом примере, ручки 800 , где находятса как доставать, плин ну всё разжованно что даже я понял)))))))))) спасибо!!!!

  • @user-mh3jn4qh9u
    @user-mh3jn4qh9u 4 года назад +2

    Здравствуйте ! Есть ли видео о работе vba с папками?

  • @vladimirk.5371
    @vladimirk.5371 3 года назад

    Bill K., спасибо. Появилось несколько вопросов:
    1) Правильно ли я понимаю, что один раз добавив ключ, он навсегда будет хранится в памяти?
    Поясню, что имею ввиду. Есть данные 3 тыс. строк и они пополняются. При этом значения напротив ключей могут редактироваться (напр. было Иван - 10, стало Иван - 20).
    То есть мне нужно написать цикл, который будет пополнять мои ключи, при этом проверять уже на имеющиеся ключи?
    Можно ли сделать ключ по двум значениям из ячеек? Например в одной будет написано Иван, а в другой его дата рождения (Иван01.01.1990) и как упомянул выше, можно ли сделать так, чтобы если Item менялся, то значение бы его перезаписывалось?

  • @user-cb9tx3gz4b
    @user-cb9tx3gz4b 4 года назад +3

    Доброго времени суток. Спасибо за полезный материал.
    1. Жалко, что совсем все же не раскрыта тема Database.Compare - примем это за домашнее задание докопаться самостоятельно :)
    2. Стоит задача отсортировать массив и убрать из него повторяющиеся значения. Если я правильно понял Ваш урок - то для отбора повторов достаточно просто по одному вносить элементы массива в Dictionary. (массово скорее всего не получится - типа Dictionary.keys = array ?)
    А потом обратно просто можно выгрузить ?
    redim array (0 to Dictionary.Count)
    array = Dictionary.keys
    3. Имеет ли смысл для сортировки по алфавиту тоже использовать Dictionary ? Для уборки "пустых" строк ? Или в массиве лучше работать уже ?
    П.С. Массив готовится для листбокса с возможностью быстрого подбора подходящих значений при постепенном вводе текста. Листбокс уже работает, выводит и сортирует. Но через массивы. И 6000 значений грузятся около 3х секунд. Потеря времени как раз на отборе лишних значеней происходит - вот и ищу более быстрые пути. Плюс 6000 это пока, а там может и 60000 быть. Я так понимаю - словарь быстрее ведь, чем массив ?

    • @user-cb9tx3gz4b
      @user-cb9tx3gz4b 4 года назад +5

      Сам и отвечу. Уборка пустых и отброс "лишних" произошли автоматом при загрузке в словарь, выгрузка - без проблем. Сортировку пока оставил в массиве. Спасибо, Билял за великолепные уроки. Все летает.
      Единственно хотелось бы просить больше заострять внимание на то " почему в таких и таких ситуациях лучше применять словарь, в других - коллекции, в третьих - массивы".

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +3

      Здравствуйте, Игорь!
      Извиняюсь, не успел ответить на Ваш вопрос! И большое спасибо за то, что Вы сразу поделились своими находками в этой области.
      Обязательно постараюсь в дальнейших видео проводить своего рода бенчмаркинг разных инструментов и подходов в VBA, как Вы и написали, например, Collection vs. Array vs. Dictionary etc.
      Кстати, позднее я также думал в принципе снять отдельное видео по тому, какие подходы являются самыми быстрыми для обработки больших количеств данных. Когда именно данное видео выйдет, точно сказать не могу, но обязательно сниму его!
      Желаю Вам оставаться здоровым в нынешней ситуации с коронавирусом, Игорь!
      С уважением и хорошего дня,
      Билял

  • @user-dr5mg3po7o
    @user-dr5mg3po7o 2 года назад

    Творческий вопрос. А как потом этот словарь сохранить для дальнейшего использования? Я создаю его из файла с таблицей, не вручную. Потом я планирую использовать это словарь в других файлах для поиска данных.

  • @virtreal4663
    @virtreal4663 3 года назад +1

    А как создать словарь содержащий другие словари?

  • @Serega_Zaicev
    @Serega_Zaicev 3 года назад

    а 3 столбца или более не получитса занести ? Key i Item я так понял только на 2 столбца работает?

  • @user-bm8yq2hh6h
    @user-bm8yq2hh6h 4 года назад +2

    Билял, безусловное браво!!! Молодчина! Так доступно, так точно, так грамотно преподнести материал и нужный, и непростой - верх мастерства!!! Спасибо! Честно говоря, придётся корректировать свои написанные программки, используя материал видеоурока: многие подходы оптимизировать!) Если несложно, прошу ответить на очередной вопрос: когда кто-то открывает файл с макросами, у него появляется сообщение о включении содержимого. Можно ли это как-то обойти?

    • @alekseychaykovskiy3963
      @alekseychaykovskiy3963 4 года назад +2

      Смотри в Файл - Параметры - Центр управления безопасностью - Параметры центра управления безопасности

    • @user-bm8yq2hh6h
      @user-bm8yq2hh6h 4 года назад +2

      Aleksey Chaykovskiy это-то понятно, спасибо)! Я имел ввиду на программном уровне при открытии документа...))

    • @BilyalKhassenov
      @BilyalKhassenov  4 года назад +1

      Здравствуйте, Евгений!
      Как всегда большое спасибо за Ваш комментарий! 😊 И опять-таки извиняюсь за задержку с ответом.
      К сожалению, программными путями в рамках VBA включать макросы вряд ли удастся. Можно реализовать следующее, такие своего рода обходное решение:
      1) Создать рабочий лист, который будет выполнять роль загрузочного экрана.
      2) На этом загрузочном экране прописать сообщение конечному пользователю файла, что для работы файла пользователь должен сперва включить макросы (можно вставить скриншот с указанием требуемой кнопки)
      3) Прописать событийные процедуры рабочей книги Private Sub Workbook_Open() и Private Sub Workbook_BeforeClose(Cancel As Boolean), которые будут запускаться всегда тогда, когда пользователь открывает и закрывает рабочую книгу.
      4) Private Sub Workbook_Open() будет делать все листы, кроме листа с загрузочным экраном, видимыми, а лист с загрузочным экраном скрывать
      5) Private Sub Workbook_BeforeClose(Cancel As Boolean) будет делать лист с загрузочным экраном видимым, а настройку видимости всех остальных листов изменять на xlSheetVeryHidden - данная настройка может изменяться лишь посредством VBA, что заблокирует возможность ручного изменения видимости всех других листов пользователем
      Я решил привести короткий пример в файле, чтобы было нагляднее:
      drive.google.com/file/d/1eiOWI9wnzIYswsv2KYJTFltlFAYjrI4E/view?usp=sharing
      И обратите внимание, Евгений, что в данном макросе файл всегда перед закрытием автоматически сохраняется. В принципе можно выдумать какой-нибудь более уточнённый алгоритм определения того, должен ли файл перед закрытием быть сохранен. Но это мы можем, если что, в последующем додумать 😊
      Надеюсь, мог помочь Вам 😊
      С уважением и хорошего Вам дня,
      Билял
      P.S. Если хотите несколько раз протестировать появление загрузочного экрана с сообщением - то создайте копии файла с новым именем. При новом имени Excel выводит запрос с включением макросов.

    • @user-bm8yq2hh6h
      @user-bm8yq2hh6h 4 года назад +1

      Билял Хасенов - Excel & VBA Спасибо за чуткость и отзывчивость! Завтра протестирую!!!

    • @user-bm8yq2hh6h
      @user-bm8yq2hh6h 4 года назад +2

      Трюк с загрузочным экраном очень прикольный) Спасибо, Билял, применю это решение обязательно в своей деятельности!

  • @user-td9cz6ng7j
    @user-td9cz6ng7j Год назад

    Эххх Знал бы про это раньше сколько времени и сил сэкономил бы.
    приходилось заниматься садо-мазо с коллекциями. прогонят их в цикле если такой элемент ест то удалить его и заново добавить т.к. его невозможно изменить.

  • @user-qn5by5iv7u
    @user-qn5by5iv7u 2 года назад

    2021

  • @meldanify
    @meldanify Год назад

    Обещал в начале видео показать, как циклом заполнить dictionary и благополучно забыл!

  • @TheShadowOfYours
    @TheShadowOfYours Год назад

    Я хоть и не из России и хоть путина и его банду не поддерживаю, как и многие ютуб каналы, поэтому ни на одном ай ти канале такой ереси не видел в оформлении канала. Русские тебя еще не попросили вести канал не на русском ? Было бы еще справедливее , если еще и остальные ролики переделал бы на украинский ,казахский, например ? В Казахстане надо говорить на казахском: казахи, озабоченные дерусификацией своей страны , тебя ещё не упрекали ?

    • @BilyalKhassenov
      @BilyalKhassenov  Год назад

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

    • @TheShadowOfYours
      @TheShadowOfYours Год назад

      @@BilyalKhassenov пару букв описки и можно у тебя стать так "ребёнком". Упрекать в том, что сам ненавидишь, это как плевать в колодец, из котрого пьёшь. 🐷