Regrouper les étiquettes et concaténer leurs valeurs de texte (comme un tableau croisé dynamique)


22

J'ai une feuille de calcul avec des données comme celle-ci:

Produit | Attribut
---------- + ----------
Produit A | Cyan
Produit B | Cyan
Produit C | Cyan
Produit A | Magenta
Produit C | Magenta
Produit B | Jaune
Produit C | Jaune
Produit A | Noir
Produit B | Noir

Ce que je voudrais faire, regroupez tout par colonne A et que la colonne B soit une liste de valeurs séparées par des virgules qui partagent la colonne A en commun, comme ceci:

Produit | Attribut
---------- + --------------------------
Produit A | Cyan, magenta, noir
Produit B | Cyan, jaune, noir
Produit C | Cyan, magenta, jaune, noir

Malheureusement, les tableaux croisés dynamiques savent uniquement comment travailler avec des valeurs numériques, et le plus loin dans ce sens est de compter le nombre de fois où la colonne A se produit.

J'ai finalement réussi à le faire en important les données dans une base de données MySQL et en utilisant la GROUP_CONCAT(Attribute)fonction de MySQL dans une requête avec une GROUP BY Productclause, mais après m'être cogné la tête sur mon bureau à plusieurs reprises tout en essayant de trouver une solution Excel.

Pour référence future, est-ce possible dans Excel sans macros? Que ce soit ou non, comment pourrait-on y arriver?

Réponses:


31
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

En supposant que la ligne 1: 1 est la ligne d'en-tête.

  1. Trier par colonne A pour regrouper par produit

  2. Préparez les données dans un format séparé par des virgules dans la colonne C en entrant dans C2 la formule suivante et copiez-la dans C3: C10.

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. Identifiez les lignes utiles en entrant dans D2 =A2<>A3et copiez-les vers D3: D10.

  4. Copiez la colonne C: D, puis collez spéciale comme valeur ( AltE- S- V- Enter). Vous obtiendrez maintenant:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. Supprimez les lignes inutiles en filtrant la FALSEcolonne D avec AutoFilter, puis supprimez ces lignes.

  6. Terminez . La colonne A & C est ce dont vous avez besoin.


1
C'est utiliser votre imagination! Félicitations!
jorgebg

Bien que cela fonctionne, les temps ont changé depuis 2012. Recherchez ci-dessous une nouvelle réponse qui utilise le complément PowerQuery (qui est intégré à Excel 2016). Ça ne pourrait pas être plus facile. Eh bien, peut-être parler à l'ordinateur et lui demander de "grouper mes données!" Peut-être dans 6 ans.
ripvlan

11

Je sais que c'est un ancien poste mais j'ai eu ce défi aujourd'hui. J'ai utilisé le complément PowerQuery de Microsoft (REMARQUE: il est intégré à Excel 2016 par défaut).

  1. Sélectionnez votre table
  2. Sous l'onglet POWER QUERY (ou DATA en 2016), sélectionnez "From Table"
  3. Cliquez sur la colonne "Produit"
  4. sous l'onglet Transformer, sélectionnez "Grouper par"
  5. Dans l'onglet Affichage, assurez-vous que "Barre de formule" est cochée
  6. Changer la formule

    DE:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    À:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    Cliquez ici pour une photo illustrant les étapes d'en haut

L'étape 6 exploite les formules Power Query (M) pour effectuer des manipulations de données non exposées via les opérations de base fournies dans l'interface utilisateur. Microsoft dispose d'une référence complète disponible en ligne pour toutes les fonctions avancées disponibles dans Power Query.


Solution très élégante, probablement la meilleure de toutes.
asdmin

@matt pologne, je me demande si vous savez comment supprimer également les valeurs en double le long de la ligne en utilisant cette astuce plutôt géniale?
Lana B

À l'ÉTAPE 1 (après avoir sélectionné le tableau), vous devriez pouvoir accéder à l'onglet Données du ruban et cliquer sur "Supprimer les doublons".
Matt Poland

Il existe une autre option dans Power Query si vous ne souhaitez pas modifier votre table d'origine. Après l'étape 2, vous pouvez maintenir CTRL et cliquer sur les deux colonnes afin qu'elles soient toutes les deux sélectionnées. Ensuite, vous cliquez avec le bouton droit sur l'une des colonnes et sélectionnez "Supprimer les doublons". Passez ensuite à l'ÉTAPE 3.
Matt Poland

Je vous remercie! C'est la meilleure réponse. Pour ceux qui utilisent Excel 2016, PowerQuery est intégré. Appuyez simplement sur l'onglet Données, puis appuyez sur "À partir du tableau / de la plage" dans la section "Obtenir et transformer les données". L'éditeur de requête de puissance s'ouvre, appuyez sur l'onglet Affichage et activez la barre de formule. Le reste des instructions fonctionne tel quel.
ripvlan

3

Voici quelques approches, toutes deux "non macro" ...

  1. Avec un petit ensemble de données, après avoir d'abord trié par produit (similaire à GROUP BY Product), vous pouvez d'abord copier la colonne "Produit", la coller ailleurs, puis supprimer les doublons. Ensuite, copiez les «Attributs» pour chaque produit et «coller spécial, TRANSPOSE» à côté de chaque produit. Ensuite, concaténez une virgule avec chacun de vos attributs transposés dans une colonne de résultats finale. Certes, tout ce "copier / coller spécial / transposer" deviendrait vieux rapidement si vous avez une longue liste de Produits.

  2. Si vous avez beaucoup de données, en utilisant quelques formules, vous pouvez progresser vers le résultat final, comme indiqué ci-dessous. Les formules en F2, G2, H2, I2 et N2 sont indiquées par les flèches bleues. Copiez-les dans les lignes ci-dessous si nécessaire. Notez que J2: L2 utilise la même formule que I2. En outre, la formule F2 fait référence à une gamme nommée "Produits" qui s'étend sur la gamme A: A.

entrez la description de l'image ici


Ce sont de bonnes solutions, mais seulement si l'ensemble de données est petit, comme vous le dites. Merci!
p0lar_bear
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.