web-dev-qa-db-fra.com

Comment créer une formule récursive dans Google Feuilles?

Je fais un traqueur de tâches dans Google Feuilles et j'essaie de mettre en œuvre des sous-tâches.

J'essaie de créer une formule qui vérifie la colonne "Tâche Parent" d'une ligne, et s'il existe une tâche parent, tire la colonne "Nom de la tâche" de la ligne. Ensuite, la formule relève la tâche parentale identifiée et si cette tâche a également une tâche parent, elle tire la deuxième fois le "nom de la tâche" une seconde fois. Le processus répète jusqu'à ce que la tâche parentale n'a aucune tâche parent elle-même.

C'est l'effet que j'essaie d'atteindre:

enter image description here

C'est ma formule jusqu'à présent, ce qui fonctionne bien, sauf qu'il n'est pas récursif (l'indentation ne se produit qu'une fois, peu importe le nombre d'ancêtres que la tâche a).

=IF(ISBLANK(C3), B3, CONCAT("   ", B3))
1
Rafael

Je l'ai résolu. Voici la formule finale que j'ai utilisée:

=IF(ISBLANK(C19), B19, CONCATENATE(REGEXEXTRACT(INDEX($A:$A, C19, 1), "\s*"), "   ", B19))

Voici comment cela fonctionne: nous utilisons d'abord l'index pour rechercher le nom de la tâche de la tâche mère. Ensuite, nous utilisons RegexExtract pour extraire l'espace blanc de la tâche du nom de la tâche, puis nous utilisons un concaténate pour préfixer le nom de cette cellule actuelle avec le blancheur que nous avons extrait de RegexExtract avec un onglet ("") et le nom de la tâche. Enfin, nous vérifions que la cellule a une tâche parent en cochant la valeur dans sa colonne de tâche parent avec ISBLANK sinon une erreur jettera une erreur.

Ceci n'est pas récursif mais cela fonctionne car le nombre de tâches ancêtres La tâche mère actuelle est intégrée à son nom par le montant de la préfixe de WhitSpace de son nom.

Dans ma formule, j'ai également fini par créer une nouvelle feuille appelée "Paramètres" qui est juste une table de valeur de clé. J'ai ensuite fait un vlookup ("onglet", des paramètres ...) afin que je puisse configurer la principale espace si nécessaire.

1
Rafael
  • basé sur la colonne [~ # ~ ~] b [~ # ~ ~] Seulement s'il existe un marqueur commun pour la tâche de niveau 1 (pour cet exemple mot "summary")

    = Arrayformula (Rept (Split (Split ("", ",") & "", LEN (Regexreplace (Regexextration (B2: B, [.____] "\ D +.\D + $ |\D +.\d +.\d + $ $ |\d +.\d + $ |\d * $ "),". "", "")) - iferror (recherche ([.____] "" Résumé ", B2: B))) & B2 : B)

    0

  • toutefois, si le marqueur commun des tâches de niveau 1 n'existe pas, il peut être dérivé de [~ # ~ ~] c [~ # ~] Colonne:

    = Arrayformula (Iferror (Rept (Split (Split ("", ",") & "", Len (Regexreplace (Regexextration (B2: B, [. ____] ""\D +.\D + $ |\d +.\d +.\d + $ |\d +.\d + $ |\d * $ "),". "", "")) - iferror ([. ____] Si (Len (C2: C) = 0, 1))) & B2: B))

    0


Note latérale: Ces formules travaillent jusqu'à niveau 4 par exemple. "Sous-masque 1.2.3.4", mais bien sûr, cela peut être étendu à n'importe quelle quantité de niveaux

0
user0