web-dev-qa-db-fra.com

Filtrer un tableau à l'aide d'une formule (sans VBA)

Est-il possible de filtrer un tableau à l'aide d'une seule formule (sans filtre automatique, VBA ou colonnes supplémentaires)?

Par exemple, j'ai la feuille de calcul suivante:

   A  | B     | C
 --------------------
1| ID | Class | Value
2| 1  | A     | V1
3| 1  | B     | V2
4| 2  | A     | V3
5| 3  | B     | V4
6| 3  | B     | V5

Je veux utiliser un sous-ensemble de ce tableau dans RECHERCHEV. À savoir, je veux seulement faire correspondre les lignes où la classe est "B". J'espérais donc pouvoir utiliser quelque chose comme le suivant

=VLOOKUP(A3, FILTER_FUNC(A:C, B="B"), 3, false)

où FILTER_FUNC est un type de fonction ou d'expression qui renvoie un tableau qui contient uniquement les lignes qui remplissent la condition.

19
J. Christian
=VLOOKUP(A2,IF(B1:B3="B",A1:C3,""),1,FALSE)

Ctrl+Shift+Enter pour entrer.

16
GSerg

Cela le fera si vous ne voulez que la première valeur "B", vous pouvez sous-adresser une adresse de cellule pour "B" si vous voulez la rendre plus générique.

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(B2:B6)="B",0)),1)

Pour utiliser cela sur la base de deux colonnes, il suffit de concaténer à l'intérieur de la correspondance:

=INDEX(A2:A6,SUMPRODUCT(MATCH(TRUE,(A2:A6&B2:B6)=("3"&"B"),0)),1)
4
Lance Roberts

On dirait que vous essayez simplement de faire une recherche classique sur deux colonnes. http://www.dailydoseofexcel.com/archives/2009/04/21/vlookup-on-two-columns/

Des tonnes de solutions pour cela, la plus simple est probablement la suivante (qui ne nécessite pas de formule matricielle):

=SUMPRODUCT((Lookup!A:A=Param!A1)*(Lookup!B:B=Param!B1)*(Lookup!C:C))

Pour traduire votre exemple spécifique, vous utiliseriez:

=SUMPRODUCT((A1:A3=A2)*(B1:B3="B")*(C1:C3))
1
Alain