Para concatenar algumas células, eu usaria:
=CONCATENATE(A2,",",C2",",D2,",",F2)
Isso faria com que ...
- A2 = "Mateus"
- C2 = "Marca"
- D2 = "Lucas"
- F2 = "João"
resultaria em Matthew,Mark,Luke,John
.
Mas encontramos problemas com algo como ...
- A2 = "Jesus"
- C2 = ""
- D2 = "Maria"
- F2 = "José"
o que resultaria em Jesus,,Mary,Joseph
.
Aqui, a vírgula extra é indesejada. Existe uma maneira de lidar com isso normalmente, para que todas as células não em branco sejam incluídas na lista separada por vírgulas, evitando a adição de vírgulas desnecessárias quando algumas células estiverem em branco?
Certamente, isso pode ser feito com um número razoável de IFs aninhados, mas eu realmente quero evitar isso, se possível. Isso pode ser feito com funções nativas do Excel ou talvez com uma fórmula de matriz? Ou seria preciso recorrer ao Script VB para algo assim?
Respostas:
No Excel 2016, você pode usar
TEXTJOIN
:Portanto, no seu caso, você usaria esta fórmula:
fonte
Como você disse, os IFs aninhados não são sua xícara de chá, mas não vejo outra maneira de fazer isso, sem a solução VBA apontada pelo @nixda.
Para as soluções que apresento, presumo que seus dados sejam os seguintes:
Eu tive uma solução que fez o que você queria, mas ficou "enterrada" . Entendi depois de ler os comentários que você deixou em uma resposta recente (especialmente o comentário sobre o fato de você sempre ter a primeira célula preenchida). Isso permite não existir um ninho, pois a primeira condição (no raciocínio abaixo) é sempre falsa.
Você sempre pode soltar
CONCATENATE
e substituir a fórmula por e comercial, conforme indicado na resposta por @Scott. Neste ponto, é simplesmente uma questão cosmética.O primeiro valor é sempre escrito, portanto, a única coisa necessária é verificar se a célula ativa está em branco e adicionar uma vírgula por trás, se não estiver.
Dessa forma, você não precisa de nenhuma célula auxiliar, tudo em uma única função.
Também escrevi uma versão mais elaborada, porque assumi o termo geral (ou seja, pode haver uma situação em que você não preencheu sua primeira célula). Requer apenas um ninho de dois níveis, porque há no máximo três condições que precisam ser verificadas:
A formatação necessária, supondo que você tenha iniciado o raciocínio desde o início, é a seguinte:
Como tal, aqui está a fórmula que eu usei. Eu assumi que todos os dados estavam em uma coluna, para usar em uma linha alterar algumas fórmulas e o intervalo.
ROWS
conta o número de linhas em um determinado intervalo. Se igualar o número de células em branco atrás da célula ativa , significa que todas as células atrás da célula ativa estão em branco; portanto, nenhuma vírgula deve ser colocada antes.O intervalo em
ROWS
eCOUNTBLANK
são as células atrás da célula ativa .fonte
Se você estiver disposto a usar algumas células "auxiliares" para valores intermediários, pode ser o seguinte:
Defina a célula
AA2
(ouSheet2!A2
, ou onde você quiser) para(onde é apenas uma maneira mais curta de dizer ), e as células definido , e de forma semelhante. Defina como
x & y
CONCATENATE(x, y)
AC2
AD2
AF2
AZ2
Então seu resultado final é
Explicação:
As células
AA
-AF
acrescentam vírgulas aos valores que não estão em branco. Então, usando seu exemplo,resultaria em
enquanto
resultaria em
(observe a falta de vírgula na coluna
C
).AZ2
é uma concatenação simples do que foi dito acima:Jesus,Mary,Joseph,
eliminamos a vírgula extra depois,Jesus
mas adicionamos uma no final.LEFT(AZ2, LEN(AZ2)-1)
é tudoAZ2
exceto o último caractere. E precisamos testar seAZ2
é nulo para evitar um erro se todas as quatro células de entrada estiverem vazias.fonte
=CONCATENATE(S2,IF(U2="","",", "&U2),IF(V2="","",", "&V2),IF(W2="","",", "&W2))
Uma coisa que esqueci de mencionar é que a primeira célula da minha lista (S2 neste exemplo) será obrigatória . Portanto, aceitando que a primeira célula sempre seja preenchida, podemos mover as vírgulas para a frente de cada sequência subsequente e evitar um excesso de vírgula no final.Presumo que você esteja procurando uma solução simples e não para melhorar suas habilidades.
Você pode usar um suplemento se isso for permitido (ou seja, você tem permissão para instalar suplementos). O mais rápido possível é aquele que eu recomendo, gratuito para uso não comercial.
Aqui está o que você pode fazer com uma de suas funções
fonte
Se você deseja uma solução geral, a melhor resposta envolve o VBA.
Se seus dados de exemplo estiverem próximos do problema completo que você está solucionando, basta fazer o seguinte para remover vírgulas duplas:
O exemplo acima só funcionará se você tiver apenas intervalos com um valor amplo. Você precisará de fórmulas substitute aninhadas () para lidar com intervalos maiores.
O acima irá reduzir até 398 vírgulas seqüenciais para um. Também reduzirá muitos valores acima de 399, mas o próprio 399 e vários outros resultarão em mais de uma vírgula.
fonte
SUBSTITUTE
procure por todas as correspondências separadas dentro da string.SUBSTITUTE
substitui todas as correspondências. 398 (24 * 16 + 14) vírgulas são reduzidas para 38 vírgulas, 38 (4 * 8 + 6) para 10, 10 (2 * 4 + 2) para 4, 4 (1 * 3 + 1) para 2 e 2 para 1.=IF(AND(B2="",C2="",D2=""),A2,IF(AND(C2="",D2=""),CONCATENATE(A2,", ",B2) ...
Mas, como você pode aninhar um IF dentro de CONCATENATE, acontece que eu realmente preciso apenas de uma instrução IF por célula para ser concatenada - ainda é uma pouco menos do que o ideal, pois eu preferiria alguma forma de loop FOR ou uma função de matriz, mas funciona muito bem. Veja meu comentário na resposta de @ Scott.Presumo que seus dados tenham cabeçalhos e iniciem em A2.
Voila, sua lista separada por vírgulas está na última célula da coluna B :)
Eu vim aqui procurando uma solução, não encontrei nenhuma e, por isso, criei o que foi dito acima. Meus dados têm 1000 linhas, portanto, adicionar manualmente à concatenação não é uma opção.
fonte
Basta combinar Concatenate () com if () em uma função de matriz:
Essa função deixará uma vírgula no final da sua lista; portanto, se você precisar evitar isso e souber exatamente onde está o final da lista (no seu exemplo, coluna f), apenas lide com essa separadamente:
Felicidades!
fonte
ARRAYFORMULA
é uma função de planilha do Google. No Excel, você deve usar Ctrl + Shift + EnterNão me lembro onde encontrei essa solução, mas funciona muito bem para obter uma lista de strings.
Para dados nas células A1 a A3
Pressione Enter, volte para a barra de fórmulas e realce A1: A3 na fórmula e pressione F9. Isso transformará seu intervalo em uma lista delimitada por ponto-e-vírgula com aspas em torno de cada item.
Depois de pressionar F9, realce e copie a lista e cole em outra célula. A partir daqui, você pode encontrar e substituir para usar vírgulas em vez de ponto-e-vírgula ou aspas simples em vez de duas vezes.
fonte
=A1:A3
uma célula, F2 na barra de fórmulas, F9 para avaliar. Sua resposta tem a semente de uma dica útil, mas é ofuscada por muitos detalhes totalmente estranhos e confusos. 5. É também uma solução pontual que realmente não ajuda a avançar.