web-dev-qa-db-fra.com

Comment utiliser ARRAYFORMULA avec QUERY dans Google Sheets

J'ai une requête qui doit être exécutée pour chaque ligne d'une liste. Cela fonctionne bien quand écrit pour une seule ligne:

QUERY(MaraRankData,
  "select J,I,H,G,F,E where 
    A='"&E3&"' and 
    B='"&B3&"' and 
    C="&C3&" and 
    D="&D3&"",
  0
)

Cela génère une ligne de données, comme vous le souhaitez. Mais lorsque je l'enveloppe dans ARRAYFORMULA, il ne génère toujours qu'une ligne au lieu de plusieurs:

=ARRAYFORMULA(
  QUERY(MaraRankData,
    "select J,I,H,G,F,E where 
      A='"&E3:E&"' and 
      B='"&B3:B&"' and 
      C="&C3:C&" and 
      D="&D3:D&"",
    0)
)

Google Sheets ne génère aucune erreur. Je ne sais donc pas ce que je fais de mal. Comment puis-je faire en sorte qu'ARRAYFORMULA fonctionne avec QUERY pour ne pas avoir à répéter la formule à chaque ligne?

8
Stobber

La combinaison arrayformula(query(...)) n'est pas prise en charge. query n'est pas un concept qui traite un tableau de tableaux ou exécute un tableau de chaînes de requête.

Vous avez deux options: (a) répétez query sur chaque ligne; (b) utilisez vlookup pour extraire des colonnes de données, comme expliqué ci-dessous. Par exemple:

=arrayformula(vlookup(E3:E, {A3:A, J3:J}, 2, false))

prend un élément de E3: E à la fois, trouve cet élément dans la colonne A et récupère l'élément correspondant de la colonne J. Cette approche nécessite six vlookups distincts pour obtenir les colonnes J, I, H, G, F, E, mais vous n'aurez pas besoin d'une commande distincte pour chaque ligne.

Une complication est que vlookup accepte une seule clé de recherche et que vous souhaitez effectuer une recherche à l'aide de 4 paramètres.

A='"&E3&"' and 
B='"&B3&"' and 
C="&C3&" and 
D="&D3&

Cela peut être contourné en les concaténant dans une seule clé de recherche: vous pouvez avoir une colonne comme Z,

=arrayformula(E3:E & "|" & B3:B & "|" & C3:C & "|" & D3:D)

qui concatène quatre paramètres de recherche dans une clé de recherche délimitée par des tubes. Faites de même pour la table à rechercher, puis comparez ces clés avec vlookup.

8
user79865