Lista suspensa com seleção múltipla

A lista suspensa clássica em uma planilha do Excel é ótima, mas permite selecionar apenas uma opção do conjunto apresentado. Às vezes é exatamente isso que você quer, mas há situações em que o usuário precisa poder escolher alguns elementos da lista.

Vejamos várias implementações típicas dessa lista de seleção múltipla.

Opção 1. Horizontal

O usuário seleciona os itens da lista suspensa um por um, e eles aparecem à direita da célula que está sendo alterada, sendo automaticamente listados na horizontal:

As listas suspensas nas células C2:C5 neste exemplo são criadas de maneira padrão, ou seja,

  1. selecionar células C2:C5
  2. guia ou menu Data escolha um time Validação de dados
  3. na janela que se abre, selecione uma opção Lista e especifique como um intervalo fonte células com dados de origem para a lista A1:A8

Em seguida, você precisa adicionar uma macro ao módulo da planilha, que fará todo o trabalho principal, ou seja, adicionar valores selecionados à direita das células verdes. Para fazer isso, clique com o botão direito do mouse na guia da planilha com listas suspensas e selecione o comando Código fonte. Cole o seguinte código na janela do editor Visual Basic que se abre:

Private Sub Worksheet_Change(ByVal Target As Range) Em Erro Continuar Próximo Se Não Intersect(Target, Range("C2:C5")) É Nada E Target.Cells.Count = 1 Então Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Se necessário, substitua o intervalo sensível das listas suspensas C2:C5 na segunda linha deste código pelo seu próprio.

Opção 2. Vertical

O mesmo que na versão anterior, mas os novos valores selecionados não são adicionados à direita, mas à parte inferior:

É feito exatamente da mesma maneira, mas o código da macro do manipulador muda um pouco:

Private Sub Worksheet_Change(ByVal Target As Range) Em Erro Continuar Próximo Se Não Intersect(Target, Range("C2:F2")) Não É Nada E Target.Cells.Count = 1 Então Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Novamente, se necessário, substitua o intervalo sensível das listas suspensas C2:F2 pelo seu próprio na segunda linha deste código.

Opção 3. Com acúmulo na mesma célula

Nesta opção, o acúmulo ocorre na mesma célula onde está localizada a lista suspensa. Os elementos selecionados são separados por qualquer caractere (por exemplo, uma vírgula):

As listas suspensas nas células verdes são criadas de maneira completamente padrão, como nos métodos anteriores. Todo o trabalho é feito, novamente, por uma macro no módulo de planilha:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) É Nada E Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If End Sub  

Se desejar, você pode substituir o caractere separador (vírgula) na 9ª linha do código pelo seu próprio (por exemplo, um espaço ou ponto e vírgula).

  • Como criar uma lista suspensa simples em uma célula de planilha do Excel
  • Lista suspensa com conteúdo
  • Lista suspensa com opções ausentes adicionadas
  • O que são macros, como usá-las, onde inserir código de macro no Visual Basic

Deixe um comentário