2016-08-01 2 views
3

"낮은 CPM 1"워크 시트의 데이터를 배열로 컴파일 한 다음 다음을 기준으로 현재 활성 워크 시트를 필터링하는 것이 좋습니다. 이 배열. 매크로가 필터에 영향을 미치는 것처럼 보이지만 값이 필터링되지 않습니다. 이 문제에 대한 도움은 크게 감사 할 것입니다.VBA에서 다른 워크 시트의 값이있는 배열을 기반으로 한 워크 시트의 행을 필터링하는 데 문제가 있습니다

Sub Macro1() 

Dim CPM1Array(0 To 300) As Variant 

For i = 2 To UBound(CPM1Array) 
    CPM1Array(i) = Sheets("Low CPM 1").Cells(i, 2).Value 
Next i 

    ActiveSheet.Range("$A$1:$H$251").AutoFilter Field:=3, Criteria1:=("<>1 to Ubound(CPM1Array)"), Operator:=xlFilterValues 

End Sub 
+1

ActiveSheet.Range'처럼 배열에 직접 기준을 설정하십시오 ("$ A $ 1 : $ H $ 251 "). 자동 필터 필드 : = 3, Criteria1 : = CPM1Array, 연산자 : = xlFilterValues' 그리고 배열의 값을 필터링합니다. – Mikegrann

답변

2

원하는 것을 얻기 위해 자동 필터를 사용하는 간단한 방법은 없습니다. 당신은 사용할 수 없습니다 Criteria1:="<>MyArray"

대체

  1. 우리는 우리가 원하지 않는 값 알고. 관련 열의 값이 무엇인지 알 수 있습니다.
  2. 해당 열의 값을 배열에 저장 한 다음 원하지 않는 값을 가진 배열과 비교하여 불필요한 값을 제거하기 만하면됩니다.
  3. 어레이에서 빈 셀을 제거하십시오.
  4. 마지막 어레이를 자동 필터로 전달하십시오. 액션에서

은의 우리의 워크 시트는 아래 그림과 같이 보이는 가정 해 봅시다. 나는 단지 15 행의 예를 들고있다.

enter image description here

코드

Sub Sample() 
    Dim ws As Worksheet 
    Dim MyAr(1 To 5) As String 
    Dim tmpAr As Variant, ArFinal() As String 
    Dim LRow As Long 

    ReDim ArFinal(0 To 0) 

    Set ws = ActiveSheet 

    '~~> Creating an array of values which we do not want 
    For i = 1 To 5 
     MyAr(i) = i 
    Next i 

    With ws 
     '~~> Last Row of Col C sice you will filter on 3rd column 
     LRow = .Range("C" & .Rows.Count).End(xlUp).Row 

     '~~> Storing the values form C in the array 
     tmpAr = .Range("C2:C" & LRow).Value 

     '~~> Compare and remove values which we do not want 
     For i = 1 To LRow - 1 
      For j = 1 To UBound(MyAr) 
       If tmpAr(i, 1) = MyAr(j) Then tmpAr(i, 1) = "" 
      Next j 
     Next i 

     '~~> Remove blank cells from the array by copying them to a new array 
     For i = LBound(tmpAr) To UBound(tmpAr) 
      If tmpAr(i, 1) <> "" Then 
       ArFinal(UBound(ArFinal)) = tmpAr(i, 1) 
       ReDim Preserve ArFinal(0 To UBound(ArFinal) + 1) 
      End If 
     Next i 

     '~~> Filter on values which you want. Change range as applicable 
     .Range("$A$1:$H$15").AutoFilter Field:=3, Criteria1:=ArFinal, Operator:=xlFilterValues 
    End With 
End Sub 

출력

enter image description here

+0

위대한 작품, 정말 고마워! –

관련 문제