À l'aide de feuilles de calcul Google, vous pouvez écrire des requêtes . Cependant, si vous avez des lettres de colonne entre guillemets, elles ne sont pas mises à jour lorsque l'ordre des colonnes change.
Existe-t-il un moyen d'écrire ces requêtes afin qu'elles n'aient pas besoin d'être mises à jour chaque fois qu'une colonne est ajoutée ou supprimée?
Est-il possible d'utiliser des plages nommées dans les requêtes pour résoudre ce problème?
Voici un exemple: si vous ajoutez une colonne après «F», la colonne «G» est poussée vers «H» et la signification de la formule change.
= Requête (B: J, "sélectionner le groupe moy (J) par G")
Questions connexes
Cette question n'est pas la même que l' utilisation de la requête avec des en-têtes de colonne au lieu de lettres de colonne, car celle-ci se concentre sur l'utilisation des plages nommées.
Oui, vous pouvez utiliser des plages nommées au lieu des en-têtes de colonne intégrés, mais l'idée de base est la même que les autres réponses à cette question suggérée par d'autres questions similaires sur ce site: la feuille de calcul doit être définie pour créer une chaîne SQL dynamique .
Disons que
J
etG
correspond à des plages nomméesGrades
etClass
respectivement.L'approche suivante ne fonctionne que lorsque les colonnes sont entre les colonnes A et Z
CELL("address",Grades)
reviendra"$J:$J"
. Pour obtenir la référence de colonne, utilisezMID(CELL("address",Grades),2,1)
pour obtenir"J"
. La formule finale estL'approche suivante fonctionne pour tous les cas
COLUMN(Grades)
renverra un entier (un nombre de la forme 1,2,3 etc.) Pour simplifier la formule pour créer l'argument de l'instruction SQL, je suggère de forcer SQL à utiliser les références de colonne de la forme COL1, COL2, etc. en utilisant le tableau notation ({B:J}
). La formule finale estFeuille de calcul de démonstration
Références
Utilisation de tableaux dans Google Sheets - Aide des éditeurs de Google Documents
la source
La réponse de Ruben ne résout pas le problème dans tous les cas, car elle
MID(CELL("address",Grades),2,1)
échoue si laGrades
plage est déplacée vers une colonne à deux lettres comme$AA:$AA
.Dans ce cas, la formule
MID(CELL("address",Grades),2,2)
est nécessaire. Pour les plages nommées qui s'étendent sur ou s'étendent sur la$Z:$AA
plage, cette formule devient problématique.La formule
REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")
résout le problème pour le cas général, mais je doute fortement de son efficacité CPU lorsqu'elle est utilisée sur une grande feuille de calcul.la source
Je suis tombé sur cette page sur infoinspired.com qui explique une façon de le faire. Je l'ai testé exactement comme dans l'exemple qu'il a donné et cela a fonctionné. La mise en place:
Son explication de F1: La formule ADDRESS qui inclut les fonctions ROW et COLUMN renvoie l'adresse de cellule de B1. La fonction LEFT en extrait la première lettre qui est l'en-tête de colonne.
--- Cliquez sur la cellule F1 puis allez dans le menu Données> Plages nommées et nommez la plage "Age" (sans les guillemets)
Vous pouvez maintenant formuler votre requête comme suit:
=QUERY(A:B,"Select "&Age)
Il a des exemples plus compliqués dans sa page que je suis sur le point de tester maintenant, mais je suis encouragé que le premier exemple ait fonctionné!
Modifier - désolé si c'est exactement ce que d'autres ont proposé avec leurs réponses. Je viens de trouver cet exemple limpide et j'ai pu le comprendre. Je pensais que cela pourrait aider les autres avec la même question.
la source