2011-02-02 16:01:08 +0000 2011-02-02 16:01:08 +0000
132
132

Converter uma coluna em uma lista separada por vírgulas

Tenho a tarefa de criar uma simples planilha Excel que pega um número não especificado de linhas na coluna A como esta:

1234
123461
123151
11321

E transformá-las em uma lista separada por vírgulas em outra célula que o usuário pode facilmente copiar e colar em outro programa como este:

1234,123461,123151,11321

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

Respostas (14)

146
146
146
2011-02-02 16:37:59 +0000

Supondo que os seus dados começam em A1, eu colocaria o seguinte na coluna B:

B1:

=A1

B2:

=B1&","&A2

Pode então colar a coluna B2 em toda a coluna. A última célula da coluna B deve agora ser uma lista separada por vírgulas da coluna A.

76
76
76
2012-06-05 05:24:51 +0000
  • Copie a coluna no Excel
  • Abra o Word
  • “Colar especial” apenas como texto
  • Seleccione os dados no Word (aquele que necessita de converter para texto separado com ,), prima Ctrl-H (Localizar e substituir)
  • Na caixa “Localizar o quê” escreva ^p
  • Na caixa “Substituir por” escreva ,
  • Seleccione “Substituir tudo”.
34
34
34
2017-01-25 18:05:00 +0000
23
23
23
2011-02-03 14:10:54 +0000

Na verdade, acabei de criar um módulo em VBA que faz todo o trabalho. Ele pega na minha lista de caracteres à distância e cria uma string delimitada por vírgulas, que é gerada para a célula da 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 célula, eu simplesmente coloquei =csvRange(A:A) e ele me dá a lista delimitada por vírgulas.

10
10
10
2015-04-22 20:46:58 +0000

Uma abordagem alternativa seria colar a coluna Excel nesta ferramenta in-browser: convert.town/column-to-comma-separated-list

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

Como o utilizador está a copiar e colar para outro programa de qualquer forma, isto pode ser igualmente fácil para eles.

7
7
7
2011-02-06 22:53:14 +0000

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

%s/$/,/

Para explicar este comando:

  • % significa fazer a acção (ou seja, encontrar e substituir) para todas as linhas
  • s indica substituição
  • / separa os argumentos (ou seja, s/find/replace/options)
  • $ representa o final de uma linha
  • , é o texto de substituição neste caso
7
7
7
2011-02-02 19:12:57 +0000

Poderia fazer algo deste género. Se não estás a falar de uma folha de cálculo enorme, isto faria ‘ok’…

  • Alt-F11, Criar uma macro para criar a lista (ver código abaixo)
  • Atribuir ao botão de atalho ou barra de ferramentas
  • O utilizador cola a sua coluna de números na coluna A, carrega no botão, e a sua lista vai para a célula B1.

Aqui está o código da 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 receberá um número confuso. Tenho a certeza que também pode fazer isto em VBA, mas não tenho a certeza de como, de momento, e preciso de voltar ao trabalho ;)

2
2
2
2011-04-08 15:54:06 +0000

muncherelli, gostei da tua resposta, e afinei-a :). Só uma pequena coisa, há alturas em que retiro dados de uma folha e os utilizo para consultar uma base de dados. Adicionei um parâmetro opcional “textQualify” que ajuda a criar uma lista separada por vírgulas utilizável numa 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
2
2
2011-02-02 16:12:16 +0000

Pode utilizar o guia How-To Geek para transformar uma linha numa coluna e simplesmente invertê-lo. Depois exporte os dados como um csv (formato delimitado por vírgulas), e terá a sua lista de texto em formato de vírgulas! Pode copiar do bloco de notas e voltar a colocá-lo no Excel, se quiser. Além disso, se quiser um espaço após a vírgula, pode fazer uma pesquisa e substituir o “,” por “, ”. Espero que isso ajude!

1
1
1
2014-10-06 22:56:30 +0000

A resposta do Sux2Lose é o meu método preferido, mas não funciona se estiver a lidar com mais de alguns milhares de linhas, e pode quebrar por ainda menos linhas se o seu computador não tiver muita memória disponível.

A melhor prática neste caso é provavelmente copiar a coluna, criar uma nova pasta de trabalho, passada especial em A1 da nova pasta de trabalho e Transpose para que a coluna seja agora uma linha. Depois guarde a pasta de trabalho como um .csv. O seu csv é agora basicamente uma lista separada por vírgulas que pode abrir num editor de texto.

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

1
1
1
2011-09-28 17:23:52 +0000

Melhorei o subgrupo generatecsv() para lidar com uma folha de excel que contém múltiplas listas com linhas em branco separando tanto os títulos de cada lista como as listas dos seus títulos. exemplo

list title 1

item 1
item 2

list title 2

item 1
item 2

e combina-os ofcourse em múltiplas linhas, 1 por lista. razão

, pedi a um cliente que me enviasse múltiplas palavras-chave em formato de lista para o seu website com base no assunto, precisava de uma forma fácil de colocar estas palavras-chave nas páginas web. Por isso, modifiquei a rotina e cheguei à seguinte conclusão, também mudei os nomes das variáveis para nomes com significado:

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
0
0
0
2019-11-29 07:33:32 +0000

Fi-lo desta forma

Removi todas as colunas e dados indesejados, depois salvei como ficheiro .csv, depois substituí as vírgulas extra e a nova linha usando o editor Visual Studio Code. Hola

-1
-1
-1
2016-11-02 12:45:34 +0000

Uma das formas mais fáceis é utilizar o zamazin.co web app para este tipo de tarefas de separação de vírgulas. Basta preencher os dados da coluna e pressionar o botão converter para fazer uma lista separada por vírgulas. Você pode até usar algumas outras configurações para melhorar a saída desejada. http://zamazin.co/comma-separator-tool

-2
-2
-2
2011-02-02 16:32:57 +0000

Utilize o =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5) na célula que pretende visualizar o resultado.