J'ai une feuille Google liée à un formulaire qui collecte les réponses de trois personnes différentes sur le même sujet en utilisant le même formulaire et en le révisant trois fois. Cela crée une feuille contenant trois colonnes indiquant l'emplacement des trois personnes.
J'ai besoin de produire une vue/requête qui prend ces trois colonnes et les place les unes en dessous des autres, et non les unes à côté des autres. Dans une base de données, j'aurais fait quelque chose comme la requête ci-dessous, j'ai appelé ma "feuille" tblMain et énoncé les quatre colonnes appropriées (j'ai également besoin de l'ID de sujet).
tblMain:
ID RALocation RBLocation RCLocation
Requete:
Select ID, RALocation as Location, 'RA' as Role from tblMain
Union
Select ID, RBLocation as Location, 'RB' as Role from tblMain
Union
Select ID, RCLocation as Location, 'RC' as Role from tblMain
Est-ce que quelqu'un sait s'il y a moyen de le faire dans Google Sheets? Cela ne me dérange pas de construire plus d’une feuille puis de les combiner à la fin, mais je suis un peu coincé sur la façon de procéder.
Je propose deux versions, selon que les cellules vierges doivent être conservées ou non. L'idée de base est la même:
CHAR
).JOIN
pour chacune des trois colonnes.SPLIT
la chaîne concaténée par le même caractère.TRANSPOSE
le résultat.Par exemple:
=TRANSPOSE( SPLIT( JOIN(CHAR(57344),A1:A) &CHAR(57344)& JOIN(CHAR(57344),B1:B) &CHAR(57344)& JOIN(CHAR(57344),C1:C), CHAR(57344) ) )
où pour rejoindre/séparer, j'ai choisi le caractère CHAR(57344)
, qui est destiné à un usage privé et ne doit donc pas figurer dans une entrée valide.
La formule ci-dessus supprime les entrées vides , car c’est ce que SPLIT
fait. Cela peut être pratique si vos données ne comportent pas de blancs: cela vous évite d'avoir à suivre l'emplacement de la dernière ligne des données. Mais d'autres fois, les blancs doivent être préservés.
Pour préserver les blancs, je suis la réponse de Jacob Jan Tuinstra sauf que j'ai utilisé un autre usage privé Unicode au lieu de l'espace (qui sait, peut-être que vous avez des cellules qui ne contiennent qu'un espace et que vous souhaitez conserver ). Cela implique deux étapes supplémentaires: après avoir tout réuni comme avant, j'utilise SUBSTITUTE
pour remplacer CHAR(57344)
par CHAR(57344)&CHAR(57345)
, puis scindé comme auparavant et remplace CHAR(57345)
par une chaîne vide.
=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(...joins... , CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "")))
Le résultat complet ressemble à ceci (notez que maintenant je spécifie où se trouve la dernière ligne de données):
=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(JOIN(CHAR(57344),A1:A9) &CHAR(57344)& JOIN(CHAR(57344),B1:B9) &CHAR(57344)& JOIN(CHAR(57344),C1:C9), CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "" )))
Encore une mise en garde: les chaînes dans Google Sheets ne peuvent pas dépasser 50000 caractères. Si vos données sont trop volumineuses pour une approche basée sur des chaînes, utilisez un script ( celui-ci est un bon point de départ).
Il est possible de créer très facilement une union dans Google Spreadsheet avec cette formule:
={'Sheet1'!A2:A;'Sheet2'!A2:A;'Sheet3'!A2:A}
Pour plus d'informations dans l'aide de Google Documents: tilisation de tableaux dans Google Sheets
Google Sheets est un outil très puissant qui offre plusieurs alternatives pour obtenir un résultat similaire à UNION-SELECT.
Une alternative à l’utilisation de la méthode SPLIT-TRANSPOSE-JOIN-CHAR consiste à utiliser des tableaux intégrés. L'un des avantages de cette méthode est qu'elle ne nécessite pas de construire/déconstruire des chaînes. Par conséquent, la limite du nombre de caractères n'est pas pertinente.
Ce qui précède peut être utilisé en combinaison avec FILTER () pour les cas nécessitant un filtrage afin d’avoir un comportement similaire de UNION-SELECT. Exemple
={Filter(A1:B2, B1:B2=2);Filter(D1:E2, E1:E2=6);Filter(G1:H2, H1:H2=12)}
Peut également être utilisé en combinaison avec QUERY () mais ses résultats incluent une ligne d’en-tête. Pour savoir comment se débarrasser des en-têtes, voir Se débarrasser de la ligne dans le résultat de la requête Google Spreadsheets .
Utilisez TRANSPOSE-SPLIT-REPT pour créer une colonne de valeurs.
={Transpose(Split(REPT("RA,",6),","))}
De même, QUERY () pourrait être utilisé pour créer une colonne de valeurs, mais la suppression de la ligne d'en-tête pourrait rendre la formule plus complexe. Utilisez-le uniquement si les limitations de longueur de chaîne posent des problèmes.
Supposons que la plage tblMain soit A1: D7, où A1: D1 correspond aux en-têtes du tableau et que les données sont au format A2: D7.
={{"ID";A2:A7;A2:A7;A2:A7},
{"Location";B2:B7;C2:C7;D2:D7},{"Role";
Transpose(Split(REPT("RA,",6),","));
Transpose(Split(REPT("RB,",6),","));
Transpose(Split(REPT("RC,",6),","))}}