Converter uma coluna em uma lista separada por vírgula

129

Tenho a tarefa de criar uma planilha simples do Excel que ocupa um número não especificado de linhas na coluna A, assim:

1234
123461
123151
11321

E transformá-los em uma lista separada por vírgula em outra célula, para que o usuário possa copiar e colar facilmente em outro programa da seguinte maneira:

1234,123461,123151,11321

Qual é a maneira mais fácil de fazer isso?

muncherelli
fonte
8
Parte da solução pode ser Editar, Colar Especial, Transpor para converter a coluna em uma linha. Se o outro programa aceitar Guias em vez de vírgulas, você estará pronto após copiar a nova linha.
Arjan
Como você faz o oposto disso? Pegue uma lista separada por vírgula e converta-a em uma coluna de conteúdo?
stevvve
1
@stevvve usa o recurso Text to Columns na guia data. support.microsoft.com/en-us/kb/214261
Trevor
Eu uso qualquer editor de texto capaz de expressão regular para isso, como o bloco de notas ++. Copie os valores das colunas e cole-os no editor, pesquise e substitua expressões regulares, localize "\ r \ n" substituir por ",". Se você deseja converter CSV em coluna, localize "," e substitua por "\ r \ n"
20/17

Respostas:

145

Supondo que seus dados iniciam em A1, eu colocaria o seguinte na coluna B:

B1:

=A1

B2:

=B1&","&A2

Você pode colar a coluna B2 na coluna inteira. A última célula na coluna B agora deve ser uma lista separada por vírgula da coluna A.

Sux2Lose
fonte
8
Isso é ótimo para um número limitado de linhas, mas (dependendo da memória disponível?) O processo será interrompido se você concatenar além de algumas milhares de linhas, deixando seu valor de saída incompleto. Seja cuidadoso.
samthebrand
Usando o Excel 2013 em um poderoso computador com Windows 10 Pro, isso falhou após apenas 30 a 35 linhas. Eu precisava de mais de 200. A solução de Michael Joseph funcionou perfeitamente.
Julgador
75
  • Copie a coluna no Excel
  • Palavra aberta
  • "Colar especial" apenas como texto
  • Selecione os dados no Word (aquele que você precisa converter para o texto separado ,), pressione Ctrl- H(Localizar e substituir)
  • No tipo de caixa "Localizar" ^p
  • Na caixa "Substituir por", digite ,
  • Selecione "Substituir tudo"
Michael Joseph
fonte
+1 O mesmo que a solução "oficial" aqui da Microsoft: support.microsoft.com/kb/819964
Neo
solução muito bonito ... :-)
Saravanan
apenas pura magia :)
Sudheej 24/01
30

Se você possui o Office 365 Excel, pode usar TEXTJOIN ():

=TEXTJOIN(",",TRUE,A:A)

insira a descrição da imagem aqui

Scott Craner
fonte
23

Na verdade, acabei de criar um módulo no VBA, que faz todo o trabalho. Ele pega minha lista à distância e cria uma string delimitada por vírgula que é emitida na célula de minha escolha:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

Então, no meu celular, eu apenas coloco =csvRange(A:A)e isso me dá a lista delimitada por vírgulas.

muncherelli
fonte
1
Ah .. bem perto da minha resposta, mas eu gosto da sua implementação.
mpeterson
10

Uma abordagem alternativa seria colar a coluna do Excel nesta ferramenta no navegador:

convert.town/column-to-comma-separated-list

Ele converte uma coluna de texto em uma lista separada por vírgula.

Como o usuário está copiando e colando em outro programa de qualquer maneira, isso pode ser igualmente fácil para eles.

pôr do sol
fonte
7

Você poderia fazer algo assim. Se você não está falando de uma planilha enorme, isso funcionaria como 'ok' ...

  • Alt-F11, Crie uma macro para criar a lista (veja o código abaixo)
  • Atribua-o ao botão de atalho ou barra de ferramentas
  • O usuário cola sua coluna de números na coluna A, pressiona o botão e sua lista entra na célula B1.

Aqui está o código da macro do VBA:

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

Certifique-se de definir o formato da célula B1 como 'texto' ou você receberá um número errado. Tenho certeza de que você também pode fazer isso no VBA, mas não sei como no momento e preciso voltar ao trabalho. ;)

mpeterson
fonte
7

Use vi ou vim para simplesmente colocar uma vírgula no final de cada linha:

%s/$/,/

Para explicar este comando:

  • % significa executar a ação (ou seja, encontrar e substituir) em todas as linhas
  • s indica substituição
  • /separa os argumentos (ou seja, s/find/replace/options)
  • $ representa o fim de uma linha
  • , é o texto de substituição neste caso
Respiração
fonte
Acordado. Nem mesmo perto.
Muncherelli #
Discordo dos comentários por causa do contexto. Alguém com uma conta de superusuário que posta aqui geralmente é do tipo que usa o vim.
Uniquegeek 01/03
Eu apenas uso o ViM e acho que a idéia básica é útil. Acabei resolvendo o problema usando a ideia e um editor de texto simples.
Nigini
2

Você pode usar o guia do How-To Geek para transformar uma linha em uma coluna e simplesmente invertê-la. Em seguida, exporte os dados como um csv (formato separado por vírgulas) e você terá sua lista separada por vírgulas em texto sem formatação! Você pode copiar do bloco de notas e colocá-lo novamente no Excel, se quiser. Além disso, se você desejar um espaço após a vírgula, poderá fazer um recurso de pesquisa e substituição, substituindo "," por ",". Espero que ajude!

Duall
fonte
Exportar para CSV está além do que esse usuário pode fazer. Eu preciso que ele aponte e clique no excel.
muncherelli 02/02
2

muncherelli, gostei da sua resposta e ajustei-a :). Apenas uma coisa pequena, há momentos em que eu puxo dados de uma planilha e os uso para consultar um banco de dados. Adicionei um parâmetro opcional "textQualify" que ajuda a criar uma lista separada por vírgulas e utilizável em uma consulta.

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function
mitch
fonte
1

Aprimorei o sub generatecsv () para lidar com uma planilha do Excel que contém várias listas com linhas em branco que separam os títulos de cada lista e as listas de seus títulos. exemplo

list title 1

item 1
item 2

list title 2

item 1
item 2

e os combina naturalmente em várias linhas, uma por lista.

Por isso, um cliente me enviou várias palavras-chave em formato de lista para o site com base no assunto e precisava de uma maneira de inserir essas palavras-chave nas páginas da web com facilidade. Então modifiquei a rotina e criei o seguinte, também mudei os nomes das variáveis ​​para meaninful names:

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub
Roger Cordeiro
fonte
1

A resposta do Sux2Lose é o meu método preferido, mas não funciona se você estiver lidando com mais de um par de mil linhas e pode quebrar por ainda menos linhas se o seu computador não tiver muita memória disponível.

A melhor prática nesse caso é provavelmente copiar a coluna, criar uma nova pasta de trabalho, passar por especial A1da nova pasta de trabalho e, Transposeassim, a coluna agora será uma linha. Em seguida, salve a pasta de trabalho como um .csv. Seu csv agora é basicamente uma lista separada por vírgula em texto sem formatação que você pode abrir em um editor de texto.

Nota: Lembre-se de transpor a coluna para uma linha antes de salvar como csv. Caso contrário, o Excel não saberá colocar vírgulas entre os valores.

samthebrand
fonte
-1

Uma das maneiras mais fáceis é usar o aplicativo da web zamazin.co para esse tipo de tarefa de separação de vírgulas. Basta preencher os dados da coluna e pressionar o botão converter para criar uma lista separada por vírgulas. Você pode até usar outras configurações para melhorar a saída desejada.

http://zamazin.co/comma-separator-tool

insira a descrição da imagem aqui

Hakan
fonte
Agora você está no delim.co
Phil
-2

Use =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)na célula que você deseja exibir o resultado.

Johnny
fonte
3
Esta é uma solução manual não escalonável.
Daniel Hári 7/04