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

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

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

1234
123461
123151
11321

Et de les transformer en 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 façon la plus simple de faire cela ?

Réponses (14)

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

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 doit maintenant être une liste de la colonne A séparée par des virgules.

76
76
76
2012-06-05 05:24:51 +0000
  • Copiez la colonne dans Excel
  • Ouvrez Word
  • “Coller spécial” comme texte uniquement
  • Sélectionnez les données dans Word (celles que vous devez convertir en texte séparé par ,), appuyez sur Ctrl-H (Rechercher et remplacer)
  • Dans la case “Rechercher quoi” tapez ^p
  • Dans la case “Remplacer par” tapez ,
  • Sélectionnez “Remplacer tout”.
34
34
34
2017-01-25 18:05:00 +0000
23
23
23
2011-02-03 14:10:54 +0000

En fait, je viens de créer un module en VBA qui fait tout le travail. Il prend ma liste classée et crée une chaîne de caractères 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

Donc, dans ma cellule, je mets simplement =csvRange(A:A) et cela me donne la liste délimitée par des virgules.

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

Une autre approche consisterait à coller la colonne Excel dans cet outil de navigation : 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 fait de toute façon des copier-coller dans un autre programme, cela peut être tout aussi facile pour lui.

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

Utilisez vi, ou vim pour placer simplement 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 la substitution
  • / sépare les arguments (c'est-à-dire s/find/replace/options)
  • $ représente la fin d'une ligne
  • , est le texte de remplacement dans ce cas
7
7
7
2011-02-02 19:12:57 +0000

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

  • 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 sa colonne de chiffres dans la colonne A, appuie sur le bouton et sa liste se retrouve 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 sur “texte” ou vous obtiendrez un nombre erroné. Je suis sûr que vous pouvez aussi faire cela en VBA, mais je ne sais pas comment pour le moment, et je dois me remettre au travail ;)

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

muncherelli, j'ai aimé votre réponse, et je l'ai modifiée :). Juste une petite chose, il y a des fois où je tire des données d'une feuille et je les utilise pour interroger une base de données. J'ai ajouté un paramètre optionnel “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
2
2
2
2011-02-02 16:12:16 +0000

Vous pourriez utiliser le guide du Geek How-To pour transformer une ligne en colonne et l'inverser simplement. Exportez ensuite les données en format csv (comma-deliminated format), et vous obtenez votre liste en clair, séparée par des virgules ! Vous pouvez copier à partir du bloc-notes et le remettre dans Excel si vous le souhaitez. De plus, si vous voulez un espace après la virgule, vous pouvez utiliser la fonction de recherche et de remplacement en remplaçant “,” par “,”. J'espère que cela vous aidera !

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

Réponse de Sux2Lose est ma méthode préférée, mais elle ne fonctionne pas si vous avez affaire à plus de deux mille lignes, et peut s'interrompre pour encore 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, de passer en spécial dans A1 du nouveau classeur et Transpose de sorte que la colonne soit maintenant une ligne. Ensuite, enregistrez le classeur en tant que .csv. Votre csv est maintenant une liste en texte clair, séparée par des virgules, que vous pouvez ouvrir dans un éditeur de texte.

Note: N'oubliez pas de transposer la colonne en ligne avant de l'enregistrer en csv. Sinon, Excel ne saura pas mettre des virgules entre les valeurs.

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

J'ai amélioré le sous-ensemble generatecsv() pour gérer une feuille Excel qui contient plusieurs listes avec des lignes vierges 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 lignes, 1 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 du sujet, j'avais besoin d'un moyen de faire entrer ces mots clés dans les pages web facilement. J'ai donc modifié la routine et j'ai obtenu ce qui suit, et 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
0
0
0
2019-11-29 07:33:32 +0000

Je l'ai fait de cette façon

J'ai supprimé toutes les colonnes et données indésirables, puis je les ai enregistrées sous forme de fichier .csv, puis j'ai remplacé les virgules supplémentaires et la nouvelle ligne à l'aide de l'éditeur de code de Visual Studio. Hola

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

L'un des moyens les plus simples est d'utiliser l'application web zamazin.co pour ce genre de tâches de séparation par virgule. Il suffit de remplir les données de la colonne et d'appuyer sur le bouton de conversion pour obtenir 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

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

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