데이터가 변경 될 때 Excel 자동 필터를 자동 새로 고치는 방법은 무엇입니까?


15

데이터가 변경 될 때 Excel 자동 필터를 자동 새로 고치는 방법은 무엇입니까?

유스 케이스 : 한 셀의 값을 필터링 된 값으로 변경합니다. 다른 작업을 수행하지 않고 현재 행이 사라지는 것을보고 싶습니다.


3
해당 코드를 Worksheet_Calculate () 이벤트 대신 Worksheet_Change () 이벤트에 넣을 때 작동하도록 할 수있었습니다.
F106dart

1
다른 사람이 당신이 한 일을 알고 질문이 해결되었다는 것을 알 수 있도록 이것을 대답으로하고 받아들이십시오.
jzd

Calculate가 매개 변수를 기대했기 때문에 다른 수정을해야했습니다. 이제 작동합니다!.
sorin

답변:


6

이것으로 코드를 교환하면 트릭도 수행하는 것처럼 보입니다 (적어도 Excel 2010에서는).

Private Sub Worksheet_Change(ByVal Target As Range)

    ActiveSheet.AutoFilter.ApplyFilter

End Sub

4

테이블 작업을 할 때 작동하지 않는 것을 발견했습니다. 필터는 시트가 아니라 테이블에있었습니다. 이 코드는 트릭을했다

Private Sub Worksheet_Change(ByVal Target As Range)
    With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
         .AutoFilter.ApplyFilter
    End With
End Sub

여기에서 정보를 찾았습니다 : http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp


1

시트 이름을 마우스 오른쪽 버튼으로 클릭하고 "코드보기"를 선택한 다음 아래 코드를 붙여 넣습니다. 붙여 넣은 후 왼쪽 상단의 "파일"아래에있는 Excel 아이콘을 클릭하거나 Alt-F11을 입력하여 스프레드 시트보기로 돌아갑니다.

자동 새로 고침이 활성화됩니다. 매크로를 지원하는 형식으로 파일을 저장하는 것을 잊지 마십시오 .xlsm.

Private Sub Worksheet_Change(ByVal Target As Range)

    If Me.FilterMode = True Then
        With Application
           .EnableEvents = False
           .ScreenUpdating = False
        End With

        With ActiveWorkbook
            .CustomViews.Add ViewName:="Mine", RowColSettings:=True
          Me.AutoFilterMode = False
            .CustomViews("Mine").Show
            .CustomViews("Mine").Delete
        End With


         With Application
           .EnableEvents = True
           .ScreenUpdating = True
        End With
    End If

End Sub

1

Worksheet_Change이벤트를 기반으로 VBA / 매크로도 사용 하지만 접근 방식이 약간 다릅니다 ... 먼저 코드와 설명을 차례로 사용하십시오.

Private Sub Worksheet_Change(ByVal Target As Range)
    ' first remove filter
    ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1        
    ' then apply it again
    ActiveSheet.Range("$L$1:$L$126").AutoFilter Field:=1, Criteria1:="<>0"
End Sub

( Alt+ F11키 조합을 사용하여 개발 패널을 표시하고 자동 새로 고치려는 필터가 포함 된 워크 시트에 코드를 붙여 넣습니다.)

내 예에서는 단일 열 (내 경우 L)에 간단한 필터가 있다고 가정하고 내 데이터 범위는 1 (제목이 포함되어 있더라도)에서 126 (최대 수를 선택하십시오) 확실한). 작업은 간단합니다. 시트에서 무언가가 변경되면 지정된 범위의 필터가 제거 / 다시 적용되어 새로 고쳐집니다. 여기서 약간의 설명이 필요한 것은 Field and Criteria 입니다.

필드 범위의 오프셋의 정수이다. 필자의 경우 단일 열 필터 만 있고 범위는 범위에서 첫 번째 인 단일 열 (L)로 만들어집니다 (따라서 1을 값으로 사용).

기준 데이터 범위에 적용하는 필터를 설명하는 문자열이다. 이 예에서는 L 열이 0과 다른 행만 표시하려고하므로 "<> 0"을 사용했습니다.

그게 다야. Range.AutoFilter 메서드에 대한 자세한 내용은 https://msdn.microsoft.com/en-us/library/office/ff193884.aspx를 참조하십시오.


0

답변을 통합하기 만하면됩니다.

소린의 말 :

시트 이름을 마우스 오른쪽 버튼으로 클릭하고 "코드보기"를 선택한 다음 아래 코드를 붙여 넣습니다. 붙여 넣은 후 왼쪽 상단의 "파일"아래에있는 Excel 아이콘을 클릭하거나 Alt-F11을 입력하여 스프레드 시트보기로 돌아갑니다.

자동 새로 고침이 활성화됩니다. 매크로 지원 .xlsm 형식으로 파일을 저장하는 것을 잊지 마십시오.

그리고 Chris는이 코드를 사용했습니다 (2010 년 방금 했음).

Private Sub Worksheet_Change(ByVal Target As Range)

    ActiveSheet.AutoFilter.ApplyFilter

End Sub

게시물을 확장하지 않으면 긴 답변 만 표시됩니다. ;)


-1

죄송합니다. 담당자의 의견이 충분하지 않습니다. (관리자, 위의 주석으로 자유롭게 잘라내십시오.) "Worksheet_Change 이벤트를 기반으로 VBA / 매크로를 사용하지만 '내
필터를 제거하십시오'라는 접근 방식으로 시작하는 사용자"danicotra "응답은
적용하십시오. 다시
엑셀 2007 이상을 사용하여 올바른 솔루션입니다. 그러나 .AutoFilter.ApplyFilter는 XL03 및 이전 버전에서는 유효하지 않으므로 아래 방법을 보여줍니다.

나는 진정한 전문가와 전문가가 코드를 읽는 것이 가장 좋습니다. 아마도 사람들이 아래에서 좋은 일이 무엇인지 알 때이 대답에 대한 설명 할 수없는 downvote 수를 되돌릴 수 있습니다.

danicotra는 간단한 예를 사용했습니다. 실제로는 더 일반적으로 수행 할 수 있습니다. 다음 (또는 다른 시트 개체)에 대해 ActiveSheet을 사용한다고 가정하십시오.

  1. 자동 필터 범위를 저장하십시오. rngAutofilter에 저장된 .AutoFilter.Filters.Count 열 및 (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) 행이 있습니다.

  2. .On 또는 .Operator가 false 일 때 "응용 프로그램 정의 오류"를 피하도록주의하면서 각 my.filter.Filters.Count 자동 필터 항목의 4 가지 속성 각각을 myAutofilters 배열로 수집하십시오. (myAutofilters는 1 단계의 행과 열 수로 다시 조정됩니다.)

  3. 필터를 끄고 .ShowAllData로 드롭 다운을 유지하십시오.

  4. 저장된 배열에 따라 켜짐 상태 인 각 필터 항목에 대해 각 .AutoFilter.Filters.Count 자동 필터 항목의 4 가지 속성 중 3 개를 재설정합니다. .Operator가 false 인 경우 "응용 프로그램 정의 오류"를 피하도록 다시주의하십시오. 각 항목 "i"에 대해
    rngAutofilter.AutoFilter Field : = i, Criteria1 : = myAutofilters (i, 2)
    또는
    rngAutofilter.AutoFilter Field : = i, Criteria1 : = myAutofilters (i, 2), Operator : = myAutofilters (i, 3), Criteria2 : = myAutofilters (i, 4)

이제 자동 필터는 코드가 시작되기 전과 동일한 범위에서 재구성되지만 데이터 변경을 위해 자동 필터가 업데이트됩니다.

Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
  'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
  'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
  Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
  iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
  If iNumActiveAutofilters < 1 Then
      Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
      Exit Sub
  End If
  ActiveSheet.ShowAllData

  Rem Here optionally do stuff which can include changing data or toggling autofilter columns

  For i = 1 To iNumAutofilters
      If myAutofilters(i, 1) Then
          If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
          Else
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
          End If
          Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
      End If
      'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
  Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
  Dim i As Long, iRowsAutofiltered As Long
  SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
  iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
  If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
  ReDim myAutofilters(1 To iNumAutofilters, 4)
  For i = 1 To iNumAutofilters
      myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
      If myAutofilters(i, 1) Then
          SaveAutoFilterInfo = SaveAutoFilterInfo + 1
          myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
          myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
          If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
              myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
          End If
      End If
  Next i
  iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
  Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function

왜 세계에서 누군가가이 유용한 해답을 내려 놓았 을까요? 여기에는 완전한 자립형 코드 (심히 테스트 된 코드)가 포함되어 있고 코드에 대한 자세한 설명이 포함되어 있습니까? 나는 진지하게 묻고있다. 사람들이 수퍼 유저에게 전문적인 도움을 원합니까, 아니면 귀찮게하지 않아야합니까? 상대적으로 자신을 높이기 위해 그냥 downvoting하는 트롤이 있습니까?
MicrosoftShouldBeKickedInNuts

1
최소한 투표에 대해서는 의견을 제시해야하므로 피드백을 사용하여 커뮤니티에 더 나은 서비스를 제공 할 수 있습니다. 관리자 여러분, 제가 제안하고 싶은 것입니다. 모든 다운 보트에 설명이 필요합니다. 나는 명백하게 하향 조정 된 많은 명백한 게시물을 보았습니다.이 게시물은 실제로 수퍼 유저에게 전염병으로 보입니다.
MicrosoftShouldBeKickedInNuts

-1
Excel에서 "테이블의 데이터"/ 전원 쿼리를 사용하면 파일을 열 때 데이터를 새로 고칠 수 있습니다.
(자동 정렬 및 색인 열 (자동으로 필터링 된 행 수))

다른 시트에 결과가 생성됩니다.

-마우스 (행 및 열)를 사용하여 필요한 데이터 선택
-테이블에서 데이터 탭을 클릭하십시오.
-마지막 열에서 공백을 제외하십시오 (채워진 셀만 표시하려는 경우 선택 사항).
-열 추가, 색인 열 (선택 사항, 필터링 된 결과에 행 번호를 추가하려는 경우)
-닫고

다시 수정하려면 검색어 탭을 클릭 한 다음 수정을 클릭하십시오.

Excel에서 디자인 탭을 클릭하고 아래 화살표에서 새로 고침, 연결 속성,
파일을 열 때 데이터를 새로 고칩니다.


https://www.excelcampus.com/tips/sort-drop-down-lists-automatically/에서 적응
부분 : 3. 파워 쿼리를 사용하여 드롭 다운 목록 정렬


필드 a1과 같이 비어 있지 않은 경우 sheet1에서 데이터를 복사 할 수도 있습니다.
이것을 sheet2의 a1 필드에 복사하십시오.
= IF (Sheet1! A1 ""; Sheet1! A1; "")

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.