
Eu tenho as seguintes colunas
A | B
Name | Value
One | 1
Two | 2
Three | 3
Na coluna C, quero ter uma lista suspensa de validação que mostre a concatenação de nome e valor (ou seja, um - 1, dois - 2, etc.). Quando o usuário faz uma seleção (ou seja, Dois - 2), somente os dados na coluna Valor preenchem a célula (ou seja, 2).
Como faço para realizar essa façanha?
Responder1
Com dados como:
Coloque a seguinte macro VBA em um módulo padrão e execute-a:
Sub DV_Maker()
Dim i As Long
Dim s As String
For i = 2 To 4
s = s & "," & Cells(i, 1) & " - " & Cells(i, 2)
Next i
s = Mid(s, 2)
With Range("C2:C4").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=s
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = False
End With
End Sub
Ele configurará a validação de dados para célulasC2,C3, eC4. Em seguida, coloque esta macro de evento na área de código da planilha:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("S2:C4")
If Intersect(Target, rng) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Value = Split(Target.Value, " - ")(1)
Application.EnableEvents = True
End Sub
A macro de evento removerá o texto da célula após a inserção dos dados.