Comment appliquer des formules aux lignes de sous-total?


1

J'ai une feuille de calcul avec de nombreux sous-totaux et un nombre variable de lignes entre eux. Si je ne montre que les lignes de sous-total, ajoute une formule et la déplace vers le bas, Excel ajoute la formule à toutes les lignes et pas seulement aux lignes de sous-total: -

avant sous-total:

prod    qty   price
1       3      55
1       4      66
2       5      77
2       6      88
2       7      99
2       8     110
2       9     121
3      10     132
3      11     143
3      12     154

après sous total compressé:

prod           qty   price
1 Total          7    121
2 Total         35    495
3 Total         33    429
Grand Total     75   1045

moyenne ajoutée aux sous-totaux:

prod           qty    price     weighted average
1 Total          7     121      17.28571429
2 Total         35     495      14.14285714
3 Total         33     429      13
Grand Total     75    1045

traîné vers le bas de la formule et non compressé

prod           qty    price     weighted average
1               3      55   
1               4      66   
1 Total         7     121       17.28571429
2               5      77       15.4
2               6      88       14.66666667
2               7      99       14.14285714
2               8     110       13.75
2               9     121       13.44444444
2 Total        35     495       14.14285714
3              10     132       13.2
3              11     143       13
3              12     154       12.83333333
3 Total        33     429       13
Grand Total    75    1045   

S'il vous plaît ne vous concentrez pas sur cet exemple et comment cela peut être fait différemment. La feuille elle-même est très complexe et nous devons utiliser les sous-totaux dans les formules.

Je dois appliquer des formules uniquement aux sous-totaux. Comment je fais ça?


Pouvez-vous publier un exemple de ce qui se trouve dans l'une de vos lignes de sous-total et de ce que vous aimeriez voir?
Melanie

montre-moi s'il te plait

En règle générale, le processus est inversé: vous appliquez les formules suivantes uniquement aux lignes de données et ignorez les sous-totaux. La plupart du temps, cela devrait aboutir au même résultat.
RBarryYoung

pour certains calculs, vous avez besoin du sous-total dans le calcul. les moyennes pondérées est l'un des nombreux exemples

Réponses:


2

Les lignes de sous-total sont généralement identifiables (par exemple avec Average ou Count - ou le plus souvent et comme dans votre cas avec Total ). Filtrer sur le champ «À chaque changement de colonne» pour contient "Tot" pour accéder uniquement aux lignes de sous-total.

Notez que, même s'ils sont filtrés, les résultats peuvent ne pas sembler corrects, mais doivent être ajustés correctement lorsque le filtre est supprimé.

SU585375 example


2

Je devais faire la même chose pour une matrice de décision pondérée avec des catégories individuellement pondérées. La feuille de calcul ressemble à ceci:

excel screenshot

Où le "#NAME?" Il semble y avoir plusieurs formules que je décrirai. La feuille de calcul repose sur des macros - une fois qu'elles sont activées, le "#NAME?" la chose s'en va et le bon numéro apparaît.

Chaque catégorie a plusieurs critères avec des poids. Au-dessous des critères, les totaux par catégorie sont calculés, mais dans la ligne à gauche des totaux, se trouve une cellule avec le mot "Catégorie". Les scores de catégorie utilisent cette formule:

=ROUND(SUMPRODUCT(range_up($C83),range_up(D83))/SUM(range_up($C83)),1)

La formule ci-dessus serait correcte si elle était entrée dans la cellule D84 et si le poids de la catégorie était en C84 $.

Les notes finales utilisent cette formule:

=sum_categories($B4:$B98,1,2)

où "$ B4: $ B98" est la plage qui contient le mot "Catégorie", le "1" représente le nombre de colonnes à droite de la colonne "Catégorie" où les poids apparaissent, et le "2" représente le nombre de colonnes du à droite de la colonne "Catégorie" les scores apparaissent (c’est-à-dire que cela devrait être la colonne dans laquelle se trouve la formule).

Les formules ci-dessus utilisent deux fonctions, range_up et sum_categories, fournies ci-dessous:

Function range_up(r As Range) As Range
  Dim t As Range, b As Range

  Application.Volatile

  Set b = r.Cells(1, 1) 'make sure it's only one cell

  If IsEmpty(b.Value) Then 'if cell is empty, start one cell up
    Set b = b.offset(-1)
  End If

  'end(xlup) has strange behaviour if cell above is blank, so fix it manually
  If IsEmpty(b.offset(-1)) Then
    Set t = b
  Else
    Set t = b.End(xlUp)
  End If
  Set range_up = t.Resize(b.Row - t.Row + 1)

End Function

Function sum_categories(r As Range, offset1 As Integer, offset2 As Integer) As Variant
  Dim sum As Variant
  Dim c As Range

  Application.Volatile

  sum = 0
  For Each c In r.Cells
    If c.Value = "Category" Then
      sum = sum + c.offset(0, offset1).Value * c.offset(0, offset2).Value
    End If
  Next c

  sum_categories = sum
End Function

Enfin, si vous souhaitez recalculer manuellement, incluez sur votre formulaire un bouton appelant cette fonction:

Sub force_recalc()
  Application.CalculateFullRebuild
End Sub

1

Le problème est-il juste dans la présentation? Si tel est le cas, vous pouvez utiliser une simple condition pour masquer la sortie indésirable. =IF(RIGHT(B10,5)="Total",INDEX(Summary,A10),"") (Remplacez l'INDEX par la formule que vous utilisez réellement)


-1

Si vous réduisez toutes les lignes que vous ne souhaitez pas écraser, vous pouvez coller la formule en procédant comme suit:

  1. Copier la formule
  2. Mettez en surbrillance la zone à laquelle vous souhaitez appliquer la formule
  3. Aller à "Aller à spécial" (en haut à droite du ruban d'accueil, ou CtrlSG puis Alt + S)
  4. Sélectionnez uniquement les cellules visibles, cliquez sur ok
  5. Coller la formule

J'espère que cela t'aides

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.