web-dev-qa-db-fra.com

Comment additionner uniquement les lignes d'Excel non filtrées?

J'utilise la formule SUM(B1..B20) pour additionner une colonne, mais lorsque je filtre les données par une colonne adjacente, la somme n'est pas mise à jour pour refléter uniquement les lignes non filtrées. Comment est-que quelqu'un peut faire ça?

52
Iain

Vous devez utiliser la fonction SOUS-TOTAL . La fonction [~ # ~] sous-total [~ # ~] ignore les lignes qui ont été exclues par un filtre.

La formule ressemblerait à ceci:

=SUBTOTAL(9,B1:B20)

Le numéro de fonction 9 , lui indique d'utiliser la [~ # ~] somme [~ # ~] fonction sur la plage de données B1: B20 .

Si vous êtes ' filtrage' en masquant les lignes, le numéro de fonction doit être mis à jour à 109 .

=SUBTOTAL(109,B1:B20)

Le numéro de fonction 109 est pour la [~ # ~] somme [~ # ~] fonctionne également, mais les lignes masquées sont ignorées.

99
Robert Mearns

Si vous n'utilisez pas de filtre automatique (c'est-à-dire que vous avez des lignes masquées manuellement), vous devrez utiliser la fonction AGGREGATE au lieu de SUBTOTAL.

3
Tim

Lorsque vous utilisez le filtre automatique pour filtrer les résultats, Excel ne prend même pas la peine de les masquer: il définit simplement la hauteur de la ligne à zéro (jusqu'à 2003 au moins, pas sûr de 2007).

Ainsi, la fonction personnalisée suivante devrait vous donner un débutant pour faire ce que vous voulez (testé avec des entiers, n'ayant joué avec rien d'autre):

Function SumVis(r As Range)
    Dim cell As Excel.Range
    Dim total As Variant

    For Each cell In r.Cells
        If cell.Height <> 0 Then
            total = total + cell.Value
        End If
    Next

    SumVis = total
End Function

Modifier:

Vous devrez créer un module dans le classeur pour y insérer la fonction, puis vous pouvez simplement l'appeler sur votre feuille comme n'importe quelle autre fonction (= SumVis (A1: A14)). Si vous avez besoin d'aide pour configurer le module, faites-le moi savoir.

2
mavnn