Коллекции в VBA - Collections - (Серия VBA 22)

Поділитися
Вставка
  • Опубліковано 4 жов 2024
  • Привет! В этом уроке Ты познакомишься с самым удобным способом запоминания принципа работы коллекций в VBA. Так, помимо всего прочего мы обсудим,
    • Как использовать коллекции в VBA
    • В чём заключаются особенности коллекций в VBA
    • Какие действия могут осуществляться в отношении коллекций и как с ними работать (Add, Item, Count, Remove)
    • Как использовать параметры действия Add и понимать их принцип работы
    Приятного просмотра и успехов в изучении VBA! :)

КОМЕНТАРІ • 37

  • @АндрейЛесников-з8ч
    @АндрейЛесников-з8ч 5 років тому +18

    Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +3

      Здравствуйте, Андрей!
      Со своей стороны точно также не поленюсь и поблагодарю Вас за этот приятный комментарий под каждым видео точно так же :)
      С уважением и хорошего Вам дня,
      ХБ

  • @V._A._S.
    @V._A._S. 3 роки тому +7

    Ни одного плохого коммента, это логично. Спасибо, всё доступно очень понравилось.

  • @idevsl8245
    @idevsl8245 4 роки тому +3

    Толковый урок, коротко и ясно без лишней воды.

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте! Большое спасибо за Ваш комментарий! Хороших Вам выходных 😊
      С уважением,
      Билял

  • @olegyes934
    @olegyes934 3 роки тому +1

    Подтверждаю, удалось объяснить максимально доступно! Спасибо Вам!

  • @АндрейВасильевич-й9с

    Спасибо за Ваши уроки!

  • @julidem86
    @julidem86 3 роки тому +3

    Спасибо за Ваш труд! Все очень понятно и по теме. Коллекции использовал при написании макроса для поиска вложений в письмах Outlook.

  • @alekseychaykovskiy3963
    @alekseychaykovskiy3963 4 роки тому +5

    спасибо

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +1

      Здравствуйте, Алексей!
      Рад стараться! :)
      Хороших Вам выходных :)
      С уважением,
      ХБ

  • @alexandrosypenko5090
    @alexandrosypenko5090 3 роки тому +2

    То что я так долго искал👏👏👏

  • @pavelkazak3112
    @pavelkazak3112 5 років тому +6

    Отличное видео! Коллекции, как вы заметили, очень похожи на массивы, но если с массивами все понятно, то как и где применять коллекции не совсем ясно. Как я понял, в коллекции можно записать только константы, изменить же значения, записанные в ячейки не получится. Может, на примере, расскажите, где применяются коллекции в vba.

    • @BilyalKhassenov
      @BilyalKhassenov  5 років тому +3

      Здравствуйте, Павел! Спасибо за интересный вопрос!
      Пожалуй, можно сказать, что при сравнении Arrays и Collections, для пользователей основным функциональным отличием коллекций от массивов является возможность точной идентификации сохраняемых значений/объектов при помощи Key (т. е. грубо говоря названия). Я бы сказал, что, отталкиваясь от этого утверждения и стоит принимать решение, что же выбрать для реализации Вашей идеи в коде - Collection или Array.
      Скажем, Вы имеете 10 наименований продуктов и цены каждого из них. Сохранив цены в коллек-цию, позже можно будет легко к ним обращаться при помощи названия продукта. Это первый пример, который мне пришел навскидку в голову :)
      Ну и в принципе можно использовать коллекции для работы со списками значений, например, для их вывода в Listbox. Многие их так используют, находя достаточно простыми в понимании и ис-пользовании. Когда мы дойдём до изучения UserForms, обязательно рассмотрим подобные при-меры использования коллекций.
      Если найдёте случаи, где оптимально использование именно коллекций - обязательно делитесь! Будет интересно почитать :)
      С уважением,
      ХБ

    • @pavelkazak3112
      @pavelkazak3112 5 років тому +1

      @@BilyalKhassenov Спасибо, ответ исчерпывающий!

  • @SamSambl4
    @SamSambl4 4 роки тому +4

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

  • @азаматджунусов-л2з
    @азаматджунусов-л2з 4 роки тому +4

    Большое спасибо, Билял, большое спасибо!!!

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Азамат!
      Всегда пожалуйста, рад помочь! 😊
      С уважением и хороших Вам выходных,
      Билял

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 3 роки тому +1

    Билял, благодарю! Отличный понятный урок. Снова узнал для себя много нового о VBA.

  • @maksimkisliak4782
    @maksimkisliak4782 3 роки тому +3

    Коммент ради раскрутки канала!

  • @SpaceProgrammer90
    @SpaceProgrammer90 4 роки тому +2

    Аналог Collections в TurboDelphi - ключевое слово "record", которое позволяет объединять данные разных типов вместе и создавать свой комплексный тип данных. Например, можно создать тип данных - запись о человеке с указанием в отдельных полях фамилии, телефона, адреса и т.д., потом в свою очередь объединить такие записи в массив - получится телефонная книга (совместное использование массивов и записей в TurboDelphi ). Только в TurboDelphi обращение к полям записи (коллекции) более удобно - через точку - как свойство: Human.Surname

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +2

      Здравствуйте, Виктор!
      Спасибо за Ваш комментарий! Да, по описанию выглядит и вправду достаточно схоже. Мне, если честно, еще никогда не приходилось работать с TurboDelphi. А где Вы применяете его, если не секрет?
      С уважением и хороших Вам выходных,
      Билял

  • @ДмитрийРостович-ч9ч

    Спасибо большое

  • @stasberestetskiy2305
    @stasberestetskiy2305 4 роки тому +3

    Здравствуйте Билял! Спасибо за Ваши уроки, они просто незаменимый помощьник про изучении VBA. Пытаюсь каждый урок приенять на прктике с связи с чем хотел задать вопрос в котором испытываю трудности. очень надеюсь на Вашу помощь.
    Задача такова: Необходимо каждый раз вставлять в последнюю колонку документа вставлять некое значение и протягивать его вниз до дех пор пока есть какое либо значение в соседней колонке слева и если с первой частью проблем нет то вот со второй (протягиванием) есть. Сложность еще в том что каждый раз эти последние колонки будут отличаться.
    Вот что получилось у меня, но способ довольно топорный, и полагаю есть более рациональное решение например с использованием масивов:
    Sub AddSubDate()
    Range("A1").Select
    Selection.End(xlToRight).Offset(0, 1).Select
    ActiveCell.Value = "Sub Date"
    Selection.Offset(1, 0).Select
    Selection.FormulaR1C1 = "=TODAY()"
    Selection.Copy
    Selection.Offset(0, -1).Select
    Selection.End(xlDown).Select
    Selection.Offset(0, 1).Select
    Range(Selection, Selection.End(xlUp)).Select
    ActiveSheet.Paste
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    End Sub
    Также хотел узнать есть ли какой то способ обьявить как range последнюю колонку или строчку что бы потом ее просто указывать как переменную. Спасибо заранее!

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +4

      Здравствуйте, Стас!
      Извиняюсь за долгий ответ - эта неделя выдалась крайне интенсивной, и я никак не мог добраться до ответов на комментарии и до работы над каналом в принципе.
      Спасибо за Ваш комментарий! Очень рад, что мой канал помогает Вам в изучении VBA 😊
      И касательно Вашего вопроса: вот один из возможных вариантов решения описанной Вами задачи:
      Sub answerToQuestion()
      Dim rgCellChecked As Range
      Dim rgFirstCell As Range
      Dim rgLastCell As Range
      Range("A1").Select 'Все действия будут происходить в активном рабочем листе. В дальнейшем, подумайте об эксплицитном указании требуемого рабочего листа/листов
      Set rgFirstCell = Range("A1").End(xlToRight).Offset(1, 1) 'Сохраняем первую ячейку в переменную. Указание Range("A1") следует сделать эксплицитным!
      Set rgLastCell = Cells(ActiveSheet.Rows.Count, rgFirstCell.Offset(0, -1).Column).End(xlUp) ' Определяем последнюю ячейку. Ниже таблице не должно быть значений!
      rgFirstCell.Offset(-1, 0) = "Sub Date" 'Вписываем заголовок столбца
      For Each rgCellChecked In Range(rgFirstCell, rgLastCell) 'Проверка всех ячеек в столбце слева от записываемых данных
      If rgCellChecked.Offset(0, -1) "" Then 'Если ячейка не пустая, то вписываем сегодняшнюю дату
      rgCellChecked = Date
      End If
      Next rgCellChecked
      End Sub
      Учтите, что здесь я, как и в Вашем варианте кода, имплицитно указывал требуемую ячейку Range(“A1”). В дальнейшем подумайте о переходе на эксплицитное указание требуемой ячейки, то есть, например: ThisWorkbook.Worksheets("Лист1").Range("A1").
      Кроме того, Вы спрашивали, возможно ли определение и сохранение последней ячейки столбца в переменную. Пример данного действия Вы можете увидеть в следующей строке из представленного решения задачи: Set rgLastCell = Cells(ActiveSheet.Rows.Count, rgFirstCell.Offset(0, -1).Column).End(xlUp). То есть в данном случае мы «прыгаем» от самой последней ячейки в требуемом столбце вверх при помощи метода End. Более подробно о нахождении последней ячейки в столбце/строке Вы можете узнать из видеоурока «Как найти последнюю строку/столбец - (Серия VBA 11)». При этом заметьте, что в данном случае определения последней ячейки в столбце, под требуемой таблицей не должно быть записано каких-либо значений. В противном случае отталкиваться нужно от них (при условии, что их позиция статична и не меняется со временем).
      Посмотрите код, протестируйте его, и, если будут вопросы - всегда обращайтесь! Буду рад помочь Вам 😊
      С уважением и хороших Вам выходных, Стас 😊
      Билял

    • @АлексейСоков-ь8и
      @АлексейСоков-ь8и 3 роки тому

      @@BilyalKhassenov Билял, а если мы переменной типа "Range" (назовём её "SomeRange") присваиваем некоторый диапазон на определенном Листе определенной Книги, при последующем обращении к этой переменной нужно ли указывать перед ней полный адрес (с указанием Книги и Листа), или в саму переменную уже будет заложена эксплицитная адресация диапазона? Другими словами, как будет правильно/допустимо:
      - так: "Workbooks(1).Worksheets(1).SomeRange";
      - или просто так: "SomeRange"?

  • @alexandrPomashuto
    @alexandrPomashuto 3 роки тому

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

  • @kamaldzhanyusupov2535
    @kamaldzhanyusupov2535 4 роки тому +1

    Билял, добрый день!
    Спасибо за урок, очень сильно помог разобраться с коллекциями. Но есть вопрос, а как можно вывести номер индекса определенного наименования из коллекции, если наименования в коллекции он берет из таблицы и соответственно я не прописываю отдельно номер как у вас показано с момента 7:20? т.е. мне нужно что как только он находит определенное значение в коллекции выдал мне его индекс.

  • @muhammadkasymov4087
    @muhammadkasymov4087 4 роки тому +3

    заслуженные 0 дизлайков, браво

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому

      Здравствуйте, Magamed!
      Спасибо за Ваш комментарий, с новым годом Вас, успехов! :)
      С уважением,
      Билял

  • @nikitamityushov7270
    @nikitamityushov7270 4 роки тому +3

    Здравствуйте. Будет ли видео по словарям и их заполнению?

    • @BilyalKhassenov
      @BilyalKhassenov  4 роки тому +1

      Здравствуйте, Никита!
      Да, в дальнейшем, правда не могу сказать, когда именно, но обязательно сниму также видеоурок и о словарях.
      Хорошего Вам вечера! :)
      С уважением,
      ХБ

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

    Добрый день. У меня к Вам вопрос. Я создал коллекцию кнопок CommandButton1, CommandButton2,......CommandButtonN. Могу ли я создать одно событие Click для всей коллекции, не создавая при этом событие Click для каждой кнопки в отдельности. Спасибо.

  • @КириллСкляров-р1р
    @КириллСкляров-р1р 2 роки тому

    Коллекция это аналог списка в Power Query?

  • @АлексейСоков-ь8и
    @АлексейСоков-ь8и 3 роки тому +1

    2021

  • @RuslanRagimov-k8k
    @RuslanRagimov-k8k 3 роки тому

    А как потом сортировать данную коллекцию?

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

    Отличный урок,все по полочкам.Только с каждым посмотренным уроком я все больше и больше ненавижу язык vba.Для чего вообще нужна эта структура данных если уже есть массив и хеш-таблица?!?А метод item?!Есть что то бесполезнее?