Converti una colonna in un elenco separato da virgole


129

Ho il compito di creare un semplice foglio Excel che accetta un numero non specificato di righe nella colonna A in questo modo:

1234
123461
123151
11321

E trasformali in un elenco separato da virgole in un'altra cella che l'utente può facilmente copiare e incollare in un altro programma in questo modo:

1234,123461,123151,11321

Qual è il modo più semplice per farlo?


8
Parte della soluzione potrebbe essere Modifica, Incolla speciale, Trasponi per convertire la colonna in una riga. Se l'altro programma accetta le schede anziché le virgole, allora sei pronto per copiare la nuova riga.
Arjan,

Come si fa il contrario? Prendere un elenco separato da virgole e convertirlo in una colonna di contenuto?
Stevvve,

1
@stevvve usa la funzione Testo in colonne nella scheda dati. support.microsoft.com/en-us/kb/214261
Trevor

Per questo uso qualsiasi editor di testo capace di espressioni regolari, come notepad ++. Copia i valori delle colonne e incollali nell'editor, cerca e sostituisci le espressioni regolari, trova "\ r \ n" sostituisci con ",". Se vuoi convertire CSV in colonna, trova "," e sostituiscilo con "\ r \ n"
giugno

Risposte:


145

Supponendo che i tuoi dati inizino in A1, inserisco quanto segue nella colonna B:

B1:

=A1

B2:

=B1&","&A2

È quindi possibile incollare la colonna B2 lungo l'intera colonna. L'ultima cella nella colonna B dovrebbe ora essere un elenco separato da virgole della colonna A.


8
Questo è ottimo per un numero limitato di righe, ma (a seconda della memoria disponibile?) Il processo si interromperà se si sta concatenando oltre un paio di migliaia di righe, lasciando il valore di output incompleto. Stai attento.
samthebrand,

Utilizzando Excel 2013 su un potente computer Windows 10 Pro, questo non è riuscito dopo solo 30-35 righe. Ne avevo bisogno di ben oltre 200. La soluzione di Michael Joseph ha funzionato perfettamente.
Trialsman il

75
  • Copia la colonna in Excel
  • Parola aperta
  • "Incolla speciale" solo come testo
  • Seleziona i dati in Word (quello che devi convertire in testo separato ,), premi Ctrl- H(Trova e sostituisci)
  • Nel tipo di casella "Trova cosa" ^p
  • Nella casella "Sostituisci con" digitare ,
  • Seleziona "Sostituisci tutto"

+1 Come la soluzione "ufficiale" qui di Microsoft: support.microsoft.com/kb/819964
Neo

soluzione molto carina ... :-)
Saravanan,

solo pura magia :)
Sudheej,

30

Se si dispone di Office 365 Excel, è possibile utilizzare TEXTJOIN ():

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

inserisci qui la descrizione dell'immagine


23

In realtà ho appena creato un modulo in VBA che fa tutto il lavoro. Prende il mio elenco a distanza e crea una stringa delimitata da virgole che viene emessa nella cella di mia scelta:

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

Quindi, nella mia cella, ho appena messo =csvRange(A:A)e mi dà l'elenco delimitato da virgole.


1
Ah .. abbastanza vicino alla mia risposta, ma mi piace la tua implementazione.
mpeterson,

10

Un approccio alternativo sarebbe quello di incollare la colonna di Excel in questo strumento nel browser:

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

Converte una colonna di testo in un elenco separato da virgole.

Dato che l'utente sta comunque copiando e incollando su un altro programma, questo potrebbe essere altrettanto facile per loro.


7

Potresti fare qualcosa del genere. Se non stai parlando di un grande foglio di calcolo, questo funzionerebbe "ok" ...

  • Alt-F11, Crea una macro per creare l'elenco (vedi codice sotto)
  • Assegnalo al collegamento o al pulsante della barra degli strumenti
  • L'utente incolla la colonna di numeri nella colonna A, preme il pulsante e il loro elenco va nella cella B1.

Ecco il codice 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

Assicurati di impostare il formato della cella B1 su "testo" o otterrai un numero incasinato. Sono sicuro che puoi farlo anche in VBA, ma non sono sicuro di come al momento, e devo tornare al lavoro. ;)


7

Usa vi o vim per posizionare semplicemente una virgola alla fine di ogni riga:

%s/$/,/

Per spiegare questo comando:

  • % significa eseguire l'azione (ovvero trovare e sostituire) su tutte le linee
  • s indica la sostituzione
  • /separa gli argomenti (cioè, s/find/replace/options)
  • $ rappresenta la fine di una linea
  • , è il testo sostitutivo in questo caso

Concordato. Neanche vicino.
Muncherelli,

Non sono d'accordo con i commenti a causa del contesto. Qualcuno con un account superutente che pubblica qui è spesso il tipo da usare vim.
uniquegeek,

Ma uso ViM e penso che l'idea di base sia utile. Ho finito per risolvere il problema usando l'idea e un semplice editor di testo.
Nigini

2

Puoi usare la guida di How-To Geek per trasformare una riga in una colonna e semplicemente invertirla. Quindi esporta i dati in formato CSV (formato delimitato da virgole) e avrai il tuo elenco separato da virgole in testo normale! Puoi copiare dal blocco note e rimetterlo in Excel se lo desideri. Inoltre, se si desidera uno spazio dopo la virgola, è possibile eseguire una funzione di ricerca e sostituzione, sostituendo "," con ",". Spero che aiuti!


L'esportazione in CSV va oltre ciò che questo utente può fare. Ho bisogno che sia point and click all'interno di Excel.
Muncherelli,

2

muncherelli, mi è piaciuta la tua risposta, e l'ho modificata :). Solo una cosa minore, ci sono volte in cui estraggo i dati da un foglio e li utilizzo per interrogare un database. Ho aggiunto un parametro "textQualify" facoltativo che consente di creare un elenco separato da virgole utilizzabile in una query.

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

1

Ho migliorato il sub generatecsv () per gestire un foglio Excel che contiene più elenchi con righe vuote che separano sia i titoli di ciascun elenco che gli elenchi dai rispettivi titoli. esempio

list title 1

item 1
item 2

list title 2

item 1
item 2

e li combina naturalmente in più righe, 1 per elenco.

motivo, avevo un cliente che mi inviava più parole chiave in formato elenco per il proprio sito Web in base all'argomento, era necessario un modo per ottenere facilmente queste parole chiave nelle pagine Web. Quindi ho modificato la routine e mi è venuto in mente quanto segue, inoltre ho cambiato i nomi delle variabili in nomi significativi:

    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

1

La risposta di Sux2Lose è il mio metodo preferito, ma non funziona se hai a che fare con più di duemila righe e potrebbe interrompersi per un numero ancora inferiore di righe se il tuo computer non ha molta memoria disponibile.

La migliore pratica in questo caso è probabilmente quella di copiare la colonna, creare una nuova cartella di lavoro, passato speciale nella A1nuova cartella di lavoro e in Transposemodo che la colonna sia ora una riga. Quindi salvare la cartella di lavoro come a .csv. Il tuo csv ora è fondamentalmente un elenco separato da virgole di testo normale che puoi aprire in un editor di testo.

Nota: ricordarsi di trasporre la colonna in una riga prima di salvare come CSV. Altrimenti Excel non saprà incollare le virgole tra i valori.


-1

Uno dei modi più semplici è utilizzare l'app Web zamazin.co per questo tipo di attività di separazione delle virgole. Basta compilare i dati della colonna e premere il pulsante di conversione per creare un elenco separato da virgole. È anche possibile utilizzare alcune altre impostazioni per migliorare l'output desiderato.

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

inserisci qui la descrizione dell'immagine


Questo è ora su delim.co
Phil

-2

Utilizzare =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)sulla cella in cui si desidera visualizzare il risultato.


3
Questa è una soluzione manuale non scalabile.
Daniel Hári,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.