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?
| 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.
Trier par colonne A pour regrouper par produit
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)
Identifiez les lignes utiles en entrant dans D2 =A2<>A3
et en les copiant dans D3: D10.
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
Supprimez les lignes inutiles en filtrant FALSE
dans la colonne D avec filtre automatique, puis supprimez ces lignes.
Terminer. La colonne A & C est ce dont vous avez besoin.
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).
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}})
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.
Voici quelques approches, "non-macro" ...
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.
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.