데이터가 변경 될 때 Excel 자동 필터를 자동 새로 고치는 방법은 무엇입니까?
유스 케이스 : 한 셀의 값을 필터링 된 값으로 변경합니다. 다른 작업을 수행하지 않고 현재 행이 사라지는 것을보고 싶습니다.
데이터가 변경 될 때 Excel 자동 필터를 자동 새로 고치는 방법은 무엇입니까?
유스 케이스 : 한 셀의 값을 필터링 된 값으로 변경합니다. 다른 작업을 수행하지 않고 현재 행이 사라지는 것을보고 싶습니다.
답변:
테이블 작업을 할 때 작동하지 않는 것을 발견했습니다. 필터는 시트가 아니라 테이블에있었습니다. 이 코드는 트릭을했다
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
시트 이름을 마우스 오른쪽 버튼으로 클릭하고 "코드보기"를 선택한 다음 아래 코드를 붙여 넣습니다. 붙여 넣은 후 왼쪽 상단의 "파일"아래에있는 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
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를 참조하십시오.
답변을 통합하기 만하면됩니다.
소린의 말 :
시트 이름을 마우스 오른쪽 버튼으로 클릭하고 "코드보기"를 선택한 다음 아래 코드를 붙여 넣습니다. 붙여 넣은 후 왼쪽 상단의 "파일"아래에있는 Excel 아이콘을 클릭하거나 Alt-F11을 입력하여 스프레드 시트보기로 돌아갑니다.
자동 새로 고침이 활성화됩니다. 매크로 지원 .xlsm 형식으로 파일을 저장하는 것을 잊지 마십시오.
그리고 Chris는이 코드를 사용했습니다 (2010 년 방금 했음).
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
게시물을 확장하지 않으면 긴 답변 만 표시됩니다. ;)
죄송합니다. 담당자의 의견이 충분하지 않습니다. (관리자, 위의 주석으로 자유롭게 잘라내십시오.) "Worksheet_Change 이벤트를 기반으로 VBA / 매크로를 사용하지만 '내
필터를 제거하십시오'라는 접근 방식으로 시작하는 사용자"danicotra "응답은
적용하십시오. 다시
엑셀 2007 이상을 사용하여 올바른 솔루션입니다. 그러나 .AutoFilter.ApplyFilter는 XL03 및 이전 버전에서는 유효하지 않으므로 아래 방법을 보여줍니다.
나는 진정한 전문가와 전문가가 코드를 읽는 것이 가장 좋습니다. 아마도 사람들이 아래에서 좋은 일이 무엇인지 알 때이 대답에 대한 설명 할 수없는 downvote 수를 되돌릴 수 있습니다.
danicotra는 간단한 예를 사용했습니다. 실제로는 더 일반적으로 수행 할 수 있습니다. 다음 (또는 다른 시트 개체)에 대해 ActiveSheet을 사용한다고 가정하십시오.
자동 필터 범위를 저장하십시오. rngAutofilter에 저장된 .AutoFilter.Filters.Count 열 및 (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) 행이 있습니다.
.On 또는 .Operator가 false 일 때 "응용 프로그램 정의 오류"를 피하도록주의하면서 각 my.filter.Filters.Count 자동 필터 항목의 4 가지 속성 각각을 myAutofilters 배열로 수집하십시오. (myAutofilters는 1 단계의 행과 열 수로 다시 조정됩니다.)
필터를 끄고 .ShowAllData로 드롭 다운을 유지하십시오.
저장된 배열에 따라 켜짐 상태 인 각 필터 항목에 대해 각 .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
Excel에서 "테이블의 데이터"/ 전원 쿼리를 사용하면 파일을 열 때 데이터를 새로 고칠 수 있습니다. (자동 정렬 및 색인 열 (자동으로 필터링 된 행 수)) 다른 시트에 결과가 생성됩니다. -마우스 (행 및 열)를 사용하여 필요한 데이터 선택 -테이블에서 데이터 탭을 클릭하십시오. -마지막 열에서 공백을 제외하십시오 (채워진 셀만 표시하려는 경우 선택 사항). -열 추가, 색인 열 (선택 사항, 필터링 된 결과에 행 번호를 추가하려는 경우) -닫고 다시 수정하려면 검색어 탭을 클릭 한 다음 수정을 클릭하십시오. Excel에서 디자인 탭을 클릭하고 아래 화살표에서 새로 고침, 연결 속성, 파일을 열 때 데이터를 새로 고칩니다. https://www.excelcampus.com/tips/sort-drop-down-lists-automatically/에서 적응 부분 : 3. 파워 쿼리를 사용하여 드롭 다운 목록 정렬 필드 a1과 같이 비어 있지 않은 경우 sheet1에서 데이터를 복사 할 수도 있습니다. 이것을 sheet2의 a1 필드에 복사하십시오. = IF (Sheet1! A1 ""; Sheet1! A1; "")