2017-09-01 1 views
1

J'essaie de créer une liste de noms qui répètent un certain nombre de fois, en fonction d'une autre variable. En gros, si je donne les résultats suivants:Excel pour retourner la liste des éléments avec une répétition spécifique

Column A Column B 
Amy   5 
John   2 
Carl   3 

le résultat serait:

  • Amy
  • Amy
  • Amy
  • Amy
  • Amy
  • Carl
  • Carl
  • Carl
  • John
  • John

J'ai construit la liste initiale à l'aide de l'indice-petite Countif, méthode, pour obtenir une liste alphabétique et distincte, puis une autre formule pour déterminer le nombre fois chaque élément répète. Je sais que je dois utiliser une sorte d'index/offset par rapport aux lignes, mais je n'arrive pas à le faire fonctionner correctement. La liste est dynamique et change tous les jours, donc retaper manuellement la liste chaque jour entraînerait trop d'erreur humaine et de temps (la liste est d'environ 50 éléments distincts, avec un nombre total de lignes à la fin d'environ 400). En fin de compte, la liste sera utilisée pour un certain nombre de sumproduct/vlookups. Je peux le faire assez rapidement dans VBA, mais les utilisateurs de ce document ne font pas toujours confiance à VBA et essayer de les faire fonctionner à chaque fois n'est pas quelque chose qui fonctionne.

Nous vous remercions de votre aide!

+0

Recevez un nouvel utilisateur? Est-ce une option? – JNevill

+0

Parfois, je souhaite vraiment que c'était ... – mjohnson

Répondre

1

Basé sur votre table:

+---+------+---+ 
| | A | B | 
+---+------+---+ 
| 1 | Amy | 5 | 
| 2 | John | 2 | 
| 3 | Carl | 3 | 
+---+------+---+ 

Dans la colonne C coller un "0" à C4 et formule =B1+C2 copie vers le bas juste avant le 0:

+---+------+---+----+ 
| | A | B | C | 
+---+------+---+----+ 
| 1 | Amy | 5 | 10 | 
| 2 | John | 2 | 5 | 
| 3 | Carl | 3 | 3 | 
| 4 |  | | 0 | 
+---+------+---+----+ 

Maintenant, nous avons une limite supérieure de la ligne que chaque valeur doit être placée sur laquelle nous pouvons utiliser une formule Match() qui va alimenter une formule Index().

Dans une nouvelle colonne (j'utilise E) E1: =INDEX($A$1:$A$3,MATCH(ROW(),$C$1:$C$3,-1),1) et recopient

+----+------+---+----+--+------+ 
| | A | B | C | D | E | 
+----+------+---+----+--+------+ 
| 1 | Amy | 5 | 10 | | Carl | 
| 2 | John | 2 | 5 | | Carl | 
| 3 | Carl | 3 | 3 | | Carl | 
| 4 |  | | 0 | | John | 
| 5 |  | | | | John | 
| 6 |  | | | | Amy | 
| 7 |  | | | | Amy | 
| 8 |  | | | | Amy | 
| 9 |  | | | | Amy | 
| 10 |  | | | | Amy | 
+----+------+---+----+--+------+ 

La liste est en arrière à cause de ce farfelu arrière de 0 chose que nous avons fait dans la colonne C. Ceci est à faire que Match() dernier paramètre de -1 (supérieur à) fonctionnent correctement.

J'imagine qu'avec un peu de peaufinage cela pourrait être fait un peu plus propre, mais cela devrait vous mettre dans l'ordre du jour.

Bien que je serais toujours un grand partisan de trouver des utilisateurs qui sont capables d'activer les macros. Pouah.

+0

Incroyable! Merci beaucoup! Je l'ai un peu modifié pour le mettre dans le bon ordre. Fondamentalement résumer la colonne B, puis j'ai ajusté la partie Match à = .... MATCH (SUM (B: B) - ROW(), ... – mjohnson

+1

Oui, cela fait beaucoup de sens. Je l'ai abandonné à deux reprises en quelques minutes, mais ça ne cessait de me déranger, alors quand je l'ai craqué (en arrière), je ne l'ai pas fait. pas sur le point de risquer un refactoring. – JNevill