web-dev-qa-db-fra.com

Comment créer une formule dans Google Sheets en utilisant le contenu d'autres cellules

Je travaille sur un document Google Sheets contenant de très longues formules difficiles à lire et à déboguer. Les formules sont longues car je dois souvent sélectionner la formule à exécuter en fonction de certaines valeurs de cellule, puis envelopper cette formule dans les instructions IF et IFERROR pour empêcher les valeurs incorrectes d'apparaître.

Voici un exemple: Je dois effectuer une recherche sur une table éphémère construite à partir d'une feuille du document. Je choisis la feuille à utiliser pour construire le tableau éphémère en fonction de la valeur d'une cellule adjacente.

=IF(F3="", , IFERROR(IF(C3<MinMaraDur, HLOOKUP(F3, {QUERY(RankData, "select K,J,I,H,G,F where A='"&$E3&"' and B='"&$B3&"' and C="&$C3&" and D="&$D3&" and E='"&$G3&"'",0);"III","II","I","CMS","MS","MSIC"}, 2), HLOOKUP(F3, {QUERY(MaraRankData, "select J,I,H,G,F,E where A='"&$E3&"' and B='"&$B3&"' and C="&$C3&" and D="&$D3&"",0);"III","II","I","CMS","MS","MSIC"}, 2)), ))

Fou, non? Je veux mettre des morceaux de cette formule dans des cellules et la construire en utilisant le contenu de ces cellules, ainsi (1) il sera plus lisible lorsque je modifierai à nouveau cette feuille dans 3 à 6 mois et (2) il sera plus facile de déboguer en testant chaque partie. individuellement.

Comment puis-je accomplir cela?

2
Stobber

Réponse courte

On ne peut pas complètement construire une formule à partir de chaînes de texte, il n'y a rien de tel que =formula("=A1+B1") dans les feuilles. Mais on peut améliorer la présentation en (a) préparant des paramètres complexes dans des cellules séparées et (b) en utilisant des espaces dans une formule.

Espace blanc

Les formules de feuille de calcul ne doivent pas nécessairement être comprimées sur une seule ligne. La barre de formule peut être étirée verticalement et des sauts de ligne peuvent être créés avec Ctrl-Entrée (ou en préparant la formule dans l'éditeur de texte). Cela améliore déjà la lisibilité:

formula

(Les sauts de ligne/retraits ici pourraient être meilleurs, ceci est juste un exemple rapide.)

Paramètres

Lorsque vous utilisez des formules complexes query, il est conseillé de former les chaînes de requête séparément, afin de pouvoir les déboguer plus facilement. Donc, vous aurez une cellule avec

="select K,J,I,H,G,F where 
    A='"&$E3&"' and 
    B='"&$B3&"' and 
    C="&$C3&" and 
    D="&$D3&" and 
    E='"&$G3&"'"

et un autre avec

="select J,I,H,G,F,E where 
    A='"&$E3&"' and 
    B='"&$B3&"' and 
    C="&$C3&" and 
    D="&$D3&""

et ensuite la formule principale fera référence à ces chaînes. S'ils s'appellent les plages FirstQuery et SecondQuery, la formule principale sera

=IF(F3="", , IFERROR(
   IF(C3<MinMaraDur, 
    HLOOKUP(F3, {
      QUERY(RankData, FirstQuery, 0); 
      "III","II","I","CMS","MS","MSIC"
      }, 2), 
    HLOOKUP(F3, {
      QUERY(MaraRankData, SecondQuery,0); 
      "III","II","I","CMS","MS","MSIC"
      }, 2)
   ), 
))

que je pense est assez lisible.

1
user79865