J'ai une table de type base de données dans Excel 2003, avec une ligne d'en-tête unique contenant des filtres automatiques à la ligne 6 et les données de la ligne 7 à la ligne 160. Les lignes 1 à 5 représentent le titre de la feuille, les titres des groupes de colonnes et les instructions que je ne peux pas. se débarrasser de.
J'affiche également les fonctions SUM(X6:X160)
et SUBTOTAL(109,X6:X160)
dans cette zone pour les colonnes numériques. Je ne souhaite pas afficher cela au bas du tableau car plusieurs utilisateurs ajoutent fréquemment des lignes à ce tableau et détruisent les formules régulièrement.
Problème: chaque fois qu'un utilisateur ajoute des données à la fin du tableau, il est nécessaire de mettre à jour les formules SUM et SUBTOTAL pour élargir la plage qui, il va sans dire, est en grande partie oubliée.
Je pouvais moi-même étendre les formules pour couvrir toutes les lignes jusqu'à la ligne 500 et masquer les lignes restantes, de sorte qu'un utilisateur devrait "insérer" des lignes lorsque la fin visible de la table est atteinte - ce qui à son tour mettrait à jour les formules. , mais je ne considère pas cela comme un moyen très sûr… de connaître mes utilisateurs.
Question: Existe-t-il un moyen de créer SUM et SUBTOTAL de X6 " à la fin de la colonne X où que ce soit "?
CONCLUSION
J'ai utilisé SUM (OFFSET (....)) en prenant le paramètre "height" d'un nouveau champ dans l'en-tête qui affiche le "nombre d'enregistrements" par un =COUNTA($A:$A)-1
(-1 pour le texte d'en-tête de colonne qui est également compté. ), comme il ressort du contexte commercial qu’une clé doit exister dans la colonne A pour tout enregistrement de données valide et qu’aucune ligne vide n’est autorisée (je peux au moins former les utilisateurs), sans oublier l’avantage non seulement de voir le SUM mais maintenant aussi le COUNT d'enregistrements dans le volet gelé de l'en-tête.
Utiliser Offset () _ et Count () semble être le plus populaire, et je suis sûr le plus efficace, à utiliser.
=SUM(OFFSET($X$6,0,0,COUNT($X$6:$X$1000)))
Personnellement, j’ai tendance à beaucoup utiliser Indirect () pour les choses. Cela fonctionnera probablement plus lentement, mais cela fonctionne. Cela m'aide à voir la gamme en cours de création. Attention, étant donné qu'une partie de la plage est conservée dans du texte, elle ne sera pas mise à jour lorsque vous déplacerez la formule. Cela peut vous faire trébucher. Ici vous êtes quand même.
=SUM(INDIRECT("$X$6:$X$" & COUNT($X$6:$X$1000)))
Vous pouvez utiliser les plages dynamiques indiquées par iDevlop ou placer le Offset () _ ou Indirect () à l'intérieur du Sum () comme je viens de le faire.
Quoi qu'il en soit, vous voulez faire attention car Indirect () _ et Offset ()_ sont Fonctions volatiles . Ce que vous voulez généralement éviter.
J'ai aussi trouvé ce type , qui utilise Index () et Match (), qui ne sont pas des fonctions volatiles.
EDIT:
En y pensant (parce que je viens de le faire sur un tableur) ..
Si vous savez que vos données auront une limite raisonnable, par exemple 1000, vous pouvez simplement utiliser =SUM($X$6:$X$1000)
et ignorer les blancs, même pour la méthode de sous-total 1 ou 101 (moyenne).
Eh bien, je pense que vous pouvez utiliser quelque chose comme = SUM (C: C) pour résumer toutes les cellules de la colonne C et le texte sera automatiquement exclu. Je l'ai essayé et cela a fonctionné.
Sûr ! Et je trouve beaucoup mieux d'avoir le total en haut, car vous pouvez également geler les premières lignes pour que ces totaux restent visibles.
Il suffit de demander à Google "Gamme dynamique Excel". Voici quelques liens:
http://www.ozgrid.com/Excel/DynamicRanges.htm
http://support.Microsoft.com/kb/830287
Tout est fait avec une combinaison des fonctions Offset () et Count ().
Placez cette formule sur la dernière ligne de votre plage de données (ne doit pas être un tableau/une liste), cela peut résoudre votre problème
=SUM(INDIRECT(("x6:x"&ROW()-1)))
ou si vous rencontrez table/liste, vous pouvez utiliser cette formule
=sum([table header name])
comme vous voulez faire la somme de la colonne "Montant" en-tête du type
=sum([Amount])
à la dernière rangée de votre liste/tableau