Question 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 non spécifié de lignes dans la colonne A comme ceci:

1234
123461
123151
11321

Et faites-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 manière la plus simple de faire ça?


105
2018-02-02 16:01


origine


Une partie de la solution pourrait être Edit, Paste Special, Transpose pour convertir la colonne en une rangée. Si l'autre programme accepte les tabulations plutôt que les virgules, vous êtes tous définis après avoir copié la nouvelle ligne. - Arjan
Comment faites-vous le contraire? Prenez une liste séparée par des virgules et convertissez-la en une colonne de contenu? - stevvve
@stevvve utilise la fonctionnalité Texte en colonnes dans l'onglet Données. support.microsoft.com/fr-fr/kb/214261 - Trevor
J'utilise n'importe quel éditeur de texte compatible avec les expressions régulières, comme notepad ++. Copiez les valeurs de colonne et collez-le dans l'éditeur, recherchez et remplacez l'expression régulière, recherchez "\ r \ n" remplacez par ",". Si vous souhaitez convertir CSV en colonne, recherchez "," et remplacez par "\ r \ n" - junaling


Réponses:


En supposant que vos données commencent dans A1 je mettrais le suivant 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 séparée par des virgules de la colonne A.


132
2018-02-02 16:37



Ceci est idéal 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


  • Copiez la colonne dans Excel
  • Word ouvert
  • "Coller spécial" en texte seulement
  • Sélectionnez les données dans Word (celle que vous devez convertir en texte séparé par ,), presse Ctrl-H (Rechercher et remplacer)
  • Dans le type de boîte "Trouver quoi" ^p
  • Dans le type de boîte "Remplacer par" ,
  • Sélectionnez "Remplacer tout"

59
2018-06-05 05:24



Cela fonctionne brillamment. Merci! - Michael
+1 Même solution "officielle" ici par Microsoft: support.microsoft.com/kb/819964 - Neo
solution très mignonne ... :-) - Saravanan


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 cela me donne la liste délimitée par des virgules.


21
2018-02-03 14:10



Ah .. assez proche de ma réponse, mais j'aime bien votre implémentation. - mpeterson


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

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

enter image description here


12
2018-01-25 18:05



Parfait! Simple! Merci. - Amy Patterson


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 eux.


9
2018-04-22 20:46





Vous pourriez faire quelque chose comme ça. Si vous ne parlez pas d'une énorme feuille de calcul, cela ferait '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 va 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

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


7
2018-02-02 19:12





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) sur toutes les lignes
  • s indique la substitution
  • / sépare les arguments (à savoir, s/find/replace/options)
  • $ représente la fin d'une ligne
  • , est le texte de remplacement dans ce cas

5
2018-02-06 22:53



D'accord. Pas même proche. - muncherelli
Pas d'accord avec les commentaires en raison du contexte. Quelqu'un avec un compte superutilisateur qui publie ici est souvent du type à utiliser vim. - uniquegeek
J'utilise ViM et 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 éditeur de texte simple. - Nigini


Vous pouvez utiliser le guide How-To Geek pour transformer une ligne en une colonne et inverser la procédure. Puis exportez les données sous forme de fichier CSV (format délimité par des virgules) et vous obtenez votre liste séparée par des virgules en texte brut! Vous pouvez copier 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 faire une recherche et remplacer la fonctionnalité, en remplaçant "," par ",". J'espère que cela pourra aider!


2
2018-02-02 16:12



L'exportation au format CSV dépasse ce que l'utilisateur peut faire. J'en ai besoin pour être pointer et cliquer dans Excel. - muncherelli


muncherelli, j'ai bien aimé ta réponse et je l'ai peaufinée :). Juste une chose mineure, il y a des fois où je tire des données d'une feuille et les utilise 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

2
2018-04-08 15:54





J'ai amélioré le sous-menu generatecsv () pour gérer une feuille Excel contenant 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.

La raison pour laquelle un client m'a envoyé plusieurs mots-clés au format liste pour son site Web en fonction de son sujet, avait besoin d'un moyen d'obtenir facilement ces mots-clés dans les pages Web. Donc modifié la routine et est venu avec ce qui suit, aussi j'ai changé les noms de variables en noms méchants:

    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
2017-09-28 17:23





La réponse de Sux2Lose est ma méthode préférée, mais cela ne fonctionne pas si vous avez affaire à plus de deux mille lignes, et peut-être pour 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 A1 du nouveau classeur et Transpose de sorte que la colonne est maintenant une rangée. Enregistrez ensuite le classeur en tant que .csv. Votre csv est maintenant essentiellement 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 rangée avant de sauvegarder en tant que csv. Sinon, Excel ne saura pas coller les virgules entre les valeurs.


1
2017-10-06 22:56