web-dev-qa-db-fra.com

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

J'ai un tableur 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 regroupe tout dans la colonne A et fait en sorte que la colonne B soit une liste de valeurs délimitées par des virgules qui partagent la colonne A en commun, comme suit:

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

Malheureusement, les tableaux croisés dynamiques ne savent utiliser que les valeurs numériques et le plus loin, c'est le nombre de fois où la colonne A est comptabilisée.

Je pouvais y arriver en important en important les données dans une base de données MySQL et en utilisant la fonction GROUP_CONCAT(Attribute) de MySQL dans une requête avec une clause GROUP BY Product, mais après me cogner la tête à plusieurs reprises en tentant 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 retirer cela?

20
p0lar_bear
   |     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 en format séparé par des virgules dans la colonne C en entrant dans C2 la formule suivante et en la recopiant dans C3: C10.

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. Identifiez les lignes utiles en entrant dans D2 =A2<>A3 et en les copiant dans D3: D10.

  4. Copier la colonne C: D, puis coller spécial en tant que valeur (AltE-S-V-Enter). Vous allez maintenant obtenir:

    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 FALSE dans la colonne D avec filtre automatique, puis supprimez ces lignes.

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

29
wilson

Je sais que c'est un ancien poste, mais j'avais ce défi aujourd'hui. J'ai utilisé le complément de 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. Sur 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}})
    

    Click here for picture depicting steps from above

L'étape 6 utilise 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.

10
Matt Poland

Voici quelques approches, "non-macro" ...

  1. Avec un petit ensemble de données, après le 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" de chaque produit et "Pâte spéciale, TRANSPOSE" à côté de chaque Produit. Puis concaténez une virgule avec chacun de vos attributs transposés dans une colonne de résultats finaux. Certes, tous ces "copier/coller spécial/transposer" vieilliraient rapidement si vous avez une longue liste de produits.

  2. Si vous avez beaucoup de données, à l'aide de quelques formules, vous pouvez obtenir le résultat final, comme indiqué ci-dessous. Les formules de 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 plage nommée "Produits" qui couvre la plage A: A.

enter image description here

3
F106dart