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

Convertir una columna en una lista separada por comas

Tengo la tarea de crear una simple hoja de Excel que toma un número no especificado de filas en la Columna A así:

1234
123461
123151
11321

Y convertirlas en una lista separada por comas en otra celda que el usuario puede copiar y pegar fácilmente en otro programa así:

1234,123461,123151,11321

¿Cuál es la manera más fácil de hacer esto?

Respuestas (14)

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

Asumiendo que sus datos empiezan en A1 yo pondría lo siguiente en la columna B:

B1:

=A1

B2:

=B1&","&A2

Puedes entonces pegar la columna B2 por toda la columna. La última celda de la columna B debe ser ahora una lista separada por comas de la columna A.

76
76
76
2012-06-05 05:24:51 +0000
  • Copiar la columna en Excel
  • Abrir Word
  • “Pegado especial” como sólo texto
  • Seleccionar los datos en Word (los que necesita convertir en texto separados con ,), pulsar Ctrl-H (Buscar y reemplazar)
  • En la casilla “Buscar qué” escribir ^p
  • En la casilla “Reemplazar con” escribir ,
  • Seleccionar “Reemplazar todo”
34
34
34
2017-01-25 18:05:00 +0000
23
23
23
2011-02-03 14:10:54 +0000

En realidad acabo de crear un módulo en VBA que hace todo el trabajo. Toma mi lista de rangos y crea una cadena delimitada por comas que se imprime en la celda de mi elección:

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

Entonces en mi celda, sólo pongo =csvRange(A:A) y me da la lista delimitada por comas.

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

Un enfoque alternativo sería pegar la columna de Excel en esta herramienta del navegador: convert.town/column-to-comma-separated-list

Convierte una columna de texto en una lista separada por comas.

Como el usuario está copiando y pegando en otro programa de todos modos, esto puede ser igual de fácil para ellos.

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

Usa vi, o vim para simplemente poner una coma al final de cada línea:

%s/$/,/

Para explicar este comando:

  • % significa hacer la acción (es decir, encontrar y reemplazar) a todas las líneas
  • s indica sustitución
  • / separa los argumentos (es decir, s/find/replace/options)
  • $ representa el final de una línea
  • , es el texto de sustitución en este caso
7
7
7
2011-02-02 19:12:57 +0000

Podrías hacer algo así. Si no se trata de una enorme hoja de cálculo, esto funcionaría ‘bien’…

  • Alt-F11, Crear un macro para crear la lista (ver código más abajo)
  • Asignarlo al botón de atajo o de la barra de herramientas
  • El usuario pega su columna de números en la columna A, presiona el botón, y su lista va a la celda B1.

Aquí está el código del 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

Asegúrate de establecer el formato de la celda B1 a ‘texto’ o tendrás un número desordenado. Estoy seguro de que puedes hacer esto en VBA también, pero no estoy seguro de cómo por el momento, y necesito volver al trabajo. ;)

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

Muncherelli, me gustó tu respuesta, y la ajusté :). Sólo una cosa menor, hay veces que saco datos de una hoja y los uso para consultar una base de datos. Añadí un parámetro opcional “textQualify” que ayuda a crear una lista separada por comas que se puede usar en una 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

Podrías usar la guía de How-To Geek para convertir una fila en una columna y simplemente invertirla. Luego exporta los datos como un csv (formato delimitado por comas), ¡y tendrás tu lista de texto plano separado por comas! Puedes copiar del bloc de notas y volver a ponerlo en Excel si quieres. Además, si quieres un espacio después de la coma, puedes hacer una búsqueda y reemplazar la característica, reemplazando “,” por “, ”. ¡Espero que eso ayude!

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

(https://superuser.com/a/240880/90963) es mi método preferido, pero no funciona si se trata de más de un par de miles de filas, y puede romperse por menos filas si el ordenador no tiene mucha memoria disponible.

La mejor práctica en este caso es probablemente copiar la columna, crear un nuevo libro de trabajo, pasado especial en A1 del nuevo libro de trabajo y Transpose para que la columna sea ahora una fila. Luego guardar el libro de trabajo como .csv. Tu csv es ahora básicamente una lista separada por comas de texto plano que puedes abrir en un editor de texto.

Nota: Recuerda transponer la columna en una fila antes de guardarla como csv. De lo contrario, Excel no sabrá cómo pegar comas entre los valores.

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

Mejoré la sub-generacióncsv() para manejar una hoja de Excel que contiene múltiples listas con líneas en blanco que separan tanto los títulos de cada lista como las listas de sus títulos. ejemplo

list title 1

item 1
item 2

list title 2

item 1
item 2

y las combina por supuesto en múltiples filas, 1 por lista.

por lo tanto, tuve un cliente que me envió múltiples palabras clave en formato de lista para su sitio web basado en el tema, necesitaba una manera de conseguir estas palabras clave en las páginas web fácilmente. Así que modifiqué la rutina y se me ocurrió lo siguiente, también cambié los nombres de las variables a nombres con 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

Lo hice de esta manera

Removí todas las columnas y datos no deseados, luego guardé como archivo .csv, luego reemplacé las comas extras y la nueva línea usando el editor de código de Visual Studio. Hola

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

Una de las formas más fáciles es usar la aplicación web zamazin.co para este tipo de tareas de separación de comas. Simplemente rellena los datos de la columna y pulsa el botón de conversión para hacer una lista separada por comas. Incluso puedes usar algunos otros ajustes para mejorar la salida deseada. http://zamazin.co/comma-separator-tool

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

Use =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5) en la celda en la que quiera mostrar el resultado.