web-dev-qa-db-fra.com

Sélection d'une colonne spécifique d'une plage nommée pour la fonction SUMIF

J'essaie de créer une fonction SUMIF qui additionne dynamiquement les valeurs dans une colonne spécifique d'une plage nommée dans ma feuille Excel.

Il est très facile de le faire lorsqu'il n'y a pas de plage nommée:

enter image description here

La formule sélectionne toutes les cellules qui contiennent "Londres" dans leur nom et résume les dépenses liées à Londres.

Ce que j'essaie de faire est d'utiliser une plage nommée appelée TripsData (A2: B5) et de dire à la fonction SUMIF de additionner les entrées de la colonne 2 de cette plage qui répondent au critère d'avoir Londres à leur nom.

Comment puis-je faire fonctionner cela sans avoir besoin de créer une deuxième plage nommée pour la colonne 2 et simplement en disant à Excel de regarder dans la colonne spécifiée de cette plage nommée? Index/Match ne renvoie qu'une seule valeur afin que cela ne fonctionne pas lorsqu'il y a plusieurs cellules avec London dans leur nom.

Merci de votre aide!

10
Cla Rosie

Utilisez INDEX pour faire référence à une colonne spécifique dans la plage nommée (il peut faire référence à une colonne entière), comme ceci

=SUMIF(TripsData,"*London*",INDEX(TripsData,,2))
14
chris neilsen

Vous pouvez le faire sans aucune plage nommée, si vous transformez vos données en un objet Tableau Excel. Sélectionnez une cellule dans la plage ou la plage entière et cliquez sur Insérer> Tableau ou appuyez sur Ctrl-T.

Il y aura une boîte de dialogue qui vous demandera si votre table a des en-têtes. Le vôtre le fait. Vous pouvez maintenant référencer la table et ses colonnes par leurs noms inhérents et créer votre formule comme ceci:

=SUMIF(Table1[Expense],"*London*",Table1[Cost])

enter image description here

Vous pouvez bien sûr renommer le tableau, même une fois la formule en place. Lorsque vous cliquez sur une cellule du tableau, un nouveau ruban s'affiche pour les commandes qui concernent uniquement les tableaux. C'est un outil très puissant.

Toutes les formules, mises en forme, etc. qui s'appliquent à une colonne de tableau entière seront automatiquement reportées dans les nouvelles lignes du tableau. La référence de colonne de table s'ajustera aussi automatiquement, bien sûr, afin que vous n'ayez pas à vous soucier des noms de plage dynamique ou à redéfinir à quoi s'applique une plage nommée.

Remarque: la formule utilise un référencement structuré au lieu des adresses de cellule. Cette option peut être désactivée en cliquant sur Fichier> Options> Formules> cochez ou décochez "Utiliser les noms de table dans les formules"

4
teylyn

Vous pouvez utiliser l'idée de Chris de Index(Table1,,Col#) avec la plage nommée "Table1" (sans créer un objet de tableau Excel si vous ne le souhaitez pas pour une raison quelconque) et TOUJOURS éviter le problème mentionné par Applez dans le commentaire ci-dessous L'idée de Chris. Applez avertit que l'utilisation d'une constante pour une référence de numéro de colonne est dangereuse si vous insérez ultérieurement une autre colonne avant cette colonne dans la plage nommée. Vous constaterez qu'Excel n'incrémente PAS automatiquement la constante, de sorte que votre formule se casse.

Applez a raison ..... alors N'UTILISEZ PAS une constante, utilisez un numéro de colonne "référence" à la place d'une constante. Par exemple....

=SUMIF(TripsData,"*London*",INDEX(TripsData,,Column(B1)))

Si vous insérez plus tard une colonne entre A et B, Excel VA incrémenter automatiquement la référence Column(B1) à Column(C1). Ne supprimez simplement pas B1 Ou Row 1 Ou vous obtiendrez une erreur REF. J'utilise généralement l'en-tête/tuile "cellule" (quelle que soit la ligne qui s'y trouve) pour cette colonne de tableau dans la référence de la colonne (car il est très peu probable que je supprime jamais la cellule d'en-tête/titre de la colonne d'un tableau, sauf si je supprime toute la colonne). Dans cet exemple particulier, il s'avère que B1 "EST" la cellule de titre/en-tête de cette colonne dans le tableau de données. C'est donc ce que j'ai utilisé pour l'exemple.

1
user11929574