web-dev-qa-db-fra.com

Concaténation par lots de chaînes dans Excel

J'ai quelques centaines de cellules dans Excel que je voudrais concaténer en une seule chaîne. Pour ce faire, existe-t-il une méthode plus simple que de les parcourir un à un manuellement afin de les saisir dans CONCATENATE(A1, A2, ....)?

CONCATENATE(A1:A255) ne fonctionne pas.

29
Green Demon

* Dans un nouvel onglet, tapez A1 dans la cellule A1,

* Type A2 dans la cellule A2

* Utilisez des séries de remplissage pour compléter les valeurs de la colonne A

* Type A1 dans la cellule B1

  • Utilisez ce forum dans la cellule B2

    = B1 & "," & A2

  • Copiez la formule.

Copiez et collez des valeurs pour récupérer la chaîne de valeurs que vous avez créée.

A1  A1
A2  A1,A2
A3  A1,A2,A3
A4  A1,A2,A3,A4
A5  A1,A2,A3,A4,A5
A6  A1,A2,A3,A4,A5,A6
A7  A1,A2,A3,A4,A5,A6,A7
A8  A1,A2,A3,A4,A5,A6,A7,A8
A9  A1,A2,A3,A4,A5,A6,A7,A8,A9
A10 A1,A2,A3,A4,A5,A6,A7,A8,A9,A10
34
James Jenkins

Appuyez sur Alt-F11, insérez un nouveau module, collez le code ci-dessous.

Public Function concatRange(data As Range, Optional sep As String = "") As String
    Dim ret As String
    Dim sep2 As String
    ret = ""
    sep2 = ""

    For Each cell In data
        ret = ret & sep2 & cell.Value
        sep2 = sep
    Next cell

    concatRange = ret
End Function

Usage:

=concatRange(A8:D11;", ")    'OS with ; list separator
=concatRange(A8:D11,", ")    'OS with , list separator or in a macro code

ou

=concatRange(A8:D11)
13
dedek

Voir ce billet de blog ici: http://www.dullsharpness.com/2011/11/14/Excel-vba-range-to-csv-range2csv-function/

Vous pouvez l'utiliser comme ça, par exemple avec un séparateur de tuyau:

=Range2Csv(A1:A255,"|")

Accédez à votre éditeur VBA en utilisant Alt+F11 et déposez-le dans un module.

L'extrait de code est ici:

Option Explicit
'**********************************************
'* PURPOSE: Concatenates range contents into a
'*          delimited text string
'*
'* FUNCTION SIGNATURE: Range2Csv(Range, String)
'*
'* PARAMETERS:
'*    Range  - the range of cells whose contents
'*             will be included in the CSV result
'*    String - delimiter used to separate values
'*             (Optional, defaults to a comma)
'*
'* AUTHOR: www.dullsharpness.com
'*
'* NOTES: [add'l notes removed for brevity]
'*
'**********************************************
Public Function Range2Csv(inputRange As Range, Optional delimiter As String)
  Dim concattedList As String 'holder for the concatted CSVs
  Dim rangeCell As Range      'holder cell used in For-Each loop
  Dim rangeText As String     'holder for rangeCell's text

  'default to a comma delimiter if none is provided
  If delimiter = "" Then delimiter = ","

  concattedList = ""          'start with an empty string

  'Loop through each cell in the range to append valid contents
  For Each rangeCell In inputRange.Cells

    rangeText = rangeCell.Value 'capture the working value

    'Only operate on non-blank cells (i.e. Length > 0)
    If Len(rangeText) > 0 Then
      'Strip any delimiters contained w/in the value itself
      rangeText = WorksheetFunction.Substitute(rangeText, delimiter, "")

      If (Len(concattedList) > 0) Then
        'prepend a delimiter to the new value if we
        'already have some list items
        concattedList = concattedList + delimiter + rangeText
      Else
        'else if the list is blank so far,
        'just set the first value
        concattedList = rangeText
      End If
    End If

  Next rangeCell

  'Set the return value
  Range2Csv = concattedList

End Function
8
Marc

concaténer (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a14, a16, a16, a17, a19, a20, a21, a22, a22, a23, a24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35, A36, A37, A38, A39, A40, A42, A42, A44, A45, A46, A47, A47, A48, A49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a63, a64, a65, a65, a67, a67, a69, a60, a60, a61 A75, A76, A77, A78, A79, A80, A81, A82, A83, A84, A85, A86, A87, A88, A89, A90, A92, A92, A94, A95, A96, A97, A97, A98, A98, a100, a101, a102, a103, a104, a105, a106, a107, a107, a108, a109, a110, a110, a111, a112, a115, a115, a116, a117, a118, a119, a119, a119 a125, a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a135, a136, a138, a139, a140, a141, a142, a143, a143, a146, a146, a146, a146, a146 a150, a151, a152, a153, a154, a155, a156, a157, a158, a159, a160, a161, a162, a163, a165, a166, a167, a167, a168, a169, a169, a162, a172, a172 a175, a176, a177, a178, a179, a180, a181, a182, a183 , a184, a185, a186, a187, a188, a189, a190, a191, a192, a193, a194, a195, a195, a196, a197, a199, a200, a202, a202, a203, a203, a205, a205, a205, a , a209, a210, a211, a212, a213, a214, a215, a216, a217, a218, a219, a220, a221, a222, a224, a225, a226, a227, a228, a229, a230, a232, , a234, a235, a236, a237, a238, a239, a240, a241, a242, a243, a244, a244, a245, a246, a247, a248, a249, a242, a242, a242, a243, a244, a244, a244, a246

PowerShell il!

"concatenate(a$((1..255) -join ', a'))" | clip

Ouvrir le fichier texte copier et coller

"Pour sélectionner rapidement des cellules, vous pouvez appuyer sur CTRL et cliquer sur les cellules à inclure dans la fonction de concaténation . Exemple, Sélectionner une cellule Type = concaténer (dans la barre de formuleAppuyez sur et maintenez le bouton CTRL enfoncé et cliquez sur les cellules à inclure . Relâchez le bouton CTRL Type) dans la barre de formule et appuyez sur Entrée "

7
E.V.I.L.

Cette fonction VBA concaténera le contenu des cellules, avec un séparateur facultatif, si nécessaire. Copiez-le dans un module standard:

  Option Explicit

  Function Concat(CellRange As Range, Optional Delimiter As String) As String 
 ' this function will concatenate a range of cells and return the result as a single string
 ' useful when you have a large range of cells that you need to concatenate
 ' source: http://chandoo.org/wp/2008/05/28/how-to-add-a-range-of-cells-in-Excel-concat/

  Dim retVal As String, dlm As String, cell As Range
  retVal = ""
  If Delimiter = Null Then
      dlm = ""
  Else
    dlm = Delimiter
  End If
  For Each cell In CellRange
      If CStr(cell.Value) <> "" And CStr(cell.Value) <> " " Then
          retVal = retVal & CStr(cell.Value) & dlm
      End If
  Next
  If dlm <> "" Then
      retVal = Left(retVal, Len(retVal) - Len(dlm))
  End If
  Concat = retVal
End Function
3
chuff

Ma méthode préférée consiste à copier-coller les valeurs dans un éditeur qui autorise les expressions régulières, puis à supprimer les onglets (ou espaces) avec une recherche et un remplacement de ma sélection actuelle. 

Vous pouvez également l'utiliser pour insérer des virgules, des espaces ou tout ce que vous voulez. 

C'est un tonne plus rapide que de taper =concatenate(A1,",","A2",",",......)

2
kmort

Si vous recherchez une approche purement Excel (c'est-à-dire sans VBA), la méthode proposée par James Jenkins est la meilleure . Si vous préférez utiliser VBA, ouvrez l'éditeur VBA, ajoutez un nouveau module et ajoutez le code suivant:

Option Explicit

Public Function JoinText(cells As Variant,Optional delim_str As String) As String
    If cells.Columns.count < cells.Rows.count Then
       JoinText = Join(WorksheetFunction.Transpose(cells), delim_str)
    Else
       JoinText = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(cells)), delim_str)
    End If
End Function

Pour ouvrir l'éditeur VBA, appuyez facilement sur Alt-F11 . Pour insérer un module, cliquez avec le bouton droit de la souris sur le classeur répertorié dans la fenêtre 'Projet'.

La fonction est appelée depuis Excel comme suit:

=JoinText(A1:C1)

Si vous souhaitez ajouter un délimiteur (par exemple une virgule):

=JoinText(A1:C1,",")

Le but de l’utilisation de la fonction transposée est de transformer le tableau 2D, les «cellules», en tableau 1D. La raison pour cela est que la fonction VBA Join accepte uniquement un tableau 1d . La raison de l’utilisation de deux d’entre elles est que si JoinText examine une ligne de cellules (qui n’est encore qu’un tableau 2D), le premier appel à transpose, transpose ce tableau de rangées 2D en un tableau de colonnes 2D, le deuxième appel le transforme en tableau 1D.

2
user425678

Ce n'est pas purement Excel, mais il existe un moyen facile de le faire avec Word.

  1. Sélectionnez les cellules que vous souhaitez concaténer et copiez/collez-les dans Word. Cela crée une table.
  2. Sélectionnez la table entière.
  3. Convertissez le tableau en texte. Utilisez des marques de paragraphe (ou quelque chose d'autre qui n'apparaît pas dans votre texte) comme séparateurs.
  4. Sélectionnez tout le texte.
  5. Utilisez Remplacer pour supprimer les marques de paragraphe. (Dans la zone "Rechercher", entrez ^ p. Laissez la zone "Remplacer par" vide.)
1
Ronald Bourret

Si vous avez Excel 2016, vous pouvez utiliser une formule matricielle:

Entrer 

= concat (a1: a255)

dans la cellule, puis appuyez sur

[ctrl] + [shift] + [enter]

1
user6654769

Sans vergogne copié depuis ce site :

  1. Sélectionnez la cellule où vous avez besoin du résultat.
  2. Allez à la barre de formule et entrez ... "= A1: A5"
  3. Sélectionnez la formule entière et appuyez sur F9 (cela convertit la formule en valeurs).
  4. Supprimer les accolades des deux extrémités.
  5. Ajoutez = CONCATENATE (au début du texte et terminez-le par un crochet rond).
  6. Appuyez sur Entrée.

Ce qui est particulièrement révélateur ici, c'est que lors de la modification d'une formule, une pression sur F9 remplace la formule par le résultat de cette formule. Là où c'est une plage, il la remplace par une liste du contenu de cette plage.

0
Steve Melnikoff

où les valeurs que vous souhaitez concaténer commencent à la ligne 2, colonne 3 de votre feuille

Sub GOWN()
roww = 2
Do While cells(roww, 2) <> ""
    aa = cells(roww, 3)
    dd = dd & aa & ","
    roww = roww + 1
Loop
cells(roww + 1, 3) = dd
End Sub
0
Fraser Porter

Ajoutez simplement votre déliminateur dans une concaténation:

=concatenate(A1, ",")

Copiez ensuite toutes les concaténations, collez-les en tant que valeurs. Copiez ensuite ces valeurs, collez-les dans une transposition. Copiez ensuite les valeurs transposées et collez-les dans un éditeur Word. Faites une recherche pour le déliminateur ET l’espace précédant les valeurs et remplacez-le par JUST le déliminateur. Cela devrait vous donner une chaîne concaténée de toutes les valeurs avec un délimiteur. C'est beaucoup plus facile que d'autres options.

0
John Lehrkind