filtrer plusieurs critères à l'aide de vba excel
J'ai 8 variables dans la colonne A, 1,2,3,4,5 et A, B, C.
Mon but est de filtrer A, B, C et afficher seulement 1-5.
Je peux le faire en utilisant le code suivant:
My_Range.AutoFilter Field:=1, Criteria1:=Array("1", "2", "3","4","5"), Operator:=xlFilterValues
Mais ce que fait le code est-il des filtres variables de 1 à 5 et les affiche.
J'ai l'habitude de faire le contraire, mais ce qui donne le même résultat, en filtrant A, B, C et montrant les variables de 1 à 5
J'ai essayé ce code:
My_Range.AutoFilter Field:=1, Criteria1:=Array("<>A", "<>B", "<>C"), Operator:=xlFilterValues
Mais il ne fonctionne pas.
Pourquoi ne puis-je pas utiliser ce code ?
Il donne cette erreur:
erreur d'exécution 1004 méthode autofilter de la classe range a échoué
Comment puis-je faire cela?
double possible de Excel VBA filtre automatique tous, mais trois
OriginalL'auteur | 2015-02-18
Vous devez vous connecter pour publier un commentaire.
Je pense (à partir de l'expérimentation - MSDN est inutile ici) qu'il n'existe aucun moyen direct de le faire. Réglage
Criteria1
à unArray
est équivalent à l'utilisation des cases à cocher dans la liste déroulante - comme vous le dites il ne filtrer une liste basée sur les éléments qui correspondent à l'une de celles dans le tableau.Fait intéressant, si vous avez les valeurs littérales
"<>A"
et"<>B"
dans la liste et filtrer ces l'enregistreur de macro est livré avecqui fonctionne. Mais si vous avez alors la valeur littérale
"<>C"
et ainsi vous filtre pour tous les trois (à l'aide de cases à cocher) lors de l'enregistrement d'une macro, la macro recorder réplique précisément votre code qui échoue avec une erreur. Je crois que je l'avais appeler ça un bug il y a des filtres que vous pouvez faire à l'aide de l'INTERFACE utilisateur qui vous ne pouvez pas faire avec VBA.Bref, revenons à votre problème. Il est possible de filtrer les valeurs ne correspond pas à certains critères, mais seulement jusqu'à deux valeurs qui ne fonctionne pas pour vous:
Il ya un couple de solutions de contournement possibles en fonction du problème exact:
=ISNUMBER(A2)
ou=NOT(A2="A", A2="B", A2="C")
puis filtrer surTRUE
Criteria1:=">-65535"
(ou un nombre inférieur à celui de tout que vous attendez) qui va filtrer les valeurs non numériques - en supposant que c'est ce que vous voulezPar exemple:
OriginalL'auteur
Je n'ai pas trouvé de solution sur Internet, j'ai donc mis en œuvre.
Le filtre automatique de code avec des critères est ensuite
En fait, la ConstructFilterValueArray (), méthode (pas de fonction) obtenir toutes les valeurs distinctes qu'il a trouvé dans une colonne spécifique et supprimer toutes les valeurs présentes dans le dernier argument de la.
Le code VBA de cette méthode est
Ce code peut certainement être améliorée en renvoyant un Tableau de String, mais travailler avec le Tableau en VBA n'est pas facile.
ATTENTION: ce code fonctionne uniquement si vous définissez une feuille nommée X, car CopyToRange paramètre utilisé dans AdvancedFilter() a besoin d'une Plage Excel !
C'est une honte que Microfsoft ne pas avoir mis en œuvre cette solution en ajoutant simplement une nouvelle énumération que xlNotFilterValues ! ... ou xlRegexMatch !
OriginalL'auteur
Alternative à l'aide de VBA fonction de Filtre
Comme une alternative innovante pour @schlebe 's récente réponse, j'ai essayé d'utiliser le
Filter
fonction intégrée dans VBA, ce qui permet de filtrer une recherche de chaîne de réglage de la troisième argument de Faux. Tous les "négatif" de recherche de chaînes de caractères (par exemple A, B, C) sont définis dans un tableau. J'ai lu les critères dans la colonne A à un champ de données de tableau et de manière générale, l'exécution de filtrage (A - C) pour filtrer ces articles.Code
OriginalL'auteur
Une option à l'aide de filtre automatique
OriginalL'auteur
Remplacer l'Opérateur:=xlOr avec Operator:=xlAnd entre à vos critères. Voir ci-dessous le script modifié
myRange.AutoFilter Field:=1, Criteria1:="<>A", Operator:=xlAnd, Criteria2:="<>B", Operator:=xlAnd, Criteria3:="<>C"
OriginalL'auteur