0
votes

Sous-totales avec arrayformula ()

J'ai créé une table simple et essaye de diviser les données avec des sous-totaux.

< img src = "https://i.stack.imgur.com/h7w71.png" alt = "Entrez la description de l'image ici">

  • A indique les lignes de sous-total.
  • B contient le numéro des lignes pour le sous-total précédent. Ceci est juste un champ supplémentaire pour simplifier les formules.
  • c contient des quantités.
  • d contient des sous-totaux de quantités entre la ligne de sous-total antérieure et actuelle.

    La formule sous-totale a la vue suivante: xxx

    Le problème est que la formule est extrêmement lente. Existe-t-il un moyen de le rendre plus rapide?

    exemple de fichier:

    https://docs.google.com/spreadsheets/d/1hpgelzfar2s6piqmvdq8mipzndw2esqkawzfo4iica/edit?usp=sharing


0 commentaires

3 Réponses :


0
votes

oui il y a

Plus il est plus facile de supprimer les lignes vides sous la plage de données.

Un qui peut nécessiter une maintenance, remplacer la référence ouverte comme $ A2: $ A par des références fermées, c'est-à-dire $ A2: $ A100

Un qui augmente la complexité de formule une volatilité, mettre chaque référence ouverte à l'intérieur array_consrain mais il est plus facile de maintenir au cas où de nouvelles lignes de données ont été ajoutées


0 commentaires

0
votes

Utilisez la plage "nécessaire":

=ARRAYFORMULA(IFERROR(IF(A2:A; MMULT((
 INDIRECT("B2:B"&MAX(IF(B2:B="";;  ROW(B2:B)))) < TRANSPOSE(ROW(
 INDIRECT("A2:A"&MAX(IF(A2:A=TRUE; ROW(A2:A); )))))) * (TRANSPOSE(ROW(
 INDIRECT("A2:A"&MAX(IF(A2:A=TRUE; ROW(A2:A); ))))) < ROW(
 INDIRECT("A2:A"&MAX(IF(A2:A=TRUE; ROW(A2:A); ))))); IF(ISNUMBER(
 INDIRECT("C2:C"&MAX(IF(C2:C="";;  ROW(C2:C)+1)))); 
 INDIRECT("C2:C"&MAX(IF(C2:C="";;  ROW(C2:C)+1))); 0)); )))


0 commentaires

1
votes

Vous pouvez également essayer cette formule beaucoup plus simple: xxx

Entrez la description de l'image ici


1 commentaires

Merci. J'aime cette formule. C'est simple et rapide)