Note: The other languages of the website are Google-translated. Back to English
English English

Jak automaticky znovu použít automatický filtr při změně dat v aplikaci Excel?

V aplikaci Excel, když použijete Filtr funkce filtrování dat, výsledek filtru se nezmění automaticky se změnami dat ve vašich filtrovaných datech. Například když filtruji všechna jablka z dat, změním nyní jedno z filtrovaných dat na BBBBBB, ale výsledek se nezmění stejně jako následující snímek obrazovky. V tomto článku budu hovořit o tom, jak automaticky znovu použít automatický filtr při změně dat v aplikaci Excel.

obnovovací filtr doc auot 1

Při změně dat pomocí kódu VBA automaticky znovu použít automatický filtr


šipka modrá pravá bublina Při změně dat pomocí kódu VBA automaticky znovu použít automatický filtr

Za normálních okolností můžete data filtru aktualizovat kliknutím na funkci Znovu použít, ale zde vám představím kód VBA, který automaticky obnoví data filtru při změně dat, postupujte takto:

1. Přejít na list, který chcete automaticky aktualizovat filtr při změně dat.

2. Klikněte pravým tlačítkem na kartu listu a vyberte Zobrazit kód z kontextové nabídky ve vyskakovacím okně Microsoft Visual Basic pro aplikace okno, zkopírujte a vložte následující kód do prázdného okna modulu, viz screenshot:

Kód VBA: Automatické opětovné použití filtru při změně dat:

Private Sub Worksheet_Change(ByVal Target As Range)
   Sheets("Sheet3").AutoFilter.ApplyFilter
End Sub

obnovovací filtr doc auot 2

Poznámka: Ve výše uvedeném kódu, Sheet 3 je název listu s automatickým filtrem, který používáte, změňte jej prosím podle svých potřeb.

3. A poté uložte a zavřete toto okno kódu, nyní, když změníte filtrovaná data, Filtr funkce se automaticky obnoví najednou, viz screenshot:

obnovovací filtr doc auot 3


Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2019 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Kompletní funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50% a omezuje stovky kliknutí myší každý den!
officetab dno
Komentáře (36)
Hodnocení 5 z 5 · 1 hodnocení:
Tento komentář byl moderátorem webu minimalizován
ahoj, jak to všechno mohu použít v google finance? Tks
Tento komentář byl moderátorem webu minimalizován
Pěkné.. opravdu to potřebuji
Tento komentář byl moderátorem webu minimalizován
Chci, aby změna na jednom listu způsobila automatické filtrování několika dalších listů, jak změním tento kód? Příklad: ListA je změněn, což způsobí, že List1, List2 a List3 použijí svůj automatický filtr. Dík!
Tento komentář byl moderátorem webu minimalizován
Dělám to pro přední stranu listu, pokud je buňka nastavena na = list1! E6. Při změně nepoužije filtr. Pokud změním číslo na zadním listu, upraví se přední, ale nefiltruje. Pokud vzorec upravíte tak, aby filtroval kritéria, použije se znovu. Co můžu dělat?
Tento komentář byl moderátorem webu minimalizován
Pomocí tohoto
Private Sub Work_Change (ByVal Target As Range)
Activesheet.AutoFilter.ApplyFilter
End Sub
Tento komentář byl moderátorem webu minimalizován
Vůbec se mi to nedaří. Snažím se převzít z hlavního listu a nechat ho převzít pouze úlohy, které se vztahují na určité projektové manažery na každé kartě s jejich jmény. Také chci, aby se při provádění změn automaticky obnovoval.
Tento komentář byl moderátorem webu minimalizován
tento příkaz je falešný, nedělej nic. úplně zkusit, ale k ničemu.
Tento komentář byl moderátorem webu minimalizován
Funguje to skvěle a šetří mi spoustu času a zmatků.. Opravdu skvělý tip.. Mnohokrát děkuji za pomoc
Tento komentář byl moderátorem webu minimalizován
Toto řešení funguje perfektně. Díky, že jsi to napsal! Pokud má někdo potíže, je třeba zvážit několik věcí.

Nejprve se událost Worksheet_Change volá list po listu. To znamená, že pokud máte více listů s filtry, které potřebujete aktualizovat, budete muset reagovat na všechny tyto události. Jeden podprogram Worksheet_Change pro každý list, nikoli jeden podprogram pro celý sešit (jedna výjimka – viz poznámka níže).

Za druhé, a v návaznosti na první, kód musí být umístěn do modulu kódu specifického pro pracovní list, který má být monitorován. Jakmile se dostanete do editoru VB, je snadné (neúmyslně) přepínat moduly kódu, takže je třeba dbát na to, abyste jej umístili specificky pro list, který chcete sledovat, zda nedošlo ke změnám dat.

Za třetí, toto je nepotvrzené, ale možná jde o chybu. Příklad používá názvy listů "List1", "List2" atd. Pokud jste listy přejmenovali, možná budete muset aktualizovat kód. Všimněte si, že v příkladu byl List7 pojmenován "dfdf". Pokud byste tam chtěli aktualizovat filtr, museli byste použít;
Listy("dfdf").AutoFilter.ApplyFilter
ne;
Listy("List7").AutoFilter.ApplyFilter

Možná by bylo dobré článek aktualizovat včetně příkladu s přejmenovaným listem.


A konečně, pokud chcete sledovat změny dat na jednom listu, ale aktualizovat filtry na více listech, potřebujete pouze jeden podprogram umístěný v modulu kódu listu, který monitorujete. Kód bude vypadat nějak takto;

# (kód musí být umístěn v listu, aby bylo možné sledovat změny dat)
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Listy("List1").AutoFilter.ApplyFilter
Listy("List2").AutoFilter.ApplyFilter
Listy("List3").AutoFilter.ApplyFilter
Listy("List4").AutoFilter.ApplyFilter
End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den, Miku,
Děkuji za podrobné vysvětlení.
Tento komentář byl moderátorem webu minimalizován
Skvělé vysvětlení, děkuji.

Jak ale spustím Sheets("Sheet3").AutoFilter.ApplyFilter, když je vytvořen nový list?
Protože nemohu napsat kód, který jste zmínil, na list, který ještě neexistuje
Tento komentář byl moderátorem webu minimalizován
Skvěle Děkuji!
Tento komentář byl moderátorem webu minimalizován
funguje jako šampión a tak jednoduché. Děkuji mnohokrát!
Tento komentář byl moderátorem webu minimalizován
Vypadá to skvěle. Můžete mi prosím říci, jak totéž udělat pro řazení, nikoli filtr?
Tento komentář byl moderátorem webu minimalizován
Ahoj Chrisi,
Možná, že váš problém může vyřešit následující článek, podívejte se prosím:

https://www.extendoffice.com/documents/excel/2592-excel-auto-sort-by-value.html

Zkuste to!
Tento komentář byl moderátorem webu minimalizován
Ahoj, funguje to skvěle, ale pouze při ruční změně dat v tabulce.

Mám filtrovanou tabulku ve stylu „top ten/leader board“, která je vyplněna zadáním dat na samostatném listu (ve skutečnosti data procházejí 3 listy, než se dostanou do tabulky). Když se změní data v listu pro zadávání dat, aktualizuje se tabulka výsledkové tabulky, ale filtr se automaticky neobnovuje.
Nějaké nápady, jak to udělat?
Velmi zavázán.
Alex
Tento komentář byl moderátorem webu minimalizován
Mám s ní stejný problém. Může nám někdo pomoci?
Tento komentář byl moderátorem webu minimalizován
Mám stejný problém. Snažím se automaticky filtrovat list 2, který obsahuje data pocházející z listu 1. funguje to pouze tehdy, když změním data na listu 2, nikoli na listu 1.
Nějaké myšlenky na to, proč to nefunguje a jak to opravit?
Tento komentář byl moderátorem webu minimalizován
Ahoj, zdá se, že to funguje skvěle, ale mám problémy, když je na stejném listu (záložce) více než jeden filtr. Převedl jsem rozsah buněk na tabulku, abych umožnil samostatné a vícenásobné filtry v rámci stejného listu. Tento příklad se zobrazuje pouze při aktualizaci jedné z tabulek/filtrů. Nějaké návrhy, jak aktualizovat VŠECHNY tabulky/filtry v listu?

Mnohokrát děkuji,

Tomáš
Tento komentář byl moderátorem webu minimalizován
Ahoj, Tom,
Kód v tomto článku funguje dobře pro více tabulek v listu, stačí po změně dat stisknout klávesu Enter namísto kliknutí na jinou buňku.
Zkuste to prosím.
Tento komentář byl moderátorem webu minimalizován
terima Kasih

sangat membantu
Tento komentář byl moderátorem webu minimalizován
Tento komentář byl moderátorem webu minimalizován
Brilantní a jednoduché na provedení. Díky moc!
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Tento kód funguje skvěle, díky moc.

Mám s tím však jeden malý problém - pokud změním hodnoty v jakékoli buňce, která není součástí tabulky, zobrazí se mi Runtime error:

"Chyba běhu '91':

Objektová proměnná nebo S blokovou proměnnou není nastavena"


Mám možnosti Ladit nebo Ukončit, možnost Pokračovat je zašedlá. Mohu kliknout na "Konec" a kód stále funguje, ale je velmi nepříjemné zabývat se tímto vyskakovacím oknem po každé změně.

Má někdo podobnou zkušenost nebo radu jak to vyřešit?

Díky!
Tento komentář byl moderátorem webu minimalizován
Dobrý den, Davide,
Chcete-li vyřešit svůj problém, můžete použít následující kód:

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
On Error Resume Next
Listy("List3").AutoFilter.ApplyFilter
End Sub

Zkuste to, doufám, že vám to pomůže!
Tento komentář byl moderátorem webu minimalizován
Ahoj Skyyang,


Implementoval jsem vaše řešení a je skutečně opraveno.

Díky moc!
Tento komentář byl moderátorem webu minimalizován
Dobrý den, měl jsem stejný problém, vložil jsem nový kód a změnil název listu, ale pak se nic neděje, filtr se neaktualizuje
Tento komentář byl moderátorem webu minimalizován
stejný problém i zde, nějaké aktualizované řešení?
Tento komentář byl moderátorem webu minimalizován
V Office 365 to vůbec nefunguje
nějaké návrhy
Tento komentář byl moderátorem webu minimalizován
Ahoj, díky moc za pomoc. Něco mi nefunguje správně. Tady je příběh.

List1 obsahuje proměnná data. List3 obsahuje statická data a filtr. Kritéria filtru na "List3" pochází z Listu1. List1 obsahuje data, která pocházejí z filtrovaných výsledků na Listu3.

List3 má kód:

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Range("A1:U14").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("A22:U23"), CopyToRange:=Range("A25:U26"), Unique:=False
End Sub

Funguje to skvěle, když dělám cokoli na Listu 3. Žádné problémy. Děkuji!

Nejprve jsem měl kód na Listu 1:

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Listy("List3").AutoFilter.ApplyFilter
End Sub

Což vedlo k chybě „Chyba běhu 91, objektová proměnná nebo s nenastaveným blokem“.

Změnil jsem kód na základě komentářů na:

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
On Error Resume Next
Listy("List3").AutoFilter.ApplyFilter
End Sub

Nyní se mi chyba nezobrazuje, ale data na List3 a tedy List1 se nemění. Jinými slovy, k události použití filtru na List3 nedojde, když provedu změnu na Listu1. Nezáleží na tom, jestli se trefím nebo klikněte na jinou buňku po změně buňky kritérií filtru List3, která je nastavena na List1.

Kromě toho očekávám, že pokud bych chtěl mít na Listu 1 více buněk, které způsobovaly filtry na Listech 4 a 5 kromě Listu 3, potřeboval bych kód na Listu 1 ke čtení:

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
On Error Resume Next
Listy("List3").AutoFilter.ApplyFilter
Listy("List4").AutoFilter.ApplyFilter
Listy("List5").AutoFilter.ApplyFilter
End Sub

Ještě jednou díky!
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Toto je skvělá část kódu, děkuji. Jediný problém, který mám, je, že používám rozbalovací nabídku na samostatném listu grafu. Pokud ručně změním hodnotu v buňce spojené s rozevíracím seznamem, funguje to. Ale když se pokusím použít pouze rozbalovací nabídku, neaktualizuje se. Nějaké nápady?
Tento komentář byl moderátorem webu minimalizován
Ve skutečnosti mám data z jiného souboru aplikace Excel, která byla importována do listu Excel s názvem "Databáze". Poté tato data importuji do stejného souboru Excel, ale do jiného ExcelSheet "Přehled". Chci, aby se při změně dat v původním zdroji filtr použil v listu "Přehled". Předem děkuji tomu, kdo mi může pomoci :). PS nemůže používat VBA v prvním excelsheetu
Zatím zde nejsou žádné komentáře
Načíst další
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění