2013-04-12 2 views
4

J'ai une table et je voudrais filtrer les lignes par les valeurs dans une de ses colonnes. Les valeurs utilisées pour filtrer sont stockées dans une colonne distincte ne figurant pas dans la table. C'est ce que j'ai jusqu'à présent:Table de filtre dans excel VBA basé sur une colonne de valeurs

Dim table1 As ListObject 
Dim range1 As Range 
Set range1 = ActiveSheet.range("AM23:AM184") 
'get table object 
table1.range.AutoFilter Field:=3, Criteria1:=??? 

Je ne sais pas quoi mettre pour les critères1. Je sais que cela doit être un tableau et je peux le mettre à quelque chose comme Array ("12", "2", "13") mais ce dont j'ai besoin pour égaler, ce sont les valeurs spécifiées dans range1. Toute aide serait grandement appréciée.

EDIT: J'ai été en mesure d'obtenir mes valeurs de plage dans un tableau en faisant range1.Value, puis en convertissant le Variant en un tableau de chaînes. Cela n'a pas fonctionné comme je le voulais, car il définit simplement mon filtre sur la dernière valeur de mon tableau. Par exemple, si mon tableau contient les ID ("12", "44", "13", "22") et que j'applique Criteria1 à ce tableau et l'exécute, le filtre n'a que 22 sélectionnés et tous les autres sont désélectionnés. 12, 44 et 13.

+0

Avez-vous essayé l'enregistrement de la Autofilter à obtenir un exemple de code? –

+0

ouais, j'ai eu le code similaire ci-dessus, mais il a juste mis un objet Array pour Criteria1 avec les valeurs que j'ai désélectionné comme entrées dans l'objet Array – user972276

+0

Je ne sais pas comment faire manuellement ce qui est soit le problème – user972276

Répondre

11

Je l'ai compris! J'avais essayé de recoder mais la première fois que je l'ai essayé, cela m'a donné un programme incomplet dû à trop de lignes associées à une ligne de code. J'ai donc refait l'enregistrement pour me donner tout le code et il me semblait qu'il me manquait quelque chose. Voici le code complet:

Dim range1 As range 
Set range1 = ActiveSheet.range("AM23:AM184") 
Dim var1 As Variant 
Dim sArray() As String 
Dim i As Long 
var1 = range1.Value 

ReDim sArray(1 To UBound(var1)) 

For i = 1 To (UBound(var1)) 
    sArray(i) = var1(i, 1) 
Next 

ActiveSheet.ListObjects("Table1").range.AutoFilter Field:=3, Criteria1:=sArray, Operator:=xlFilterValues 

le « opérateur: = xlFilterValues ​​» était la partie clé que je manqué d'enregistrer la macro la première fois que l'enregistrement est arrêté prématurément

Questions connexes