web-dev-qa-db-fra.com

FILTER a une taille de plage incompatible; référençant l'avant-dernière cellule d'une colonne dans la plage

J'utilise un filtre multicritères pour vérifier si ma feuille contient une certaine combinaison de valeurs. La formule doit automatiquement inclure toutes les nouvelles lignes ajoutées à la feuille. Cependant, si je le fais de cette façon:

=IF(FILTER(IMPORTRANGE(Overview!V22, "TabName!D2:F"), 
           IMPORTRANGE(Overview!V22, "TabName!D2:D") = "KI", 
  ISNUMBER(IMPORTRANGE(Overview!V22, "TabName!F2:F"))) = "KI", "KI", "")

Voici l'erreur que j'obtiens:

FILTER a des tailles de plage incompatibles. Nombre de lignes prévu: 162. nombre de colonnes: 1. Nombre réel de lignes: 1, nombre de colonnes: 1.

Je pense que le problème est que pour les conditions dont j'ai besoin pour définir la plage, par ex. F2 à l'avant-dernière cellule d'une colonne, mais je ne sais pas comment faire cela dans une définition de plage.

Je suis vraiment nouveau dans ce domaine et j'apprécierais tout indice :)

2
LePez

exemple pour ceux qui ont besoin d'utiliser des formules FILTER et qui luttent contre l'inadéquation des plages de FILTER

=FILTER(A1:A, MATCH(A1:A, B1:B, 0))
=FILTER(A1:A, COUNTIF(B1:B, A1:A))
=FILTER(A1:A, ISNA(MATCH(A1:A, B1:B, 0)))
=FILTER(A1:A, NOT(COUNTIF(B1:B, A1:A)))

dans le cas où vous devez utiliser la formule FILTER pour renvoyer l'évaluation entre deux plages, et ces deux plages sont de taille différente (comme lorsqu'elles sont renvoyées à partir d'une requête) et ne peuvent pas être modifiées pour correspondre à la même taille et vous venez de recevoir une erreur FILTER has mismatched range sizes. Expected row count: etc., alors voici une solution:

pour simplifier, disons que vos plages pour le filtre sont A1: A10 et B1: B8 , vous pouvez utiliser des crochets de tableau {} pour ajouter deux lignes virtuelles sur la plage B1:B8 pour correspondre à la taille A1:A10 en utilisant REPToù le nombre nécessaire les répétitions doivent être calculées par un simple calcul entre les plages initiales.

puis à cette formule REPT, nous devons ajouter +1 comme correction/sécurité intégrée (dans le cas où la différence entre deux plages initiales est de 1), parce que REPT fonctionne avec un minimum de 2 répétitions . Donc, dans un sens, nous devrons créer une plage de B1:B11 (à partir de B1:B8) et, plus tard, nous allons simplement couper la dernière ligne d'une plage afin que ce soit B1:B10 contre A1:A10. nous utiliserons 2 symboles uniques pour REPT

l'étape suivante serait d'envelopper REPT dans SPLIT et de diviser par le 2e symbole unique. puis, (en fonction d'un besoin supplémentaire), ce SPLIT doit être enveloppé dans TRANSPOSE (parce que nous voulons faire correspondre la taille de la colonne à la taille de la colonne) et la dernière étape serait de l'envelopper dans QUERY et limit sortent à nouveau la sortie par simple calcul de COUNTA(A1:A10) pour couper la dernière cellule rept. ensemble, cela ressemblerait à ceci:

=FILTER(A1:A10, NOT(COUNTIF(QUERY({B1:B8; 
 TRANSPOSE(SPLIT(REPT("♂♀", COUNTA(A1:A10)-COUNTA(B1:B8)+1), "♀"))}, 
 "limit "&COUNTA(A1:A10), 0), A1:A10)))

1
user0