Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
28.03.2024, 17:20:02

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Выпадающий список только с уникальными значениями
Страниц: [1]   Вниз
Печать
Автор Тема: Выпадающий список только с уникальными значениями  (Прочитано 6382 раз)
0 Пользователей и 1 Гость смотрят эту тему.
peoplecanfly1
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« : 14.02.2019, 11:26:32 »

Здравствуйте!

Необходимо сделать выпадающий список из данных массива с уникальными значениями.
В столбце "А"  номер проекта -  есть повторяющиеся числа их нужно исключить в выпадающем списке.
В столбце "B"  название проекта - есть повторяющиеся  значения, но это не важно.

Т.е выпадающий список должен состоять из 2 колонок, где в
1ой - уникальный номер проекта (все дубликаты номеров не отображаются.
2ой - название проекта  (могут повторятся)

Примерно так:
1. test
2. test2
3. test1
4. test

Приложу файл, но там я не особо много смог написать. Даже имя проекта (во второй колонке) не отображается почему-то.. В замешательстве
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 14.02.2019, 13:29:27 »

выпадающий список должен состоять из 2 колонок
Стандартными выпадающими списками нельзя так сделать, не объединив предварительно в доп.столбце значения. Тоже самое и с уникальными значениями - не получится запихнуть в вып.список значения, созданные на основе формулы массива.
Иначе говоря: создаете нужного вида список где-то в отдельном столбце и уже его используете в качестве диапазона для вып.списка.

Или использовать пользовательские формы и макросы, но судя по формату файла - это не вариант.
А вообще не совсем понятно что надо получить в итоге. Как должны быть отображены значения из второго столбца для значений первого? Через запятую? Или только первое? Или как-то еще?
« Последнее редактирование: 14.02.2019, 13:32:40 от Дмитрий Щербаков(The_Prist) » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
peoplecanfly1
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #2 : 14.02.2019, 17:31:30 »

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

Я находил готовые решения но только что бы отображлось одно значение в списке, ( и оно же проверялось) но что бы показывалось 2 значение и только одно проверялось, такого не смог найти.

Постарался объяснить как смог  Обеспокоенный

И да я походу приложил файл без кода совсем....

Код: (vb)

   Dim i As Long
       For i = 2 To ThisWorkbook.Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
ComboBox1.Font.Size = 17
ComboBox1.Font.Name = "Calibri"
ComboBox1.Font.Bold = True
        With Me.ComboBox1
            .AddItem
            .List(.ListCount - 1, 0) = ThisWorkbook.Worksheets("sheet1").Cells(i, 1).Value
            .List(.ListCount - 1, 1) = ThisWorkbook.Worksheets("sheet2").Cells(i, 2).Value
        End With
        

 
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #3 : 14.02.2019, 17:51:29 »

В общем-то, код получения уникального списка есть: Как получить список уникальных(не повторяющихся) значений?
там вообще все уже готово, останется только не выгружать на лист, а сразу передавать массив в ComboBox:
Код: (vb)
With Me.ComboBox1  
     .List = avArr
     .ColumnCount = 2
End With

и массив сделать с двумя столбцами. Хотя по скрину вообще не понял где здесь хоть намек на уникальные значения...Поэтому что должно быть в итоге так и не ясно.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
peoplecanfly1
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #4 : 15.02.2019, 11:12:40 »

Да, в скрине и нет уникальных значений, потому что я их не мог сделать Улыбка

Я последовал вашему совету и сделал код как в примере, с внесением сразу в комбобокс, выбор уникальных щначений из массива работает.
Код: (vb)

Private Sub UserForm_Initialize()
Dim x, avArr, li As Long
Dim avVals
Dim rVals As Range, rResultCell As Range
Dim matnumber As Integer

matnumber = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Set rVals = ThisWorkbook.Worksheets(1).Range("A1:A" & matnumber)
avVals = rVals.Value
ReDim avArr(1 To Rows.Count, 1 To 1)

With New Collection
   On Error Resume Next
   For Each x In avVals
   If Len(CStr(x)) Then
   .Add x, CStr(x)
   If Err = 0 Then
      li = li + 1
      avArr(li, 1) = x
      Else
      Err.Clear
      End If
    End If
     Next
End With

    If li Then
    With Me.ComboBox1
     .List = avArr
     .ColumnCount = 2
End With
End If
End Sub


Но как  сделать что бы он и 2 второй столбец отображал. Не только уникальный порядковый номер и но и название.
Так:
1   Test1 
А сейчас просто 

 
Я  на всякий случайвложил файл. Заранее спасибо!
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #5 : 15.02.2019, 12:46:57 »

я бы модифицировал код так:
Код: (vb)
Private Sub UserForm_Initialize()
Dim x, avArr, li As Long, lr As Long
Dim avVals
Dim rVals As Range, rResultCell As Range
Dim matnumber As Integer

matnumber = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
Set rVals = ThisWorkbook.Worksheets(1).Range("A1:B" & matnumber)
avVals = rVals.Value
ReDim avArr(1 To Rows.Count, 1 To 2)

With New Collection
   On Error Resume Next
   For lr = 1 To UBound(avVals, 1)
        x = avVals(lr, 1)
        If Len(CStr(x)) Then
            .Add x, CStr(x)
            If Err = 0 Then
                li = li + 1
                avArr(li, 1) = x
                avArr(li, 2) = avVals(lr, 2)
            Else
                Err.Clear
            End If
         End If
     Next
End With

    If li Then
        ReDim avVals(1 To li, 1 To 2)
        For lr = 1 To li
            avVals(lr, 1) = avArr(lr, 1)
            avVals(lr, 2) = avArr(lr, 2)
        Next
        With Me.ComboBox1
            .List = avVals
            .ColumnCount = 2
        End With
    End If
End Sub
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
peoplecanfly1
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 10


Просмотр профиля
« Ответ #6 : 15.02.2019, 13:50:04 »

Спасибо большое! Все работает!   :D
Записан
Vadim77
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #7 : 07.10.2021, 11:48:53 »

Доброго времени суток!
Подумал, что не стоит дублировать тему поэтому решился написать проблемку здесь.
Поступило тестовое задание - сделать в двух ячейках выпадающий список..но у меня в выпадающем списке повторяются значения. Вопрос можно что б в выпадающем списке не повторялись значения..можно что б БЕЗ создания отдельно списка уникальных значений..а потом из него делать выпадающий список..Одной формулой возможно? Сорри..если непонятно объяснил
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #8 : 07.10.2021, 13:30:00 »

Одной формулой возможно?
Нет. Только через вспомогательный столбец.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Vadim77
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #9 : 07.10.2021, 14:46:15 »

Понятно... Спасибо...Дали тестовое задание родственнице (в Excel файле с заданиями в зеленых вкладках)...Могу выложить...вместе с бутылкой коньяка...)
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru