VBA – Preenchendo um Listbox com valores únicos de uma lista

Fonte: http://www.exceltip.com

A macro abaixo preenche um ListBox (que também poderia ser um ComboBox) em um UserForm com os valores únicos de um range. No VBA, crie um UserForm, insira um ListBox e coloque o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub UserForm_Initialize()
    Dim MyUniqueList As Variant, i As Long
    With Me.ListBox1
        .Clear    ' limpa o conteúdo do listbox
        MyUniqueList = UniqueItemList(Range("A1:A30"), True)
        For i = 1 To UBound(MyUniqueList)
            .AddItem MyUniqueList(i)
        Next i
        .ListIndex = 0    ' seleciona o primeiro item
    End With
End Sub
 
Private Function UniqueItemList(InputRange As Range, _
                                HorizontalList As Boolean) As Variant
    Dim cl As Range, cUnique As New Collection, i As Long, uList() As Variant
    Application.Volatile
    On Error Resume Next
    For Each cl In InputRange
        If cl.Formula <> "" Then
            cUnique.Add cl.Value, CStr(cl.Value)
        End If
    Next cl
    UniqueItemList = ""
    If cUnique.Count > 0 Then
        ReDim uList(1 To cUnique.Count)
        For i = 1 To cUnique.Count
            uList(i) = cUnique(i)
        Next i
        UniqueItemList = uList
        If Not HorizontalList Then
            UniqueItemList = _
            Application.WorksheetFunction.Transpose(UniqueItemList)
        End If
    End If
    On Error GoTo 0
End Function

Neste caso, estou supondo que existe uma lista de valores entre as células A1 e A30 da planilha ativa. A função pode facilmente ser transformada para retornar um array com valores únicos.

Comentários

comentários

9 comentários em “VBA – Preenchendo um Listbox com valores únicos de uma lista”

  1. Olá!
    Não sei se você pode me ajudar, mas estou com uma dúvida para varrer os dados selecionados de uma listBox.
    Tenho uma listBox´que é preenchida atravéz de um Select e a pessoa que ira utilizar poderá selecionar mais de um item, e eu preciso saber qual as opções que ela escolheu para que ao clicar em um botão ela possa gerar um arquivo com as informações selecioandas.

    Desde já agradeço.

  2. Eu utilizo uma maneira mais simples, e muito mais facil de ser lembrada.
    Pois essa que vc mostrou não funcionou aki.


    __________________________________________________

    Dim linha As Integer
    Dim tanto

    linha = Worksheets(“Plan1”).Range(“A100”).End(xlUp).Row
    tanto = 0

    With Worksheets(“Plan1”)

    For i = 1 To linha
    tanto = tanto 1
    Me.ListBox1.AddItem .Cells(tanto, 1).Value
    Next

    End With

    __________________________________________________

    Essa função descobre quantas linhas existe preechida e adiciona a “ListBox1” o tanto determinado de valores até a ultima linha. sem precisar chamar função exterior.

  3. Gregory,

    Talvez o código não tenha funcionado porque algumas partes estavam com encodadas pelo HTML. Já está corrigido.

    Quanto a seu código, obrigado por mais esta alternativa.

    O código acima é só um exemplo. Quanto ao Range, ele pode ser dinâmico.

    Mesmo assim, o objetivo do post era o preenchimento de itens únicos em uma lista, e isso ele está fazendo, e bem.

    Qualquer outra dúvida ou sugestão, recomendo o fórum:

    http://www.tomasvasquez.com.br/forum

    Nos vemos lá!

    Abraços
    Tomás

Os comentários estão fechados.