Convertir una columna en una lista separada por comas


129

Tengo la tarea de crear una hoja de Excel simple que tome un número no especificado de filas en la Columna A de esta manera:

1234
123461
123151
11321

Y conviértalos en una lista separada por comas en otra celda que el usuario pueda copiar y pegar fácilmente en otro programa de la siguiente manera:

1234,123461,123151,11321

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


8
Parte de la solución podría ser Editar, Pegar Especial, Transponer para convertir la columna en una fila. Si el otro programa acepta pestañas en lugar de comas, entonces está todo listo después de copiar la nueva fila.
Arjan

¿Cómo haces lo contrario de esto? ¿Tomar una lista separada por comas y convertirla en una columna de contenido?
stevvve

1
@stevvve usa la función Texto a columnas en la pestaña de datos. support.microsoft.com/en-us/kb/214261
Trevor

Utilizo cualquier editor de texto con capacidad de expresión regular para esto, como notepad ++. Copie los valores de columna y péguelo en el editor, busque y reemplace la expresión regular, busque "\ r \ n" reemplace con ",". Si desea convertir CSV a columna, busque "," y reemplácelo con "\ r \ n"
junining

Respuestas:


145

Suponiendo que sus datos comiencen en A1, pondría lo siguiente en la columna B:

B1:

=A1

B2:

=B1&","&A2

Luego puede pegar la columna B2 en toda la columna. La última celda de la columna B ahora debería ser una lista separada por comas de la columna A.


8
Esto es excelente para un número limitado de filas, pero (¿dependiendo de la memoria disponible?) El proceso se interrumpirá si está concatenando más allá de un par de miles de filas, dejando su valor de salida incompleto. Ten cuidado.
samthebrand

Al usar Excel 2013 en una potente computadora con Windows 10 Pro, esto falló después de solo 30-35 líneas. Necesitaba más de 200. La solución de Michael Joseph funcionó perfectamente.
Juzgado

75
  • Copie la columna en Excel
  • Palabra abierta
  • "Pegado especial" solo como texto
  • Seleccione los datos en Word (el que necesita convertir a texto separado ,), presione Ctrl- H(Buscar y reemplazar)
  • En el cuadro "Buscar qué" escriba ^p
  • En el tipo de cuadro "Reemplazar con" ,
  • Seleccione "Reemplazar todo"

+1 Igual que la solución "oficial" de Microsoft aquí: support.microsoft.com/kb/819964
Neo

solución muy linda ... :-)
Saravanan

simplemente pura magia :)
Sudheej

30

Si tiene Office 365 Excel, puede usar TEXTJOIN ():

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

ingrese la descripción de la imagen aquí


23

De hecho, acabo de crear un módulo en VBA que hace todo el trabajo. Toma mi lista a distancia y crea una cadena delimitada por comas que se envía a 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, solo pongo =csvRange(A:A)y me da la lista delimitada por comas.


1
Ah ... bastante cerca de mi respuesta, pero me gusta su implementación.
mpeterson 03 de

10

Un enfoque alternativo sería pegar la columna de Excel en esta herramienta en el 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 a otro programa de todos modos, esto puede ser igual de fácil para ellos.


7

Podrías hacer algo como esto. Si no está hablando de una gran hoja de cálculo, esto funcionaría 'ok' ...

  • Alt-F11, Crear una macro para crear la lista (ver código a continuación)
  • Asignarlo al acceso directo o al botón 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 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

Asegúrese de establecer el formato de la celda B1 en 'texto' o obtendrá un número desordenado. Estoy seguro de que también puedes hacer esto en VBA, pero no estoy seguro de cómo hacerlo en este momento, y necesito volver a trabajar. ;)


7

Use vi o vim para simplemente colocar una coma al final de cada línea:

%s/$/,/

Para explicar este comando:

  • % significa hacer la acción (es decir, buscar y reemplazar) en 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 reemplazo en este caso

Convenido. Ni siquiera cerca.
muncherelli

No estoy de acuerdo con los comentarios debido al contexto. Alguien con una cuenta de superusuario que publica aquí suele ser del tipo que usa vim.
uniquegeek

Pero uso ViM y creo que la idea básica es útil. Terminé resolviendo el problema usando la idea y un simple editor de texto.
Nigini

2

Puede usar la guía How-To Geek para convertir una fila en una columna y simplemente invertirla. Luego exporte los datos como un csv (formato delimitado por comas), ¡y tendrá su lista separada por comas de texto sin formato! Puede copiar desde el bloc de notas y volver a ponerlo en Excel si lo desea. Además, si desea un espacio después de la coma, puede hacer una función de búsqueda y reemplazo, reemplazando "," con ",". ¡Espero que ayude!


Exportar a CSV está más allá de lo que este usuario puede hacer. Necesito que sea apuntar y hacer clic dentro de Excel.
muncherelli

2

muncherelli, me gustó tu respuesta, y la modifiqué :). Solo una cosa menor, hay veces que extraigo datos de una hoja y los uso para consultar una base de datos. Agregué un parámetro opcional "textQualify" que ayuda a crear una lista separada por comas utilizable 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

1

Mejoré el subgenerador generatecsv () 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, por supuesto, los combina en varias filas, 1 por lista.

Por eso, un cliente me envió varias palabras clave en formato de lista para su sitio web en función del tema, necesitaba una forma de introducir estas palabras clave en las páginas web fácilmente. Entonces modifiqué la rutina y se me ocurrió lo siguiente, también cambié los nombres de las variables a nombres significativos:

    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 respuesta de Sux2Lose es mi método preferido, pero no funciona si se trata de más de un par de miles de filas, y puede dividirse por menos filas si su computadora no tiene mucha memoria disponible.

La mejor práctica en este caso es probablemente copiar la columna, crear un nuevo libro de trabajo, especial pasado A1del nuevo libro de trabajo y Transposeque la columna sea ahora una fila. Luego guarde el libro como .csv. Su csv ahora es básicamente una lista separada por comas de texto sin formato que puede abrir en un editor de texto.

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


-1

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 complete los datos de la columna y presione el botón de conversión para hacer una lista separada por comas. Incluso puede usar otras configuraciones para mejorar la salida deseada.

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

ingrese la descripción de la imagen aquí


Esto está ahora en delim.co
Phil

-2

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


3
Esta es una solución manual no escalable.
Daniel Hári
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.