Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Заполнение списка ComboBox по условию

    Заполнение списка ComboBox из кода VBA Excel по условию в зависимости от выбранного значения в другом элементе управления ComboBox на примере ФИО.

    Пример для заполнения ComboBox по условию

    Описание примера по заполнению списка ComboBox по условию в зависимости от выбранного значения в другом элементе управления ComboBox.

    1. Исходная таблица со списками фамилий, имен и отчеств для заполнения элементов управления ComboBox из кода VBA Excel:

    Таблица со списками фамилий, имен и отчеств

    Список ФИО отсортирован по алфавиту, что позволит без использования дополнительного кода VBA Excel заполнить ComboBox1 только уникальными фамилиями, а также облегчит поиск фамилии для выбора в раскрывающемся списке.

    2. Пользовательская форма с элементами управления ComboBox1, ComboBox2 и ComboBox3 для фамилий, имен и отчеств с соответствующими им надписями:

    Пользовательская форма с элементами управления Label и ComboBox

    3. Необходимо с помощью кода VBA Excel:

    • заполнить список элемента ComboBox1 уникальными фамилиями;
    • заполнить ComboBox2 именами, соответствующими выбранной фамилии в ComboBox1;
    • заполнить ComboBox3 отчествами, соответствующими выбранной фамилии в ComboBox1 и выбранному имени в ComboBox2.

    Условие заполнения следующего элемента ComboBox — выбранное значение в предыдущем поле со списком.

    Заполнение ComboBox1 уникальными фамилиями

    Заполняем список ComboBox1 фамилиями из таблицы с помощью кода VBA Excel при открытии пользовательской формы, используя событие UserForm_Initialize:

    Фамилии из столбца таблицы копируются в массив для ускорения цикла, так как в массивах циклы работают быстрее, чем в диапазонах.

    Заполнение ComboBox2 именами по условию

    Когда мы выбираем значение в поле со списком ComboBox1, происходит событие ComboBox1_Change, которое будем использовать для автоматического заполнения элемента ComboBox2 именами, соответствующими выбранной фамилии:

    Имена в ComboBox2 могут повторяться, так как отбор уникальных значений не производится. Если имена в списке ComboBox2 должны быть уникальными, можно сначала добавить их в объект Collection с отбором уникальных значений, а потом из объекта Collection скопировать имена с помощью цикла For Each ... Next в ComboBox2:

    Заполнение ComboBox3 отчествами по условию

    Выбор одного из элементов в ComboBox2, как и автоматический выбор единственного элемента предыдущим кодом, вызывает событие ComboBox2_Change, которое будем использовать для автоматического заполнения элемента ComboBox3 отчествами, соответствующими выбранной фамилии в ComboBox1 и выбранному имени в ComboBox2:

    Отчества в ComboBox3 повторяться не могут, так как это означало бы, что в таблице есть два или более совершенно одинаковых ФИО.

    Один из результатов работы кода VBA Excel по заполнению полей со списком ComboBox в зависимости от выбранного значения в другом элементе управления ComboBox на примере ФИО:

    Выбор ФИО с помощью полей со списком ComboBox

    Если фамилия в списке встречается один раз, и ей соответствует одно имя, а фамилии и имени — одно отчество, тогда при выборе этой фамилии в элементе управления ComboBox1, имя и отчество в ComboBox2 и ComboBox3 выберутся автоматически.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    9 комментариев для “VBA Excel. Заполнение списка ComboBox по условию”

    1. Александр

      Добрый день!
      Только знакомлюсь с VBA!
      Не могли бы написать код к:
      Имена в ComboBox2 могут повторяться, так как отбор уникальных значений не производится. Если имена в списке ComboBox2 должны быть уникальными, можно сначала добавить их в объект Collection с отбором уникальных значений, а потом из объекта Collection скопировать имена с помощью цикла For Each … Next в ComboBox2.

      1. Евгений

        Здравствуйте, Александр!
        Добавил в статью код для заполнения списка элемента управления ComboBox2 уникальными именами.

    2. Виктория

      Добрый день.
      Подскажите, почему выбранное значение из списка может не подставляться в комбобокс?
      У меня написан код по вашей статье: как заполнить комбобокс значениями по условию. Список значений в комбобоксе заполняется, но когда я выбираю то или иное значение оно в самом поле комбобокса не отображается. Если же я заполняю список значений комбобокса из диапозона без условий все срабатывает нормально.

      1. Евгений

        Здравствуйте, Виктория!
        Возможно, у вас неправильно применен метод ComboBox.Clear. Посмотрите, не тот ли ComboBox вы очищаете, в котором выбираете значение.

        1. Виктория

          Именно его и очищаю. Описанный здесь код приведен для события Change, я же применяю для события DropButtonClick, чтобы значения добавлялись из массива, когда раскрывается список. И метод Clear применяю к этому комбобокс до добавления значений в него, иначе при каждом раскрытии списка значения начинают дублироваться.

        2. Виктория

          Причем если начать вводить значение в комбобокс, которое есть в списке, он автоматически подставит его и будет отображать. Но при выборе значения мышью значение не заполняется:(

    3. Владимир

      Доброго времени!
      Было бы круто, если сам рабочий файл можно было бы скачать…
      За статью — СПАСИБО!

    Обсуждение закрыто.