Excel: trouver un sous-ensemble de nombres qui s'ajoutent à un total donné?

Réponses:

25

C'est possible avec le complément Solver *. Les étapes suivantes ont fonctionné pour moi dans Excel 2007 et 2010.

  1. Désigner une cellule pour contenir le résultat (C1 pour cet exemple) - c'est la cellule cible et une colonne qu'Excel peut utiliser pour le travail de grattage (B1: B100 pour cet exemple)
  2. Dans la cellule cible, entrez la formule "= SOMMAIRE (A1: A100, B1: B100)" (sans guillemets). Cela calculera la somme de A1 * B1 + A2 * B2 + ... etc
  3. Sélectionnez Ouvrir le solveur (onglet Données, groupe Analyse)
  4. La cellule cible doit être évidente ($ C $ 1 pour cet exemple)
  5. Pour 'Égal à:', sélectionnez 'Valeur de:' et entrez la valeur souhaitée
  6. Dans "En changeant les cellules", entrez "$ B $ 1: $ B $ 100" (pas de guillemets, et il peut être nécessaire d'initialiser ces valeurs à 0 vous-même)
  7. Ajoutez une contrainte aux cellules qui peuvent être modifiées. Dans le menu déroulant, sélectionnez «bin» (binaire). Cela limite les valeurs de ces cellules à 0 (suppression de la cellule A correspondante de la somme) ou 1 (ajout de la cellule A correspondante à la somme).
  8. Cliquez sur «Résoudre» et attendez. Les nombres qui font partie du sous-ensemble que vous recherchez auront un 1 dans la colonne B

Exemple


Si le solveur prend beaucoup de temps, vous pouvez l'aider en supprimant les lignes qui ne fonctionneront évidemment pas (le total est en dollars, et une seule ligne a des cents non nuls)


Bonus: vous pouvez demander à Excel de mettre automatiquement en surbrillance les cellules que vous recherchez en ajoutant une mise en forme conditionnelle à ces cellules. Sélectionnez toutes les cellules que vous souhaitez formater et à partir de (onglet Accueil) >> (groupe Styles) >> Formatage conditionnel >> Nouvelle règle, sélectionnez 'Utiliser une formule pour déterminer les cellules à formater'. Dans la formule, entrez '= $ B1 = 1' (sans guillemets) qui sera évalué à vrai si la ligne correspondante dans la colonne B est 1. Pour le format, vous pouvez ajouter ce que vous voulez (gras, italique, remplissage vert, etc).

Un autre moyen facile de trouver les lignes importantes est de trier la colonne B Z-> A, et tous les 1 arriveront en haut.


* Le complément du solveur peut être installé avec ces étapes

  1. Cliquez sur le bouton Microsoft Office, puis sur Options Excel.
  2. Cliquez sur Compléments, puis dans la zone Gérer, sélectionnez Compléments Excel.
  3. Cliquez sur Go.
  4. Dans la zone Compléments disponibles, activez la case à cocher Complément Solveur, puis cliquez sur OK. (Si le complément Solver n'est pas répertorié dans la zone Compléments disponibles, cliquez sur Parcourir pour localiser le complément.)
  5. Si vous êtes invité que le complément Solver n'est pas actuellement installé sur votre ordinateur, cliquez sur Oui pour l'installer.
Nate Parsons
la source
1
Dans Excel 2013, vous devez décocher "Ignorer les contraintes entières" dans le menu des options. Sinon, vous obtenez des valeurs non INT pour 0 et 1
Omar Shahine
1
Pour que cela fonctionne correctement: 1. La formule de la cellule C1 doit être sumPRODUCT (et pas seulement la somme) 2. Les cellules de la colonne B doivent toutes avoir une entrée nulle.
Merci! Pour moi, les anciennes étapes fonctionnent toujours, mais j'aime mieux sumproduct car il ne repose pas sur la fonction de formules de tableau.
Nate Parsons
de toute façon pour trouver toutes les combinaisons ... bien qu'il y ait une solution trouvée par solveur .. comment trouver les autres solutions ??? mon tableau est ici: v = [1100, 1105, 11830, 14790, 2325, 2455, 2555, 2935, 3050, 3150, 3185, 3370, 3475, 350, 3530, 3590, 3680, 3745, 885, 9624] sum = 43029 ... solution1 = [350, 1100, 2325, 2455, 2555, 2935, 3150, 3745, 9624, 14790], solution2 = [350, 885, 1100, 1105, 2325, 2455, 2555, 3530, 3590, 3680 , 9624, 11830]
ihightower
2

Il existe un complément Excel à faible coût SumMatch , qui mettra en évidence le sous-ensemble de nombres qui s'ajoutent à une somme cible.

entrez la description de l'image ici

AlSoff
la source
1
Bonjour AIsoft, bonne trouvaille. La prochaine fois, vous pourrez peut-être ajouter plus d'informations.
nixda
@pnuts Ai-je fait une erreur? Je ne comprends pas ce que vous voulez dire avec 30 $ AUD
nixda
@pnuts Ah ok, c'est un bon point.
nixda
6
Note pour moi: 30 $ AUD = 30 dollars américains australiens. Ce n'est pas une référence à une cellule Excel [AUD30] avec une colonne fixe ....: D
nixda
1
Le prix est un inconvénient, tout comme le manque d'instructions claires. Rien de plus que 1 phrase + 1 photo du site Web du produit, vraiment.
Nate Parsons