Sugiro uma solução em que você precisa deixar apenas uma célula em branco no topo de seus dados, como visto em sua amostra.
Se você tiver o Office 365, poderá usar a função TEXTJOIN sem problemas. No entanto, a maioria das versões do Excel não tem essa função interna e você pode ser obrigado a codificar um no VBA por conta própria. Você pode encontrar livremente a versão do VBA na Internet, por exemplo, uma dessas referências é aqui .
Pressione ALT + F11 para acessar o VBA Editor. Insira um módulo e cole o código abaixo nele.
Function TEXTJOIN1(delimiter As String, ignore_empty As Boolean, ParamArray cell_ar() As Variant)
For Each cellrng In cell_ar
For Each cell In cellrng
If ignore_empty = False Then
result = result & cell & delimiter
Else
If cell <> "" Then
result = result & cell & delimiter
End If
End If
Next cell
Next cellrng
TEXTJOIN1 = Left(result, Len(result) - Len(delimiter))
End Function
Isso cria uma função personalizada definida pelo usuário do VBA chamada TEXTJOIN1. Leva em 3 parâmetros, o Delimitador, Ignore Empty Flag & Intervalo.
Neste exemplo, os dados de amostra estão nas células B2: B14. B1 é deixado intencionalmente em branco.
Coloque a seguinte fórmula em C2 e pressione CTRL + SHIFT + ENTER de dentro da barra de fórmulas para criar uma fórmula de matriz. A fórmula agora deve ser incluída em Chaves Encaracoladas para indicar que é uma fórmula de matriz e Arraste-a para baixo ao longo do comprimento de sua coluna.
=IF(ISBLANK(B2),TEXTJOIN1(",",FALSE,OFFSET(B2,-(ROW()-MAX(IF(ISBLANK($B$1:B1),ROW($B$1:B1),0))-1),0):OFFSET(B2,-1,0)),"")
Atualização:
Asoluçãoacimaassumequevocêtemapenasumespaçoembrancoentreoconjuntodedados.Noentanto,sevocêtivermaisdeumedesejarqueafórmulaaindafuncione,useaseguintefórmuladematriz.
=IF(AND(ISBLANK(B2),NOT(ISBLANK(OFFSET(B2,-1,0)))),TEXTJOIN1(",",TRUE,OFFSET(B2,-(ROW()-MAX(IF(ISBLANK($B$1:B1),ROW($B$1:B1),0))-1),0):OFFSET(B2,-1,0)),"")