Bagaimana cara saya me-refresh ulang filter otomatis Excel saat data diubah?
Use case: Saya mengubah nilai satu sel ke nilai yang difilter. Saya ingin melihat baris saat ini menghilang tanpa harus melakukan hal lain.
Bagaimana cara saya me-refresh ulang filter otomatis Excel saat data diubah?
Use case: Saya mengubah nilai satu sel ke nilai yang difilter. Saya ingin melihat baris saat ini menghilang tanpa harus melakukan hal lain.
Jawaban:
Saya menemukan bahwa ketika saya bekerja dengan tabel, ini tidak berhasil. Filter tidak ada di lembar tetapi di meja. kode ini berhasil
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
.AutoFilter.ApplyFilter
End With
End Sub
Saya menemukan informasi di sini: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
Klik kanan pada nama sheet Anda, pilih "Lihat Kode" dan tempel kode di bawah ini. Setelah menempel, klik ikon Excel di bawah "File" di kiri atas, atau ketik Alt-F11, untuk kembali ke tampilan spreadsheet.
Ini akan memungkinkan penyegaran otomatis. Jangan lupa untuk menyimpan file dalam format dengan kebohongan dukungan makro .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
Saya menggunakan VBA / Makro berdasarkan Worksheet_Change
acara juga, tetapi pendekatan saya sedikit berbeda ... Ok, pertama kode dan kemudian penjelasannya:
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
(Gunakan kombinasi tombol Alt+ F11untuk membuat panel pengembangan muncul dan tempel kode ke lembar kerja yang berisi filter yang ingin Anda segarkan secara otomatis.)
Dalam contoh saya, saya mengasumsikan memiliki filter sederhana pada satu kolom (L dalam kasus saya) dan bahwa rentang data saya ada di baris dari 1 (bahkan jika mungkin berisi tajuk) ke 126 (pilih nomor yang cukup hebat untuk dijadikan Tentu). Operasi ini sederhana: karena ada sesuatu yang berubah pada lembar saya, filter pada rentang yang ditentukan akan dihapus / diterapkan kembali sehingga untuk membuatnya segar. Yang perlu sedikit penjelasan di sini adalah Field dan Kriteria .
The Lapangan adalah bilangan bulat offset jangkauan. Dalam kasus saya, saya hanya memiliki satu filter kolom dan rentang dibuat oleh satu kolom (L) yang merupakan yang pertama dalam rentang (karena itu saya menggunakan 1 sebagai nilai).
The Kriteria adalah string yang menjelaskan filter untuk diterapkan ke berbagai data. Dalam contoh saya, saya ingin menunjukkan hanya baris di mana kolom L berbeda dari 0 (karenanya saya menggunakan "<> 0").
Itu saja. Untuk referensi lebih lanjut tentang metode Range.AutoFilter, lihat: https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
Hanya untuk mengkonsolidasikan jawaban:
Sorin mengatakan:
Klik kanan pada nama sheet Anda, pilih "Lihat Kode" dan tempel kode di bawah ini. Setelah menempel, klik ikon Excel di bawah "File" di kiri atas, atau ketik Alt-F11, untuk kembali ke tampilan spreadsheet.
Ini akan memungkinkan penyegaran otomatis. Jangan lupa untuk menyimpan file dalam format dengan dukungan makro .xlsm.
Dan Chris menggunakan kode ini (yang baru saja saya lakukan pada 2010):
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.AutoFilter.ApplyFilter
End Sub
Jika Anda tidak memperluas posting, Anda hanya akan melihat jawaban yang panjang! ;)
Maaf, rep komentar tidak mencukupi. (Admin, silakan memotong ini menjadi komentar di atas.) Respons pengguna "danicotra" dimulai dengan "Saya menggunakan VBA / Makro berdasarkan pada worksheet_Change event juga, tapi pendekatan saya ..." dengan
'filter hapus pertama
' kemudian terapkan lagi
adalah solusi yang tepat ketika menggunakan Excel 2007+. Namun .AutoFilter.ApplyFilter tidak valid di XL03 dan sebelumnya jadi saya menunjukkan cara di bawah ini.
Saya mohon agar para ahli dan guru yang benar membaca kode karena saya cukup yakin bahwa itu adalah bahan rak paling atas. Mungkin hitungan downvote yang tidak dapat dijelaskan pada jawaban ini dapat dibalik ketika orang melihat hal baik apa yang dilakukan di bawah.
danicotra menggunakan contoh sederhana. Sebenarnya, Anda dapat melakukan ini secara lebih umum. Asumsikan Dengan ActiveSheet untuk yang berikut (atau objek lembar lainnya):
Simpan rentang autofilter. Ini memiliki .AutoFilter.Filters.Count kolom, dan (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) baris, disimpan ke rngAutofilter
Kumpulkan dalam array myAutofilters masing-masing dari 4 properti masing-masing .AutoFilter.Filters.Count Item autofilter, berhati-hatilah agar Anda menghindari "Kesalahan yang ditentukan aplikasi" ketika .Pada atau .Operator salah. (myAutofilters akan direDim ke jumlah baris dan kolom pada langkah 1)
Matikan filter tetapi pertahankan dropdown dengan .ShowAllData
Untuk setiap Item filter yang. Pada menurut array yang disimpan, atur ulang 3 dari 4 properti masing-masing .AutoFilter.Filters.Count Item autofilter. Sekali lagi berhati-hatilah agar Anda menghindari "Kesalahan yang ditentukan aplikasi" ketika .Operator salah, jadi untuk setiap item "i",
rngAutofilter. Bidang AutoFilter: = i, Kriteria1: = myAutofilters (i, 2)
atau
rngAutofilter.AutoFilter Field: = i, Kriteria1: = myAutofilters (i, 2), Operator: = myAutofilters (i, 3), Kriteria2: = myAutofilters (i, 4)
Sekarang autofilter akan diaktifkan kembali, dalam kisaran yang sama seperti sebelum kode Anda dimulai, tetapi dengan autofilter diperbarui untuk perubahan data.
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
menggunakan "data, dari tabel" / kueri daya di excel, yang memberi kita opsi untuk menyegarkan data saat membuka file. (juga pengurutan otomatis, dan kolom indeks (nomor baris yang difilter secara otomatis)) Ini akan menghasilkan hasil di lembar lain. -Pilih data yang diperlukan menggunakan mouse (baris dan kolom) -Klik tab data, dari tabel -di kolom terakhir, kecualikan yang kosong (opsional, jika Anda ingin hanya menampilkan sel yang diisi) -menambahkan kolom, kolom indeks (opsional, jika Anda ingin menambahkan nomor baris ke hasil yang difilter) -Dekat dan memuat ke untuk mengedit lagi, klik pada tab permintaan, dan kemudian edit klik pada tab desain di excel, pada panah di bawah refresh, properti koneksi, menyegarkan data saat membuka file. diadaptasi dari: https://www.excelcampus.com/tips/sort-drop-down-lists-automatically/ bagian: 3. Menyortir Daftar Drop Down Menggunakan Power Query Anda juga dapat menyalin data dari sheet1 jika tidak kosong, misalnya bidang a1. salin ini ke bidang a1 di sheet2: = JIKA (Sheet1! A1 ""; Sheet1! A1; "")