Si tout ce que vous voulez faire, c'est saisir un sous-ensemble d'un tableau, et vous connaissez déjà les positions des éléments que vous voulez vous pouvez simplement utiliser INDEX
avec un tableau comme argument d'index. En d'autres termes, il s'agit d'un tableau :
=INDEX({11,22,33,44,55},{2,3,5})
retours {22,33,55}
. Mais ce n'est généralement pas très utile parce que vous ne connaissez pas les positions, et je ne connais aucun moyen de les obtenir sans UDF.
Ce que j'ai fait pour ce type de filtrage de tableau dans la feuille de calcul est d'écrire un UDF sous la forme suivante :
'Filters an input sequence based on a second "comb" sequence.
'Non-False-equivalent, non-error values in the comb represent the positions of elements
'to be kept.
Public Function combSeq(seqToComb, seqOfCombValues)
'various library calls to work with 1xn or nx1 arrays or ranges as well as 1-D arrays
'iterate the "comb" and collect positions of keeper elements
'create a new array of the right length and copy in the keeper elements
End Function
Je n'ai affiché que du pseudocode parce que mon code réel est constitué d'appels à des fonctions de la bibliothèque, y compris les opérations "collect-positions" et "copy-from-positions". Cela obscurcirait probablement l'idée de base, qui est assez simple.
Vous appelleriez un tel UDF de la manière suivante :
=combSeq({23, "", 34, 46, "", "16"}, {23, "", 34, 46, "", "16"} <> "")
ou
=combSeq(Q1:Q42, SIN(Z1:Z42) > 0.5)
et utiliser la mécanique normale des tableaux d'Excel pour générer le "peigne". Il s'agit d'une méthode légère, adaptée à Excel, qui permet d'obtenir un grand nombre d'avantages de la méthode plus standard du filter(list-to-filter, test-function)
que l'on peut trouver dans d'autres systèmes de programmation.
J'utilise le nom "peigne" parce que "filtre" signifie généralement "filtrer avec cette fonction", et avec Excel, vous devez appliquer la fonction de test avant d'appeler la fonction de filtrage. De plus, il peut être utile de calculer un "peigne" comme résultat intermédiaire et de l'utiliser ensuite pour... euh, peigner... plusieurs listes.