Questão Converter uma coluna em uma lista separada por vírgulas


Eu tenho a tarefa de criar uma planilha simples do Excel que leva um número não especificado de linhas na Coluna A assim:

1234
123461
123151
11321

E faça-os em uma lista separada por vírgula em outra célula que o usuário possa facilmente copiar e colar em outro programa da seguinte forma:

1234,123461,123151,11321

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


105


origem


Parte da solução pode ser Edit, Paste Special, Transpose para converter a coluna em uma linha. Se o outro programa aceitar Tabs, em vez de vírgulas, estará tudo pronto depois de copiar a nova linha. - Arjan
Como você faz o oposto disso? Pegue uma lista separada por vírgulas e converta-a em uma coluna de conteúdo? - stevvve
@stevvve usa o recurso Texto para Colunas na guia de dados. support.microsoft.com/en-us/kb/214261 - Trevor
Eu uso qualquer editor de texto capaz de expressão regular para isso, como o notepad ++. Copie os valores das colunas e cole-o no editor, pesquise e substitua a expressão regular, localize "\ r \ n" substitua por ",". Se você quiser converter CSV em coluna, encontre "," e substitua por "\ r \ n" - junaling


Respostas:


Supondo que seus dados iniciem em A1, 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 deve agora ser uma lista separada por vírgulas da coluna A.


132



Isso é ótimo para um número limitado de linhas, mas (dependendo da memória disponível?) O processo será interrompido se você estiver concatenando além de algumas mil linhas, deixando o valor de saída incompleto. Seja cuidadoso. - samthebrand


  • Copie a coluna no Excel
  • Palavra Aberta
  • "Colar especial" apenas como texto
  • Selecione os dados no Word (aquele que você precisa converter em texto separado ,) pressione Ctrl-H (Localizar e substituir)
  • No tipo de caixa "Encontrar o que" ^p
  • No tipo de caixa "Substituir por" ,
  • Selecione "Substituir tudo"

59



Isso funciona brilhantemente. Obrigado! - Michael
+1 Igual à solução "oficial" aqui da Microsoft: support.microsoft.com/kb/819964 - Neo
solução muito fofa ... :-) - Saravanan


Na verdade, acabei de criar um módulo no VBA que faz todo o trabalho. Ele pega minha lista de variáveis ​​e cria uma string delimitada por vírgula que é enviada para a 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, na minha cela, acabei de colocar =csvRange(A:A) e me fornece a lista delimitada por vírgula.


21



Ah ... bem perto da minha resposta, mas gosto da sua implementação. - mpeterson


Se você tiver o Office 365 Excel, poderá usar o TEXTJOIN ():

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

enter image description here


12



Perfeito! Simples! Obrigado. - Amy Patterson


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

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

Converte uma coluna de texto em uma lista separada por vírgulas.

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


9





Você poderia fazer algo assim. Se você não está falando sobre uma planilha enorme, isso seria "ok" ...

  • Alt-F11, Cria uma macro para criar a lista (veja o código abaixo)
  • Atribua-o ao atalho ou ao botão da 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 de macro 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 para 'texto' ou você receberá um número confuso. Tenho certeza de que você também pode fazer isso no VBA, mas não sei como, no momento, e preciso voltar ao trabalho. ;)


7





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

%s/$/,/

Para explicar este comando:

  • % significa fazer a ação (ou seja, localizar e substituir) para todas as linhas
  • s indica substituição
  • / separa os argumentos (por exemplo, s/find/replace/options)
  • $ representa o fim de uma linha
  • , é o texto de substituição neste caso

5



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 o tipo de usar o vim. - uniquegeek
Eu 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


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


2



Exportar para CSV está além do que esse usuário pode fazer. Eu preciso que seja ponto e clique dentro do excel. - muncherelli


muncherelli, eu gostei da sua resposta, e eu ajustei isso :). Apenas uma coisa pequena, há momentos em que eu puxo dados de uma planilha e a utilizo para consultar um banco de dados. Eu adicionei um parâmetro opcional "textQualify" que ajuda a criar uma lista separada por vírgula 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

2