Convertir une colonne en une liste séparée par des virgules


129

J'ai pour tâche de créer une feuille Excel simple prenant un nombre non spécifié de lignes dans la colonne A, comme suit:

1234
123461
123151
11321

Et faites-les dans une liste séparée par des virgules dans une autre cellule que l'utilisateur peut facilement copier et coller dans un autre programme comme ceci:

1234,123461,123151,11321

Quelle est la manière la plus simple de faire ça?


8
Une partie de la solution peut être Editer, Coller spécial, Transposer pour convertir la colonne en ligne. Si l'autre programme accepte les tabulations plutôt que les virgules, la configuration est terminée après la copie de la nouvelle ligne.
Arjan

Comment faites-vous le contraire de cela? Prenez une liste séparée par des virgules et convertissez-la en une colonne de contenu?
stevvve

1
@stevvve utilise la fonctionnalité Texte en colonnes dans l'onglet Données. support.microsoft.com/en-us/kb/214261
Trevor

J'utilise n'importe quel éditeur de texte capable d'expression régulière pour cela, comme notepad ++. Copiez les valeurs de colonne et collez-les dans l'éditeur, recherchez et remplacez l'expression régulière, recherchez "\ r \ n", remplacez par ",". Si vous voulez convertir un fichier CSV en colonne, recherchez "," et remplacez-le par "\ r \ n"
junaling le

Réponses:


145

En supposant que vos données commencent en A1, je mettrais ce qui suit dans la colonne B:

B1:

=A1

B2:

=B1&","&A2

Vous pouvez ensuite coller la colonne B2 dans toute la colonne. La dernière cellule de la colonne B devrait maintenant être une liste de la colonne A séparée par des virgules.


8
C'est très bien pour un nombre limité de lignes, mais (en fonction de la mémoire disponible?), Le processus sera interrompu si vous concaténez au-delà de quelques milliers de lignes, laissant votre valeur de sortie incomplète. Faites attention.
Samthebrand

En utilisant Excel 2013 sur un ordinateur Windows 10 Pro puissant, cela a échoué après seulement 30 à 35 lignes. J'avais besoin de plus de 200. La solution de Michael Joseph a parfaitement fonctionné.
Trialsman le

75
  • Copier la colonne dans Excel
  • Ouvrir le mot
  • "Coller spécial" sous forme de texte uniquement
  • Sélectionnez les données dans Word (celles que vous devez convertir en texte séparé par des séparations ,), appuyez sur Ctrl- H(Rechercher & remplacer).
  • Dans la zone "Rechercher" ^p
  • Dans le type de boîte "Remplacer par" ,
  • Sélectionnez "Remplacer tout"

+1 Identique à la solution "officielle" de Microsoft: support.microsoft.com/kb/819964
Neo

solution très mignonne ... :-)
Saravanan

juste de la magie pure :)
Sudheej le

30

Si vous avez Office 365 Excel, vous pouvez utiliser TEXTJOIN ():

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

entrez la description de l'image ici


23

En fait, je viens de créer un module dans VBA qui effectue tout le travail. Il prend ma liste à distance et crée une chaîne délimitée par des virgules qui est sortie dans la cellule de mon choix:

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

Alors, dans ma cellule, je viens de mettre =csvRange(A:A)et cela me donne la liste délimitée par des virgules.


1
Ah… c'est assez proche de ma réponse, mais j'aime bien votre mise en œuvre.
Mpeterson

10

Une autre approche consisterait à coller la colonne Excel dans cet outil intégré au navigateur:

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

Il convertit une colonne de texte en une liste séparée par des virgules.

Comme l'utilisateur copie et colle de toute façon dans un autre programme, cela peut être tout aussi facile pour lui.


7

Vous pouvez faire quelque chose comme ça. Si vous ne parlez pas d'une feuille de calcul énorme, cela fonctionnerait "ok" ...

  • Alt-F11, Créer une macro pour créer la liste (voir le code ci-dessous)
  • L'affecter à un raccourci ou à un bouton de la barre d'outils
  • L'utilisateur colle leur colonne de chiffres dans la colonne A, appuie sur le bouton et leur liste entre dans la cellule B1.

Voici le code 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

Veillez à définir le format de la cellule B1 sur "texte", sinon vous obtiendrez un numéro erroné. Je suis sûr que vous pouvez le faire également dans VBA, mais je ne sais pas comment faire pour le moment et je dois retourner au travail. ;)


7

Utilisez vi ou vim pour simplement placer une virgule à la fin de chaque ligne:

%s/$/,/

Pour expliquer cette commande:

  • % signifie faire l'action (c'est-à-dire, trouver et remplacer) à toutes les lignes
  • s indique une substitution
  • /sépare les arguments (ie, s/find/replace/options)
  • $ représente la fin d'une ligne
  • , est le texte de remplacement dans ce cas

D'accord. Pas même proche.
Muncherelli

En désaccord avec les commentaires en raison du contexte. Quelqu'un avec un compte superutilisateur qui poste ici est souvent le type à utiliser vim.
uniquegeek

J'utilise ViM mais pense que l'idée de base est utile. J'ai fini par résoudre le problème en utilisant l'idée et un simple éditeur de texte.
Nigini

2

Vous pouvez utiliser le guide de How-To Geek pour transformer une ligne en une colonne et l'inverser simplement. Exportez ensuite les données au format csv (format supprimé par des virgules) et vous obtenez votre liste en texte brut séparée par des virgules! Vous pouvez copier du bloc-notes et le remettre dans Excel si vous le souhaitez. En outre, si vous souhaitez laisser un espace après la virgule, vous pouvez effectuer une recherche et remplacer la fonctionnalité, en remplaçant "," par ",". J'espère que ça t'as aidé!


L'exportation au format CSV va au-delà de ce que cet utilisateur peut faire. J'en ai besoin pour pointer et cliquer dans Excel.
muncherelli

2

muncherelli, ta réponse me plaisait et je la peaufine :). Juste une petite chose, il m'est parfois nécessaire d'extraire des données d'une feuille et de les utiliser pour interroger une base de données. J'ai ajouté un paramètre facultatif "textQualify" qui permet de créer une liste séparée par des virgules utilisable dans une requête.

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

J'ai amélioré le sous-générateur generatecsv () pour gérer une feuille Excel contenant plusieurs listes avec des lignes vides séparant à la fois les titres de chaque liste et les listes de leurs titres. exemple

list title 1

item 1
item 2

list title 2

item 1
item 2

et les combine bien sûr en plusieurs rangées, une par liste.

raison, j’ai demandé à un client de m’envoyer plusieurs mots-clés sous forme de liste pour leur site Web en fonction de l’objet, il lui fallait un moyen d’intégrer facilement ces mots-clés dans les pages Web. Ainsi, la routine a été modifiée et les éléments suivants sont apparus. J'ai également remplacé les noms de variables par des noms significatifs:

    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 réponse de Sux2Lose est ma méthode préférée, mais cela ne fonctionne pas si vous avez plus de quelques milliers de lignes et risque de casser encore moins de lignes si votre ordinateur ne dispose pas de beaucoup de mémoire.

La meilleure pratique dans ce cas est probablement de copier la colonne, de créer un nouveau classeur, d’être passé spécial dans A1le nouveau classeur et de Transposefaire en sorte que la colonne soit maintenant une ligne. Enregistrez ensuite le classeur en tant que .csv. Votre csv est maintenant à la base une liste séparée par des virgules en texte brut que vous pouvez ouvrir dans un éditeur de texte.

Remarque: n'oubliez pas de transposer la colonne dans une ligne avant de l'enregistrer en tant que csv. Sinon, Excel ne saura pas insérer de virgule entre les valeurs.


-1

L'un des moyens les plus simples consiste à utiliser l'application Web zamazin.co pour ces tâches de séparation par des virgules. Il suffit de renseigner les données de la colonne et de cliquer sur le bouton de conversion pour créer une liste séparée par des virgules. Vous pouvez même utiliser d'autres paramètres pour améliorer le résultat souhaité.

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

entrez la description de l'image ici


Ceci est maintenant à delim.co
Phil

-2

Utilisez =CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)sur la cellule que vous souhaitez afficher le résultat.


3
C'est une solution manuelle impossible à mesurer.
Daniel Hári
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.