web-dev-qa-db-fra.com

La formule se brise subtilement dans ARRAYFORMULA dans Google Sheets

J'ai un document tableur avec une formule comparant une liste d'URL à des listes sur deux autres feuilles du document.

Je souhaite savoir si chaque URL de la première liste est présente dans la liste de blocage, la liste blanche, les deux ou aucune des deux.

Notez que j'ai utilisé des plages nommées sur les trois colonnes d'URL (moins l'en-tête, par exemple 'sheetname'!A2:A1000').

Voici ma formule actuelle:

=if(len(REQUESTS),if(AND(countif(BLOCK,REQUESTS),countif(WHITE,REQUESTS)),"ON BOTH",if(countif(BLOCK,REQUESTS),"Blocked",if(countif(WHITE,REQUESTS),"Whitelisted","Pending addition to a list"))),"")

Cela fonctionne comme prévu, sauf que je dois le faire glisser vers chaque ligne de la feuille contenant les demandes.

Quand je l'ajoute à un ARRAYFORMULA, le AND ne fonctionne plus. Toute URL présente à la fois dans BLOCK et dans WHITE renvoie "Bloqué".

=ARRAYFORMULA(if(len(REQUESTS),if(AND(countif(BLOCK,REQUESTS),countif(WHITE,REQUESTS)),"ON BOTH",if(countif(BLOCK,REQUESTS),"Block",if(countif(WHITE,REQUESTS),"White","Pending addition to a list"))),""))

Actual location(s)  Working formula               With ARRAYFORMULA
neither             Pending addition to a list    Pending addition to a list
white               White                         White
block               Block                         Block
BOTH                ON BOTH                       Block

Si cela aide, lorsque j'échange les fonctions if(White) et if(Block), j'obtiens "Blanc" lorsqu'il est allumé.

Des idées pour lesquelles l’ajout de ARRAYFORMULA rompt ma logique ou une méthode alternative pour que la formule soit répétée autant de fois que nécessaire?

2
Clay

Dans les formules matricielles au lieu de AND et OR, les fonctions utilisent respectivement * et +.

Exemple

ET: Au lieu de

=ArrayFormula(and(A2:A4,B2:B4))

utilisation

=ArrayFormula(A2:A4*B2:B4)

OU: au lieu de

=ArrayFormula(or(A2:A4,B2:B4))

utilisation

=ArrayFormula(A2:A4+B2:B4)

2
Rubén