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

Convertire una colonna in una lista separata da virgole

Ho il compito di creare un semplice foglio Excel che prende un numero imprecisato di righe nella colonna A come questa:

1234
123461
123151
11321

e le trasforma in una lista separata da virgole in un'altra cella che l'utente può facilmente copiare e incollare in un altro programma come questo:

1234,123461,123151,11321
``` &001 


Qual è il modo più semplice per farlo?

Risposte (14)

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

Supponendo che i vostri dati partano da A1 metterei nella colonna B:

B1:

=A1

B2:

=B1&","&A2
``` &001 


È quindi possibile incollare la colonna B2 in tutta la colonna. L'ultima cella della colonna B dovrebbe ora essere una lista separata da virgole della colonna A.
76
76
76
2012-06-05 05:24:51 +0000
  • Copiare la colonna in Excel
  • Aprire Word
  • “Incolla speciale” come solo testo
  • Selezionare i dati in Word (quello da convertire in testo separato con ,), premere Ctrl-H (Trova & sostituisci)
  • Nel riquadro “Trova cosa” tipo ^p
  • Nel riquadro “Sostituisci con” tipo ,
  • Selezionare “Sostituisci tutto”.
34
34
34
2017-01-25 18:05:00 +0000
23
23
23
2011-02-03 14:10:54 +0000

In realtà ho appena creato un modulo in VBA che fa tutto il lavoro. Prende la mia lista 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à la lista delimitata da virgole.

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

Un approccio alternativo sarebbe quello di incollare la colonna di Excel in questo strumento in-browser: convert.town/column-to-comma-separated-list

Converte una colonna di testo in una lista separata da virgole.

Poiché l'utente sta comunque copiando e incollando in un altro programma, questo può essere altrettanto facile per loro.

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

Usare vi, o vim per mettere semplicemente una virgola alla fine di ogni riga:

%s/$/,/

Per spiegare questo comando:

  • % significa fare l'azione (cioè, trovare e sostituire) a tutte le righe
  • s indica la sostituzione
  • / indica la sostituzione
  • s/find/replace/options separa gli argomenti (cioè, $)
  • , rappresenta la fine di una riga
  • &007 è il testo di sostituzione in questo caso
7
7
7
2011-02-02 19:12:57 +0000

Si potrebbe fare una cosa del genere. Se non si tratta di un enorme foglio di calcolo, questo funzionerebbe “ok”…

  • Alt-F11, Crea una macro per creare la lista (vedi codice qui sotto)
  • Assegnala al pulsante di scelta rapida o alla barra degli strumenti
  • L'utente incolla la sua colonna di numeri nella colonna A, preme il pulsante, e la sua lista va nella cella B1.

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

Assicuratevi di impostare il formato della cella B1 su ‘testo’ o otterrete un numero incasinato. Sono sicuro che si può fare anche in VBA, ma non sono sicuro di come al momento, e devo tornare al lavoro. ;)

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

muncherelli, mi è piaciuta la tua risposta e l'ho ritoccata :). Solo una piccola cosa, ci sono volte che tiro fuori i dati da un foglio e li uso per interrogare un database. Ho aggiunto un parametro opzionale “textQualify” che aiuta a creare una lista separata 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
2
2
2
2011-02-02 16:12:16 +0000

Si potrebbe usare la guida How-To Geek per trasformare una riga in una colonna e semplicemente invertirla. Poi esportate i dati in formato csv (formato delimitato da virgole), e avrete la vostra lista in chiaro con le virgole! Potete copiarla dal blocco note e rimetterla in excel se volete. Inoltre, se volete uno spazio dopo la virgola, potete fare una funzione di ricerca e sostituzione, sostituendo “,” con “, ”, “. Spero che aiuti!

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

Risposta di Sux2Lose è il mio metodo preferito, ma non funziona se si ha a che fare con più di un paio di migliaia di righe, e può rompersi per ancora meno righe se il 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 in A1 della nuova cartella di lavoro e Transpose in modo che la colonna è ora una riga. Quindi salvare la cartella di lavoro come .csv. Il vostro csv è ora fondamentalmente una lista separata da virgole di testo che potete aprire in un editor di testo.

Nota: Ricordatevi di trasporre la colonna in una riga prima di salvare come csv. In caso contrario Excel non saprà di attaccare le virgole tra i valori.

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

Ho migliorato il sub generatecsv() per gestire un foglio excel che contiene liste multiple con righe vuote che separano sia i titoli di ogni lista che le liste dai loro titoli. esempio

list title 1

item 1
item 2

list title 2

item 1
item 2
``` ```
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

e le combina naturalmente in più righe, 1 per lista.

motivo, ho avuto un cliente che mi ha inviato più parole chiave in formato lista per il suo sito web in base all'argomento, aveva bisogno di un modo per ottenere queste parole chiave nelle pagine web facilmente. Così ho modificato la routine e mi sono inventato quanto segue, inoltre ho cambiato i nomi delle variabili in nomi significativi:

&001

0
0
0
2019-11-29 07:33:32 +0000

L'ho fatto in questo modo

Ho rimosso tutte le colonne e i dati indesiderati, poi ho salvato come file .csv, poi ho sostituito le virgole extra e la nuova riga con l'editor di codici di Visual Studio. Hola

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

Uno dei modi più semplici è quello di utilizzare l'applicazione web zamazin.co per questo tipo di attività che separano le virgole. Basta compilare i dati della colonna e premere il pulsante di conversione per creare una lista separata da virgole. È anche possibile utilizzare alcune altre impostazioni per migliorare l'output desiderato. http://zamazin.co/comma-separator-tool

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

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