Parece que você está tentando usar o Excel como um banco de dados relacional, que não é tão bom assim. Acima de tudo, a menos que tenha havido uma mudança nos últimos anos (não tive o prazer de usar nada posterior ao Excel 2010), não há função de planilha para transformar um intervalo ou matriz em uma cadeia delimitada. Você terá que criar uma função de planilha VBA que faça isso.
Você pode usar uma combinação de fórmulas de matriz e VBA para fazer o que quiser. Antes de ir mais longe, sugiro strongmente que você use um programa de banco de dados real, se você se encontrar fazendo coisas assim regularmente. Eu abusei do Excel para fazer tarefas simples de banco de dados relacional no passado, mas apenas tarefas simples. Se eu tivesse que fazer algo mais complexo, teria sido extremamente doloroso.
Supondo que seu ID para pesquisa esteja na célula F1
e sua tabela seja chamada de Table1
, insira o seguinte como uma fórmula de matriz (use control- shift-enter, em vez de entrar). SimpleCat
é a sua função de planilha de concatenação VBA.
=SimpleCat(IF(Table1[Deal ID (Primary Key)]=$F$1, Table1[Name], ""))
Um SimpleCat
que funcionará para essa instância específica é o seguinte:
Function SimpleCat(Args() As Variant) As Variant
Dim a As Variant
SimpleCat = ""
For Each a In Args
If a <> "" Then SimpleCat = SimpleCat & a & ", "
Next
If Len(SimpleCat) > 0 Then SimpleCat = Left$(SimpleCat, Len(SimpleCat) - 2)
End Function
Deixo como um exercício para você expandir em SimpleCat
para torná-lo mais genérico, já que ter uma função de concatenação genérica mais completa é útil na caixa de ferramentas de qualquer pessoa.
Explicação:
Quando avaliada como uma fórmula de matriz, a comparação de uma coluna da tabela inteira com um valor único produzirá uma matriz de TRUE
s e FALSE
s. Usar um IF
construirá uma nova matriz, obtendo valores da posição correta da matriz que você está usando no valor se o lado verdadeiro de IF
e preenchendo a string vazia que você está usando no valor se lado falso do IF
. A função SimpleCat
coloca todos os valores não vazios nesse novo array junto com vírgulas entre eles.