Cela semble être un simple tableau croisé dynamique pour apprendre. J'aimerais effectuer un décompte de valeurs uniques pour une valeur particulière sur laquelle je suis groupé.
Par exemple, j'ai ceci:
ABC 123
ABC 123
ABC 123
DEF 456
DEF 567
DEF 456
DEF 456
Ce que je veux, c'est un tableau croisé dynamique qui me montre ceci:
ABC 1
DEF 2
Le tableau croisé dynamique que je crée me donne simplement ceci (nombre de lignes):
ABC 3
DEF 4
Mais je veux plutôt le nombre de valeurs uniques.
Ce que j'essaie vraiment de faire est de déterminer quelles valeurs de la première colonne n'ont pas la même valeur dans la deuxième colonne pour toutes les lignes. En d'autres termes, "ABC" est "bon", "DEF" est "mauvais"
Je suis sûr qu'il existe un moyen plus simple de le faire, mais j'ai décidé d'essayer le tableau croisé dynamique ...
Insérer une 3ème colonne et dans la cellule C2
coller cette formule
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
et le copier. Créez maintenant votre pivot basé sur les 1ère et 3ème colonnes. Voir l'instantané
MISE À JOUR: Vous pouvez le faire maintenant automatiquement avec Excel 2013. Je l'ai créé comme nouvelle réponse car ma réponse précédente résolvait en réalité un problème légèrement différent.
Si vous possédez cette version, sélectionnez vos données pour créer un tableau croisé dynamique. Lorsque vous créez votre tableau, assurez-vous que l'option "Ajouter ces données au modèle de données" est cochée (voir ci-dessous).
Ensuite, lorsque votre tableau croisé dynamique s'ouvre, créez vos lignes, colonnes et valeurs normalement. Cliquez ensuite sur le champ dont vous souhaitez calculer le nombre distinct et modifiez les paramètres de valeur du champ:
Enfin, faites défiler jusqu'à la dernière option et choisissez "Nombre distinct".
Cela devrait mettre à jour les valeurs de votre tableau croisé dynamique pour afficher les données que vous recherchez.
J'aimerais ajouter une option supplémentaire au mélange qui ne nécessite pas de formule, mais qui peut s'avérer utile si vous devez comptabiliser des valeurs uniques au sein de l'ensemble sur deux colonnes différentes. En utilisant l'exemple original, je n'avais pas:
ABC 123
ABC 123
ABC 123
DEF 456
DEF 567
DEF 456
DEF 456
et je veux qu'il apparaisse comme:
ABC 1
DEF 2
Mais quelque chose de plus semblable à:
ABC 123
ABC 123
ABC 123
ABC 456
DEF 123
DEF 456
DEF 567
DEF 456
DEF 456
et voulait qu'il apparaisse comme:
ABC
123 3
456 1
DEF
123 1
456 3
567 1
J'ai trouvé le meilleur moyen d'obtenir mes données dans ce format, puis de pouvoir les manipuler plus avant, c'était d'utiliser les éléments suivants:
Une fois que vous avez sélectionné 'Running total in', choisissez l'en-tête du jeu de données secondaire (dans ce cas, il s'agirait du titre de l'en-tête ou de la colonne du jeu de données comprenant 123, 456 et 567). Cela vous donnera une valeur maximale avec le nombre total d'éléments dans cet ensemble, dans votre ensemble de données primaire.
J'ai ensuite copié ces données, les ai collées sous forme de valeurs, puis les ai placées dans un autre tableau croisé dynamique pour les manipuler plus facilement.
Pour votre information, j'avais environ un quart de million de lignes de données, donc cela fonctionnait beaucoup mieux que certaines des approches de formule, en particulier celles qui essayent de comparer deux colonnes/ensembles de données parce que l'application ne cessait de planter.
La possibilité d'effectuer un "décompte distinct" fait partie d'Excel 2013 mais n'est pas activée automatiquement.
Donc, si vous utilisez une copie Excel 2013, voici une manière brillante de résoudre ce problème sans avoir à passer par une fonction: http://datapigtechnologies.com/blog/index.php/distinct-count-in- tableaux-pivots-enfin-dans-Excel-2013 /
J'ai trouvé que l'approche la plus simple consiste à utiliser l'option Distinct Count
sous Value Field Settings
( à gauche cliquez sur le champ dans le volet Values
). L'option pour Distinct Count
se trouve tout en bas de la liste.
Voici l'avant (TOP; normal Count
normal) et après (BOTTOM; Distinct Count
)
Voir Debra Dalgleish's Count Unique Items
Il n'est pas nécessaire que la table soit triée pour la formule suivante pour renvoyer un 1 pour chaque valeur unique présente.
en supposant que la plage du tableau pour les données présentées dans la question est A1: B7 entrez la formule suivante dans la cellule C1:
=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))
Copiez cette formule dans toutes les lignes et la dernière ligne contiendra:
=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))
Cela se traduit par un 1 renvoyé la première fois qu'un enregistrement est trouvé et par la suite à 0 pour toujours.
Il suffit de résumer la colonne dans votre tableau croisé dynamique
Mon approche de ce problème était un peu différente de celle que je vois ici, alors je vais la partager.
Note: Je voudrais inclure des images pour rendre cela encore plus facile à comprendre, mais je ne peux pas parce que c'est mon premier post;)
La réponse de Siddharth est fantastique.
Cependant , cette technique peut poser problème lorsque vous travaillez avec un grand ensemble de données (mon ordinateur a gelé sur 50 000 lignes). Quelques méthodes moins gourmandes en ressources processeur:
Vérification d'unicité unique
Utilisez une formule qui examine moins de données
=IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1)
Contrôles d'unicité multiples
Si vous devez vérifier l'unicité dans différentes colonnes, vous ne pouvez pas compter sur deux types.
Au lieu,
Ajoutez une formule couvrant le nombre maximum d’enregistrements pour chaque groupe. Si ABC peut avoir 50 lignes, la formule sera
=IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
Excel 2013 peut faire un décompte distinct en pivots. S'il n'y a pas d'accès à 2013 et que la quantité de données est réduite, je fais deux copies des données brutes, et dans la copie b, sélectionnez les deux colonnes et supprimez les doublons. Ensuite, faites le pivot et comptez votre colonne b.
Vous pouvez utiliser COUNTIFS pour plusieurs critères,
= 1/PAYTIFS (A: A, A2, B: B, B2) et faites glisser ensuite. Vous pouvez définir autant de critères que vous le souhaitez, mais le processus prend généralement beaucoup de temps.
Étape 1. Ajouter une colonne
Étape 2. Utilisez la formule = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)
dans le premier enregistrement
Étape 3. Faites-le glisser vers tous les enregistrements.
Étape 4. Filtrez '1' dans la colonne avec la formule
Vous pouvez également utiliser pour la colonne auxiliaire VLOOKUP
. J'ai testé et semble un peu plus rapide que COUNTIF
.
Si vous utilisez un en-tête et que les données commencent dans la cellule A2
, alors, dans n'importe quelle cellule de la ligne, utilisez cette formule et copiez-la dans toutes les autres cellules de la même colonne:
=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)
J'ai l'habitude de trier les données par le champ dont j'ai besoin pour faire le nombre distinct de puis utiliser IF (A2 = A1,0,1); vous obtenez alors un 1 dans la rangée supérieure de chaque groupe d'identifiants. Simple et ne prend pas de temps à calculer sur de grands ensembles de données.
Si vous avez les données triées .. je suggère d'utiliser la formule suivante
=IF(OR(A2<>A3,B2<>B3),1,0)
Ceci est plus rapide car il utilise moins de cellules à calculer.
Vous pouvez créer une colonne supplémentaire pour stocker l'unicité, puis ajouter la somme que dans votre tableau croisé dynamique.
Ce que je veux dire, c'est que la cellule C1
devrait toujours être 1
. La cellule C2
devrait contenir la formule =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)
. Copiez cette formule pour que la cellule C3
contienne =IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)
et ainsi de suite.
Si vous avez une cellule d'en-tête, vous voudrez tout déplacer d'une rangée vers le bas et votre formule C3
devra être =IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)
.