Microsoft Excel에서 VBA의 자동 필터로 작업하고 있습니다. 필터링을 위해 배열을 처리하는 방법에 문제가 있습니다. 범위 A1에 워크 시트에서Excel VBA 자동 필터 배열
: 나는 (원래 문제를 이해하는 희망) 단순화 된 버전으로 내 원래의 문맥을 약화했습니다의 우리가 있다고 가정 해 봅시다, A5 Fruit
, Apple
, Banana
, Orange
및 Pear
, 각기. Fruit
이 열 머리글 인 자동 필터가 적용되었습니다.
아래 코드는 예상 된 결과 (Apple
, Banana
및 Orange
하지만 Pear
) 반환 실행 : 내가 맡은 프로젝트에서
Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
Criteria1:=Array("=*an*", "=*app*"), Operator:=xlFilterValues
것은, 필터 기준은 문자열 변수로 전달됩니다 위와 같이 작동합니다. 문제는 매 시간마다 모든 기준이 적용되는 것은 아니므로 그 중 일부는 효과가 없어야한다는 것입니다. 예를 들어
: B
와
Dim A As String, B As String, C As String
A = "=*an*"
B = Empty
C = "=*ap*"
Range("A1").Select
ActiveSheet.Range("A1:A5").AutoFilter Field:=1, _
Criteria1:=Array(A, B, C), Operator:=xlFilterValues
는 (가, 널 (null) 왼쪽 Empty
로 설정, 또는 =*
같은 와일드 카드를 사용하든)가 반환에게 레코드를 필터링하지 믹스에 던져. 그러나 실제 기준 배열에서 B
을 Empty
(하드 코딩 됨)으로 대체하면 예상 된 결과가 반환됩니다.
ListObject의 일부인 AutoFilter를 사용했지만 비슷한 코드를 사용했습니다. 이 시점에서 내가 생각할 수있는 유일한 것은 구분 기호가있는 문자열을 필터에 연결하고 Array 변수로 분할하는 것입니다 (정확한 크기이므로 콜렉션의 설정되지 않은 항목이 같은 방식으로 엉망이므로 표준 변수는 않습니다). 그러나 그것은 직관력이없고 귀찮은 것처럼 보입니다.
내가 여기에 뭔가 분명한 것을 놓치고 있습니까?
너무 늦게,하지만 난 당신이 빠른 루프에 추가하지 않는 한 이미 사전에 존재하는 키를 사용하여 항목을 추가하지 않습니다 당신이 사전을 채우기에 조건을 생략 할 수 있다고 생각합니다. – AntiDrondert
@AntiDrondert 예 Exists 검사를 생략 할 수는 있지만 'filterDic (a) = a'를 암시 적으로 수행하는 데 필요한 Add 메소드를 사용할 수 없습니다. –