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

J'ai la tâche de créer une feuille Excel simple qui prend un nombre indéterminé de lignes dans la colonne A comme ceci:

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, de la manière suivante:

 1234,123461,123151,11321 

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

En supposant que vos données commencent en A1, je mettrai les éléments suivants dans la colonne B:

B1:

 =A1 

B2:

 =B1&","&A2 

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

  • Copier la colonne dans Excel
  • Open Word
  • "Coller spécial" en tant que texte seulement
  • Sélectionnez les données dans Word (celle que vous devez convertir en texte séparé avec , ), appuyez sur CtrlH (Rechercher et remplacer)
  • Dans la zone «Trouver quoi», tapez ^p
  • Dans le type de boîte "Remplacer par" ,
  • Sélectionnez "Remplacer tout"

En fait, je viens de créer un module dans VBA qui fait 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 ça me donne la liste délimitée par des virgules.

Une autre approche serait de coller la colonne Excel dans cet outil dans le 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 collage dans un autre programme de toute façon, cela peut être aussi simple pour eux.

Vous pourriez 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)
  • Affectez-le au raccourci ou au bouton de la barre d'outils
  • L'utilisateur colle sa colonne de nombres dans la colonne A, appuie sur le bouton et sa liste passe dans la cellule B1.

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

Assurez-vous de définir le format de la cellule B1 en «texte» ou vous obtiendrez un numéro de messe. Je suis sûr que vous pouvez le faire dans VBA, mais je ne suis pas sûr de savoir à l'heure actuelle, et je dois revenir au travail. 😉

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

 %s/$/,/ 

Pour expliquer cette commande:

  • % Signifie faire l'action (c.-à-d. Trouver et remplacer) à toutes les lignes
  • s indique le remplacement
  • / Sépare les arguments (c'est-à-dire s/find/replace/options )
  • $ Représente la fin d'une ligne
  • , Est-ce que le texte de remplacement dans ce cas

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

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

Entrez la description de l'image ici

Vous pouvez utiliser le guide How-To Geek pour transformer une ligne en une colonne et l'inverser simplement. Ensuite, exportez les données en tant que csv (format délimité par des virgules), et vous avez votre liste séparée par des virgules clair. Vous pouvez copier à partir du bloc-notes et le remettre dans Excel si vous le souhaitez. En outre, si vous voulez un espace après la virgule, vous pouvez faire une fonction de recherche et de remplacement, en remplaçant "," par ",". J'espère que cela pourra aider!

Muncherelli, j'ai aimé ta réponse, et je l'ai réglé :). Juste une chose mineure, il y a des fois que je tire les données d'une feuille et l'utilise pour interroger une base de données. J'ai ajouté un paramètre optionnel "textQualify" qui aide à créer une liste séparée par virgule utilisable dans une requête.

 Function csvRange(myRange As Range, Optional textQualify As String) 'eg 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 

J'ai amélioré le sous generatecsv () pour gérer une feuille Excel qui contient plusieurs listes avec des lignes vierges séparant 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 entre autres en plusieurs lignes, 1 par liste.

Par conséquent, j'avais un client qui m'a envoyé plusieurs mots-clés en format de liste pour leur site web en fonction de la matière, besoin d'un moyen d'obtenir facilement ces mots clés dans les pages Web. Donc a modifié la routine et a proposé les éléments suivants, j'ai également changé les noms de variables en 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 

La réponse de Sux2Lose est ma méthode préférée, mais cela ne fonctionne pas si vous avez affaire à plus d'un millier de lignes, et que vous risquez de faire moins de lignes si votre ordinateur n'a pas beaucoup de mémoire disponible.

La meilleure pratique dans ce cas est probablement de copier la colonne, de créer un nouveau classeur, d'avoir passé dans A1 du nouveau classeur et de Transpose pour que la colonne soit maintenant une ligne. Ensuite, enregistrez le classeur sous la forme .csv . Votre csv est maintenant essentiellement une liste séparée par des virgules en texte clair 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 coller les virgules entre les valeurs.

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

L'un des moyens les plus faciles est d'utiliser l'application web zamazin.co pour ce type de tâches séparant des virgules. Remplissez simplement les données de la colonne et appuyez 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 la sortie souhaitée.

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

Entrez la description de l'image ici