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.


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!


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é.

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


trop à faire ... La solution de F106dart est plus élégante.
ihightower
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.