web-dev-qa-db-fra.com

Comment fusionner des lignes d'une colonne dans une cellule Excel?

Par exemple

A1:I
A2:am
A3:a
A4:boy 

Je veux tous les fusionner dans une seule cellule "Iamaboy"
Cet exemple montre que 4 cellules fusionnent en 1 cellule, mais que j'ai plusieurs cellules (plus de 100), je ne peux pas les saisir une par une en utilisant A1 & A2 & A3 & A4 que puis-je faire?

77
red23jordan

Je vous présente ma fonction ConcatenateRange VBA (merci Jean pour le conseil de nommage!). Cela prendra une plage de cellules (n'importe quelle dimension, n'importe quelle direction, etc.) et les fusionnera en une seule chaîne. En tant que troisième paramètre facultatif, vous pouvez ajouter un séparateur (comme un espace ou des virgules sérialisées).

Dans ce cas, vous écririez ceci pour l'utiliser:

=ConcatenateRange(A1:A4)
Function ConcatenateRange(ByVal cell_range As range, _
                    Optional ByVal separator As String) As String

Dim newString As String
Dim cell As Variant

For Each cell in cell_range
    If Len(cell) <> 0 Then
        newString = newString & (separator & cell))
    End if
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(separator)))
End If

ConcatenateRange = newString

End Function
87
aevanko

Si vous préférez le faire sans VBA, vous pouvez essayer les solutions suivantes:

  1. Avoir vos données dans les cellules A1: A999 (ou similaire)
  2. Définissez la cellule B1 sur "= A1"
  3. Définissez la cellule B2 sur "= B1 & A2"
  4. Copiez la cellule B2 jusqu’à B999 (par exemple, en copiant B2, en sélectionnant les cellules B3: B99 et en les collant)

La cellule B999 contient désormais la chaîne de texte concaténée que vous recherchez.

145
Mischinab

Dans CONCATENATE, vous pouvez utiliser TRANSPOSE si vous le développez (F9) puis retirez les {}brackets environnants tels que this recommande

=CONCATENATE(TRANSPOSE(B2:B19))

Devient

=CONCATENATE("Oh ","combining ", "a " ...)

CONCATENATE(TRANSPOSE(B2:B19))

Vous devrez peut-être ajouter votre propre séparateur à la fin, par exemple, créez une colonne C et transposez cette colonne.

=B1&" "
=B2&" "
=B3&" "
39
KCD

Dans des cas simples, vous pouvez utiliser la méthode next qui ne vous oblige pas à créer une fonction ou à copier du code dans plusieurs cellules:

  1. Dans n'importe quelle cellule, écrivez le code suivant

    =Transpose(A1:A9) 
    

Où A1: A9 sont les cellules que vous souhaitez fusionner.

  1. Sans quitter la cellule, appuyez sur F9

Après cela, la cellule contiendra la chaîne:

={A1,A2,A3,A4,A5,A6,A7,A8,A9}

Source: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-Excel/

Mise à jour: une partie peut être ambiguë. Sans quitter la cellule, vous devez avoir votre cellule en mode éditeur. Alternativement, vous pouvez appuyer sur F9 lorsque vous êtes dans le panneau de l'éditeur de cellule (normalement, il se trouve au-dessus de la feuille de calcul)

24
y.selivonchyk

Utilisez la fonction Join déjà existante de VBA. Les fonctions VBA n'étant pas exposées dans Excel, je vais donc envelopper Join dans une fonction définie par l'utilisateur qui expose ses fonctionnalités. La forme la plus simple est:

Function JoinXL(arr As Variant, Optional delimiter As String = " ")
    'arr must be a one-dimensional array.
    JoinXL = Join(arr, delimiter)
End Function

Exemple d'utilisation:

=JoinXL(TRANSPOSE(A1:A4)," ") 

entré sous forme de formule matricielle (en utilisant Ctrl-Shift-Enter).

enter image description here


Maintenant, JoinXL n'accepte que les tableaux à une dimension. Dans Excel, les plages renvoient des tableaux bidimensionnels. Dans l'exemple ci-dessus, TRANSPOSE convertit le tableau bidimensionnel 4 × 1 en un tableau unidimensionnel à 4 éléments (il s'agit du comportement documenté de TRANSPOSE lorsqu'il est alimenté avec un élément à deux colonnes tableau dimensionnel).

Pour une plage horizontale, vous devrez faire un double TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1)))

Le TRANSPOSE intérieur convertit le tableau bidimensionnel 1 × 4 en un tableau bidimensionnel 4 × 1, que le TRANSPOSE extérieur convertit ensuite en un tableau unidimensionnel à 4 éléments attendu.

enter image description here

Cette utilisation de TRANSPOSE est un moyen bien connu de convertir des tableaux 2D en tableaux 1D dans Excel, mais cela semble terrible. Une solution plus élégante consisterait à cacher cela dans la fonction JoinXL VBA.

13

Pour ceux qui ont Excel 2016 (et je suppose les prochaines versions), il existe maintenant directement la fonction CONCAT , qui remplacera la fonction CONCATENATE .

Donc, la manière correcte de le faire dans Excel 2016 est la suivante:

=CONCAT(A1:A4)

qui produira:

Je suis un garçon

Pour les utilisateurs d'anciennes versions d'Excel, les autres réponses sont pertinentes.

9
gvo

Pour Excel 2011 sur Mac, c'est différent. Je l'ai fait en trois étapes.

  1. Créez une colonne de valeurs dans la colonne A.
  2. Dans la colonne B, à droite de la première cellule, créez une règle qui utilise la fonction de concaténation sur la valeur de la colonne et sur ",". Par exemple, en supposant que A1 soit la première ligne, la formule de B1 est =B1. Pour la rangée suivante à la rangée N, la formule est =Concatenate(",",A2). Vous vous retrouvez avec:
 QA 
, Sekuli 
, Tests 
, Applitools 
, Tests visuels 
, Automatisation des tests 
, Sélénium 
  1. Dans la colonne C, créez une formule qui concatène toutes les valeurs précédentes. Parce que c'est additif, vous aurez tout à la fin. La formule pour la cellule C1 est =B1. Pour toutes les autres lignes à N, la formule est =Concatenate(C1,B2). Et vous obtenez:
 QA, Sekuli 
 QA, Sekuli, Testing 
 QA, Sekuli, Testing, Applitools 
 QA, Sekuli, Testing, Applitools, Test visuel 
 QA, Sekuli, Tests, Applitools, Tests visuels, Automatisation des tests 
 QA, Sekuli, Tests, Applitools, Tests visuels, Automatisation des tests, Selenium 

La dernière cellule de la liste sera ce que vous voulez. Ceci est compatible avec Excel sous Windows ou Mac.

3
Chris Riley

J'utilise la méthode CONCATENATE pour prendre les valeurs d'une colonne et en entourer les guillemets avec des colonnes entre les deux afin de renseigner rapidement la clause WHERE IN () d'une instruction SQL.

Je ne fais que taper =CONCATENATE("'",B2,"'",","), puis le sélectionner et le faire glisser vers le bas, ce qui crée =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",","), etc. si nécessaire, éliminant ainsi la séparation des lignes. Cela fonctionne, mais encore une fois, ce n'est pas une bonne solution pour ceux qui en ont besoin tout le temps.

2
GoldPaintedLemons