combina várias linhas "dinâmicas" em uma célula

0

Eu tenho um intervalo de células nas colunas A para serem combinadas em uma célula na coluna B o alcance dessas células é dinâmico. Como posso combinar essas células?

Por favor, veja a imagem para mais esclarecimentos)

Eu tentei implementar isso

=IF(A6="",LEFT(A5,FIND(C6,A5)+(LEN(C6)-1)))    

mas não funcionou.

    
por Ali_2017 16.11.2017 / 22:28

1 resposta

3

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)),"")

    
por 16.11.2017 / 23:48