Excel - valeurs pivot dans une cellule (en tant que valeur séparée par des virgules)

11

Excel - valeurs pivot dans une cellule (en tant que valeur séparée par des virgules)

J'ai deux colonnes de données:

Fournisseur1 | Produit1
Fournisseur1 | Produit2
Fournisseur1 | Produit4
Fournisseur1 | Produit7
Fournisseur2 | Produit3
Fournisseur2 | Produit5

Je veux «pivoter» autour du fournisseur et donner la liste des produits dans une seule cellule, séparés par des virgules, par exemple

Fournisseur1 | Produit1, Produit2, Produit4, Produit7
Fournisseur2 | Produit3, Produit5

Il y a environ 1000 fournisseurs et 0 <produits <= 10.

Ma solution de contournement actuelle consiste à utiliser des tableaux croisés dynamiques, à enregistrer au format CSV, etc. et est très compliquée. Une solution non VBA serait incroyable.

Chris
la source
Vous avez besoin d'une requête SQL pour le faire facilement. Pouvez-vous exporter vers une base de données d'une description?
Rhys Gibson le

Réponses:

23

Voici une solution de table non VBA et non pivot qui n'utilise que quelques formules.

  1. Tout d'abord, j'ai utilisé le "Text-to-columns" pour diviser vos données à ce délimiteur "pipe" (la ligne verticale) en 2 colonnes; une colonne "Fournisseur" et une colonne "Produit". Celles-ci vont dans les colonnes A et B, respectivement. (Il apparaît dans votre message qu'ils sont combinés dans une colonne, donc je les ai d'abord séparés. Vous n'aurez pas à le faire.)

  2. Dans la colonne C, que j'ai nommée colonne "Concaténation", j'ai utilisé cette formule, en commençant dans la cellule C2 et en copiant tout en bas: = IF (A2 = A1, C1 & "," & B2, A2 & "|" & B2)

  3. Dans la colonne D, que j'ai nommée "SupplierChangesAtNextLine?" J'ai utilisé cette formule (commençant en D2 et copiant tout en bas): = IF (A2 = A3, "", "Changed")

  4. Vous devriez maintenant pouvoir filtrer sur la colonne D uniquement les valeurs "modifiées".

Bonne chasse!

F106dart
la source
1
C1  C2  C3          C4
a   1   1   
a   2   2,1 
a   3   3,2,1   
a   5   5,3,2,1 
a   3   3,5,3,2,1   New
b   11  11  
b   13  13,11   
b   11  11,13,11    
b   14  14,11,13,11 New
c   22  22  
c   24  24,22       New
f   25  25  
f   11  11,25   
f   10  10,11,25    New
  1. Dans col3 (signifie C3), utilisez la formule = IF (A2 = A1, B2 & "," & C1, B2) en commençant la cellule C2 et faites-la glisser vers le bas.
  2. en C4 (signifie colonne4), utilisez la formule = IF (A2 = A3, "", "changé") en commençant la cellule D2 et faites-la glisser vers le bas.
  3. Filtrez sur Nouveau sur C4 (signifie col4) et vous obtiendrez le résultat souhaité.
Arghya Tarafdar
la source
0

Ajouter la colonne C comme compteur *: = COUNTIF (A $ 2: A $ 528, A2)
Ajouter D comme incrément * = IF (A2 = A1, D1 + 1, 1)
Ajouter E pour concaténer *: = IF (A1 = A2, E1 & "," & B2, B2)
Ajoutez F pour ne conserver que le dernier enchaînement : = IF (AND (C2 = D2, E4 <> ""), E4, "")
Remarque
ajoutez dans la cellule 2 et tirez vers le bas (ou double-cliquez dans le coin droit) pour appliquer la formule à toutes les cellules de la colonne

copier et coller comme valeurs dans une autre feuille, trier par ordre décroissant par F, supprimer le reste

Conete_Cristian
la source
trop à faire ... La solution de F106dart est plus élégante.
ihightower