web-dev-qa-db-fra.com

Comment faire référence aux éléments d'un tableau dynamique dans Google Sheets?

J'essaie de créer des horaires d'enseignement de manière dynamique, en parcourant un grand tableau avec toutes les informations sur l'heure à laquelle une leçon a lieu, qui est le tuteur, quelle tranche d'âge est enseignée et quelle matière elle est.

Je peux générer toutes les informations en utilisant une combinaison de FILTER et QUERY. Voici à quoi je veux qu'il ressemble par rapport à la façon dont il sort.

enter image description here

Je pourrais utiliser JOIN pour regrouper toutes les informations dans une cellule et utiliser le délimiteur de retour de ligne pour les diviser, mais je ne peux pas arranger chaque élément du tableau comme j'aime. Je veux concaténer dynamiquement les cellules afin que, par exemple, je puisse mettre plusieurs champs sur une seule ligne et pouvoir également appliquer une logique conditionnelle basée sur les résultats de QUERY. Par exemple, si une colonne est vide, utilisez une instruction IF pour l'omettre.

Ce que je dois savoir, c'est comment créer un tableau basé sur une requête, puis dans la même ligne de formule, faire référence aux éléments individuels de ce tableau. Donc quelque chose comme IF(ThisArray[0]<>"", ThisArray[0] & ThisArray[1]) et ainsi de suite.

Voici la formule que j'utilise actuellement:

=JOIN(CHAR(10), QUERY(FILTER('Timetable'!$B$2:$R$620, 'Timetable'!$B$2:$B$620=B$3, 'Timetable'!$J$2:$J$620=$A4, 'Timetable'!$H$2:$H$620=$A$3), "SELECT Col13, Col15, Col14, Col5"))

Y a-t-il un moyen de faire cela?

EDIT: Je viens de découvrir la formule TEXTJOIN, qui est meilleure que ma solution actuelle, d'autant plus qu'elle me permet de rejoindre des tableaux 2D. Ainsi, plus d'une leçon peut être stockée dans la même cellule. Cependant, je ne trouve aucun moyen de mettre un retour de ligne supplémentaire entre les lignes pour le rendre plus lisible, il génère donc simplement:

Philosophy
16-17
John Smith
English Language
13-15
Jane Doe

Ce qui est mieux mais pas parfait. Le scénario idéal est que je puisse concaténer dynamiquement chaque ligne générée par FILTER et QUERY, dans une seule cellule, avec des retours de ligne entre les deux.

1
Lou

La formule ci-dessous prend la formule de requête OP et insère une colonne supplémentaire avec la valeur ":" entre la 3ème et la 4ème colonne. puis le QUERY externe transforme toutes les colonnes en une seule colonne et ajoute un caractère unique ♦ à toutes les valeurs.

Ensuite, textjoin joint toutes les données avec char (10) >> c'est votre ligne vide entre les ensembles.

Ensuite, une série de regexreplaces sont appliqués pour affiner la sortie intérieure finale remplace un caractère spécial par une nouvelle ligne.

Celui du milieu supprime la nouvelle ligne si elle est avant "Médecine" et celle externe résout le problème avec la 2e ligne de chaque ensemble.

= ARRAYFORMULA (REGEXREPLACE (REGEXREPLACE (REGEXREPLACE (TEXTJOIN (CHAR (10), 1, 
 QUERY (TRANSPOSE ("♦" & QUERY (FILTER ('Table source'! $ A $ 2: $ G $ 6, 'Table source) '! $ A $ 2: $ A $ 6 = $ B3), 
 "Sélectionnez Col2, Col3,': ', Col4, Col5, Col6 label': '' '")), 999 ^ 99)) , "♦", 
 CHAR (10)), "^" & CHAR (10),), "" & CHAR (10) & ":" & CHAR (10), ":"))

0

1
user0