web-dev-qa-db-fra.com

Comment renvoyer un tableau de cellules à partir d'une table dans Google Sheets

Nous avons # EXAMPLE TABLE avec le produit SKUS sur la rangée supérieure et les premières colonnes sont des ingrédients. Chaque ligne de SKU affiche la valeur de la ligne d'ingrédient. Ce que nous voulons faire, c'est créer une autre feuille avec un menu déroulant, dans lequel un utilisateur peut sélectionner l'une des différentes SKU, puis une formule (peut-être = requête?) Qui affichera dynamiquement deux colonnes; nom des ingrédients et valeur de l'ingrédient pour cette SKU, lorsque la valeur de l'ingrédient est supérieure à 0. J'aimerais le faire avec une fonction dynamique telle que = requête plutôt que imbriquée = if.

# EXAMPLE TABLE

ingredients     cake        pie         quiche
flour           2           1           1
sugar           3           3           -
apples          -           2           -
berries         -           1           -
cheese          -           -           2
eggs            1           -           2

# EXAMPLE VIEW

Thing to make:   [ dropdown  ]

# USER selects from EXAMPLE VIEW

Thing to make:      [ cake ]    <---- user makes choice

# EXAMPLE VIEW returns:

Thing to make:      [ cake ]

flour   2
sugar   3
eggs    1

# or user selects   [ quiche ]

# EXAMPLE VIEW returns:

Thing to make:      [ quiche ]

flour   1
cheese  2
eggs    2

J'ai essayé d'utiliser =query'ExampleTable'!A:D, "select A where C > 0") et il renverra les noms d'ingrédients dont les valeurs sont supérieures à 0; il renverrait donc un tableau [farine, fromage, œufs], ce qui est très proche, mais pas le résultat complet. I cherche.

1
jöhg

Une approche consiste à filtrer la table avant interroger la. Voici un exemple où la table est dans A1: D7 et le choix du produit est dans la cellule F1:

=query({A1:A7, filter(B1:D7, B1:D1 = F1)}, "select * where Col2 > 0")

Ici, filter ne conserve que la colonne où le nom de la colonne correspond à F1. La notation de tableau {} crée un tableau à deux colonnes, la première colonne provenant de A1: A7 (noms d'ingrédients) et la seconde étant des quantités. Enfin, query sélectionne les lignes où la quantité est positive.

Et ceci est une version plus décorée de ce qui précède, qui affiche "aucune recette trouvée" lorsqu'il n'y a pas de correspondance et omet les noms de colonne dans la sortie en utilisant label ... ''.

=iferror(query({A1:A7, filter(B1:D7, B1:D1 = F1)}, "select * where Col2 > 0 label Col1 '', Col2 ''"), "no recipe found")
0
user135384