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

Jak přesunout celý řádek na jiný list na základě hodnoty buňky v aplikaci Excel?

Tento článek vám pomůže při přesunutí celého řádku na jiný list na základě hodnoty buňky.

Přesuňte celý řádek na jiný list na základě hodnoty buňky pomocí kódu VBA
Přesuňte celý řádek na jiný list na základě hodnoty buňky pomocí Kutools pro Excel


Přesuňte celý řádek na jiný list na základě hodnoty buňky pomocí kódu VBA

Jak je ukázáno na níže uvedeném snímku obrazovky, je třeba přesunout celý řádek z Listu1 do Listu2, pokud ve sloupci C existuje konkrétní slovo „Hotovo“. Můžete vyzkoušet následující kód VBA.

1. lis Další+ F11 současně otevřete Microsoft Visual Basic pro aplikace okno.

2. V okně Microsoft Visual Basic pro aplikace klepněte na Vložit > Modul. Poté zkopírujte a vložte níže uvedený kód VBA do okna.

VBA code 1: Move entire row to another sheet based on cell value

Sub Cheezy()
'Updated by Kutools for Excel 2017/8/28
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            xRg(K).EntireRow.Delete
            If CStr(xRg(K).Value) = "Done" Then
                K = K - 1
            End If
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Poznámka: V kódu, Sheet1 je list obsahující řádek, který chcete přesunout. A Sheet2 je cílový list, do kterého řádek najdete. "C: C„Je sloupec obsahující určitou hodnotu a slovo„Hotovo„Je určitá hodnota, na základě které přesunete řádek. Změňte je prosím podle svých potřeb.

3. zmáčkni F5 klíč ke spuštění kódu, poté bude řádek, který splňuje kritéria v Listu1, okamžitě přesunut do Listu2.

Poznámka: Výše ​​uvedený kód VBA odstraní řádky z původních dat po přesunutí do zadaného listu. Pokud chcete pouze kopírovat řádky na základě hodnoty buňky místo jejich mazání. Použijte níže uvedený kód VBA 2.

VBA code 2: Copy entire row to another sheet based on cell value

Sub MoveRowBasedOnCellValue()
'Updated by Extendoffice 2017/11/10
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
    If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Přesuňte celý řádek na jiný list na základě hodnoty buňky pomocí Kutools pro Excel

Pokud jste nováček v kódu VBA. Zde představuji Vyberte konkrétní buňky užitečnost Kutools pro Excel. Pomocí tohoto nástroje můžete snadno vybrat všechny řádky na základě určité hodnoty buňky nebo různých hodnot buňky v listu a zkopírovat vybrané řádky do cílového listu podle potřeby. Postupujte prosím následovně.

Před aplikací Kutools pro Excel, Prosím nejprve si jej stáhněte a nainstalujte.

1. Vyberte seznam sloupců obsahujících hodnotu buňky, podle které budete přesouvat řádky, a poté klikněte Kutools > vybrat > Vyberte konkrétní buňky. Viz snímek obrazovky:

2. V otvoru Vyberte konkrétní buňky dialogové okno vyberte Celá řada v Typ výběru vyberte část rovná v Specifický typ rozevíracího seznamu, zadejte hodnotu buňky do textového pole a poté klikněte na OK .

Další Vyberte konkrétní buňky Zobrazí se dialogové okno, které vám ukáže počet vybraných řádků a mezitím byly vybrány všechny řádky obsahující zadanou hodnotu ve vybraném sloupci. Viz snímek obrazovky:

3. zmáčkni Ctrl + C klávesy zkopírujte vybrané řádky a poté je vložte do požadovaného cílového listu.

Poznámka: Pokud chcete přesunout řádky do jiného listu na základě dvou různých hodnot buněk. Například můžete přesouvat řádky na základě hodnot buněk „Hotovo“ nebo „Zpracování“, můžete povolit Or stav v Vyberte konkrétní buňky zobrazeno dialogové okno níže:

  Pokud chcete mít bezplatnou (30denní) zkušební verzi tohoto nástroje, kliknutím jej stáhněte, a poté přejděte k použití operace podle výše uvedených kroků.


Související články:


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 (294)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Dobrý den, tento konkrétní návod mi opravdu pomohl oproti ostatním, které jsem viděl. Děkuji! Problém, který mám, je ten, že když změním požadovanou hodnotu na 'Zavřeno', musím pro přesun řádku spustit F5. Chtěl bych, aby se to pohybovalo automaticky. Jsem v Excelu nový, takže si velmi vážím vaší pomoci. Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("ECR Incident Tracker").UsedRange.Rows.Count J = Worksheets("Resolved Issues").UsedRange.Rows. Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Resolved Issues").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("ECR Incident Tracker").Range("B1:B" & I) Při chybě Obnovit další Application.ScreenUpdating = False pro každou xCell v xRg If CStr(xCell.Value) = "Uzavřeno" Then xCell.EntireRow.Copy Destination:=Worksheets("Resolved Issues").Range("A" & J + 1) xCell.EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den, snažím se zautomatizovat přesun buněk, aniž bych musel otevírat modul a také mačkat F5. Řešili jste někdy tuto otázku? Děkuji předem!
Tento komentář byl moderátorem webu minimalizován
Crystal dnes poskytla informace o tom, jak to udělat - podívejte se na stránku jedna tohoto vlákna, abyste viděli její odpověď. Automaticky přesune řádek s dnešním datem ve sloupci (v mém případě L) do jiného listu.
Tento komentář byl moderátorem webu minimalizován
Spouštím tento kód a pokouším se přesunout řádek na základě dnešního data ve sloupci I - Změnil jsem rozsah("B1:B" & I) na čtení Range(I1:I" & I). Změnil jsem " Hotovo“ ve vašem příkladu na Datum. Když se však dnešní datum objeví kdekoli v řádku, nejen ve sloupci I, jak je požadováno, řádek se přesune do alternativního listu. Nějaká představa, proč se to děje a jak mohu přesunout řádek pouze když je dnešní datum ve sloupci I, bez ohledu na to, zda je dnešní datum uvedeno v jiných sloupcích?
Tento komentář byl moderátorem webu minimalizován
Pokud bych chtěl mít mnoho hodnot a mnoho listů, na které bych mohl přesunout svůj řádek, musel bych napsat celý kód znovu s jinou hodnotou pro tuto buňku? To znamená, že když dám NA do jedné buňky, přejde na list Na, a když dám W#, přejde na špatný číselný list atd.
Tento komentář byl moderátorem webu minimalizován
ahoj, toto bylo velmi užitečné. Existuje způsob, jak to udělat, aniž byste museli přesunout řádek dat na druhý list, ale raději je zkopírovali? Takže data by zůstala na obou listech?
Tento komentář byl moderátorem webu minimalizován
Ahoj, kód byl velmi užitečný, ale místo kopírování celého řádku požaduji, aby se určitý výběr řádku přesunul na další list. jak mohu definovat rozsah místo celého řádku Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets(" List2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range( "C1:C" & I) Při chybě Obnovit další Application.ScreenUpdating = False pro každý xCell v xRg If CStr(xCell.Value) = "Done" Pak xCell.Celá řada.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Tento komentář byl moderátorem webu minimalizován
jaký by byl kód, kdybych chtěl zkopírovat řádky (konkrétní buňky) do jiného listu do konkrétních buněk? ALE také na základě hodnoty Příklad: barevné obrázky produktů řetězec bílý mixér 2 whiteblender2 černý odšťavňovač 3 blackjuicer3 červená tv 1 redtv1 zelená žehlička 4 greeniron4 Chtěl bych řetězec zkopírovat na jiný list, ale číslo ve sloupci obrázky říká, kolikrát se má zkopírovat (takže v tomto případě řetězec mixéru by měl být zkopírován ve 2 řadách
Tento komentář byl moderátorem webu minimalizován
Dobrý den, velmi pěkný kód, který funguje velmi dobře. Jak změnit tento kód tak, aby se řádky přesunuly z jedné tabulky do jiné tabulky namísto jednoho listu do druhého? Mnohokrát děkuji !
Tento komentář byl moderátorem webu minimalizován
Ahoj, pokouším se použít kód, ale na Dim xCell As Range se mi zobrazuje chyba syntaxe. Můžete mi prosím pomoci?
Tento komentář byl moderátorem webu minimalizován
Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets("Sheet2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range("C1:C" & I) On Error Resume Další Application.ScreenUpdating = False pro každý xCell v xRg If CStr(xCell.Value) = "Hotovo" Then xCell.EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) xCell. EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub jak lze přidat druhý list, aby se řádky přesunuly na list2?
Tento komentář byl moderátorem webu minimalizován
Co mám zadat, pokud chci jako svou hodnotu zahrnout jakékoli datum? Takže řádek zůstane na listu 1, pokud nemá žádné datum, a přesune se na list 2, pokud ano?
Tento komentář byl moderátorem webu minimalizován
[quote] ahoj, to bylo velmi užitečné. Existuje způsob, jak to udělat, aniž byste museli přesunout řádek dat na druhý list, ale raději je zkopírovali? Takže data by zůstala na obou listech?Od Maddie[/quote] řešil to někdo
Tento komentář byl moderátorem webu minimalizován
Odstraňte tento "xCell.EntireRow.Delete" z kódu
Tento komentář byl moderátorem webu minimalizován
Když smažu tento řádek kódu a znovu spustím makro, Excel zamrzne. Proč a jak to mám opravit?? Chci, aby data byla na obou listech a nebyla smazána z originálu. TIA
Tento komentář byl moderátorem webu minimalizován
existuje na to odpověď? Moje zamrzá také Rád bych zkopíroval, ale nesmazal řádek
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Níže uvedený kód VBA vám může pomoci pouze zkopírovat řádky namísto jejich mazání.

Sub Cheezy()
Dim xRg jako rozsah
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, pak J = 0
End If
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = False
Pro K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Hotovo" Pak
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
End If
další
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj, hledám nějakou variantu na tohle. Potřebuji, aby skript běžel nepřetržitě nebo selže, kdykoli se změní hodnota v tomto konkrétním poli. Samotný kód funguje, ale musí být spuštěn nezávisle. Chtěl bych, aby to bylo automatizované. Může někdo pomoci?

Kromě toho, pokud chci, aby kopíroval pouze konkrétní buňky v rozsahu, jak je toho dosaženo?
Tento komentář byl moderátorem webu minimalizován
milý Robe,

Pokud potřebujete, aby se skript spouštěl automaticky při změně buněk v tomto poli, může vám pomoci níže uvedený kód VBA. Klikněte prosím pravým tlačítkem na aktuální list (list s řádky, který se automaticky přesune) a poté z kontextové nabídky vyberte Zobrazit kód. Poté zkopírujte a vložte níže uvedený skript VBA do okna Kód.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)

Dim xCell As Range

Dim I As Long
On Error Resume Next

Application.ScreenUpdating = False

Nastavit xCell = Cíl(1)
Pokud xCell.Value = "Hotovo" Pak
I = Worksheets("Sheet2").UsedRange.Rows.Count
Pokud I = 1 Pak

If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, pak I = 0

End If

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
End If

Application.ScreenUpdating = True

End Sub


Pro vaši druhou otázku, máte na mysli pouze zkopírovat několik buněk místo celého řádku? Nebo byste prosím poskytli snímek obrazovky vaší otázky? Děkuji!

S pozdravem, Crystal
Tento komentář byl moderátorem webu minimalizován
Krystal,


Vaše pomoc je více než potřebná :)



Jak zde můžeme přidat další kritéria, například bych chtěl přenést Completed vedle Hotovo:


Soukromá dílčí tabulka_Změna (ByVal Target As Range)

Dim xCell As Range

Dim I As Long
On Error Resume Next

Application.ScreenUpdating = False

Nastavit xCell = Cíl(1)
Pokud xCell.Value = "Hotovo" Pak
I = Worksheets("Sheet2").UsedRange.Rows.Count
Pokud I = 1 Pak

If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, pak I = 0

End If

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
End If

Application.ScreenUpdating = True

End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal
Toto je nejužitečnější informace, kterou jsem na webu našel, a toto makro dělá, co chci. Ale přesouvám řádky z jedné tabulky do druhé tabulky - a s tímto makrem se informace přesune o první volný řádek mimo tabulku, ne o další volný řádek v tabulce? Můžete pomoci?
Tento komentář byl moderátorem webu minimalizován
Spouštím tento kód a pokouším se přesunout řádek na základě dnešního data ve sloupci I - Změnil jsem rozsah("B1:B" & I) na čtení Range(I1:I" & I). Změnil jsem " Hotovo“ ve vašem příkladu na Datum. Když se však dnešní datum objeví kdekoli v řádku, nejen ve sloupci I, jak je požadováno, řádek se přesune do alternativního listu. Nějaká představa, proč se to děje a jak mohu přesunout řádek pouze když je dnešní datum ve sloupci I, bez ohledu na to, zda je dnešní datum uvedeno v jiných sloupcích?
Tento komentář byl moderátorem webu minimalizován
Drahý Davide,

Kód pro mě funguje dobře po změně rozsahu a hodnoty proměnné k dnešnímu dni. Formát data ve vašem kódu musí odpovídat formátu data, který jste použili v listu. Nebo je pro vás vhodné přiložit pracovní list?
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal,


Není mi jasné, co máte na mysli, když říkáte, že formát data kódu a tabulky se musí shodovat - nejsem odborník na VB, spíše začátečník. Ve své tabulce zadám dnešní datum do sloupce F jako datum zadání řádku ve formátu ctrl + :. Datum expirace zadávám do sloupce „I“ ve formátu mm/dd/rrrr. To však způsobuje problémy při zadávání nového řádku a zadávání dnešního data do sloupce F, protože jakmile je zadáno, řádek se přesune do nového listu. Navíc se neobjeví dodatečný kód, který se má spustit při každém otevření sešitu. běžet, aniž bych ho k tomu nutil. Omlouvám se za to, co by pro vás mohlo být velmi triviální problémy, ale o těchto problémech prostě nemůžu slyšet. Jakákoli pomoc by byla oceněna.
Tento komentář byl moderátorem webu minimalizován
Drahý Davide,

Zkoušel jsem přesně to, co jste uvedli výše, ale problémová dávka se v mém případě neobjevila. Můžete poskytnout svou verzi Excelu? Potřebuji více informací, které mi pomohou vyřešit tento problém. Omlouvám se, že vás znovu obtěžuji.

S pozdravem, Crystal
Tento komentář byl moderátorem webu minimalizován
Crystal, toto jsou příslušné pracovní listy. V zkopírovaném kódu uvidíte, že hledám "až" dnešní datum ve sloupci L a pokud je "až" a včetně dnešního data v tomto sloupci, chci přesunout řádek obsahující toto datum do nového listu. V současné době, když kdekoli v řádku zadávám dnešní datum (například sloupec F, pokud je výzva vydána dnes), automaticky se přesune celý řádek do archivované tabulky. Dnešní datum obvykle zadávám pomocí kombinace ctrl + :, obvykle ve sloupci F.
Navíc bych chtěl, aby k tomuto přesunu došlo při otevření sešitu. V současné době musím přejít na zobrazení kódu a poté stisknout F5. Uvítám jakoukoli radu, jak na to.
Tento komentář byl moderátorem webu minimalizován
Bohužel můj sešit s povoleným makrem se nenahraje, protože se uvádí, že formát není podporován. Ty jsou v Excelu 2016
Tento komentář byl moderátorem webu minimalizován
Drahý Davide,

K jeho dosažení vám může pomoci následující kód VBA.

Soukromá podřízená sešit_Open ()
Dim xRg jako rozsah
Dim xCell As Range
Dim I As Long
Dim J As Long
I = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").UsedRange.Rows.Count
J = Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Pak J = 0
End If
Set xRg = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").Rozsah ("L1:L" & I)
On Error Resume Next
Application.ScreenUpdating = False
Pro každý xCell In xRg
Pokud CStr(xCell.Value) = Datum Potom
xCell.EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Range("A" & J + 1)
xCell.EntireRow.Delete
J = J + 1
End If
další
End Sub

Poznámky:
1. Skript VBA musíte vložit do okna kódu ThisWorkbook;
2. Váš sešit je třeba uložit jako sešit Excel s podporou maker.

Po výše uvedené operaci se pokaždé, když otevřete sešit, přesune celý řádek do ARCHIVOVANÉHO listu, pokud buňka ve sloupci L dosáhne dnešního data.

Bestie s pozdravem, Crystal
Tento komentář byl moderátorem webu minimalizován
Díky Crystal,
Funguje to skvěle, pokud je dnešní datum dosaženo ve sloupci L. Existuje nějaký způsob, jak zahrnout aktuální datum také do sloupce L, takže pokud sešit nekontroluji několik dní, automaticky zahrne dřívější data před dnešní? Moc děkuji za Vaši pomoc.
Tento komentář byl moderátorem webu minimalizován
Drahý Davide,

Promiňte, nejsem si jistý, zda jsem dostal vaši otázku. Pokud ano, všechny řádky budou přesunuty, pokud se ve sloupci L objeví dřívější data?
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal,

Pokud svůj list několik dní neotevřu a datum zadané ve sloupci L již uplynulo, tj. datum v buňce ve sloupci L je 11. září 2017, ale neotevřu list do 13. září, stejně jako všechny položky ve sloupci L, které chcete zkontrolovat pro každé datum až do dnešního data, přesuňte odpovídající řádky na nový list. V současné době s kódem, který jste laskavě poskytli, jsou do nového listu přesunuty pouze řádky s aktuálním datem ve sloupci L a ponechány za řádky s dřívějším datem ve sloupci L, které aktuálně přesouvám ručně do nového listu. Díky za vaši pomoc.
Tento komentář byl moderátorem webu minimalizován
Drahý Davide,



Chápu váš názor. Zkuste prosím níže uvedený skript VBA. Po otevření sešitu se všechny řádky s daty až do dnešního data ve sloupci L přesunou na nový zadaný list.



Soukromá podřízená sešit_Open ()
Dim xRg jako rozsah
Dim xRgRtn jako rozsah
Dim xCell As Range
Dim xLastRow As Long
Dim I As Long
Dim J As Long
On Error Resume Next
xLastRow = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").UsedRange.Rows.Count
Pokud xLastRow < 1, pak Exit Sub
J = Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Pak J = 0
End If
Nastavit xRg = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").Rozsah ("L1:L" & xLastRow)
Pro I = 2 To xLastRow
Pokud xRg(I).Value > Date Then Exit Sub
If xRg(I).Value <= Date Then
xRg(I).EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Rozsah ("A" & J + 1)
xRg(I).EntireRow.Delete
J = J + 1
já = já - 1
End If
další
End Sub

Skript VBA musíte umístit do okna kódu ThisWorkbook a uložit sešit jako sešit Excel s podporou maker.
Tento komentář byl moderátorem webu minimalizován
Děkuji Crystal, funguje to dobře.
Tento komentář byl moderátorem webu minimalizován
Crystal, trochu jsem unáhleně odpověděl, že kód funguje. Dnes jsem otevřel svůj sešit a řádky obsahující předchozí záznamy ve sloupci L jsou stále v „aktuálním listu příležitostí oázy“ a nepřesunuly se do „archivovaného listu oasis“, jak se očekávalo. Nějaké nápady, proč by tomu tak bylo?
Tento komentář byl moderátorem webu minimalizován
Zvýrazněné buňky jsou ve sloupci L s ohledem na otázku výše a jsou kritérii (do dnešního data) pro přesun řádku do nového listu. Doufám, že tento obrázek pomůže.
Tento komentář byl moderátorem webu minimalizován
Toto je také kopie okna VBA souvisejícího s výše uvedeným.
Tento komentář byl moderátorem webu minimalizován
Crystal, trochu jsem unáhleně odpověděl, že kód funguje. Dnes jsem otevřel svůj sešit a řádky obsahující předchozí záznamy ve sloupci L jsou stále v „aktuálním listu příležitostí oázy“ a nepřesunuly se do „archivovaného listu oasis“, jak se očekávalo. Nějaké nápady, proč by tomu tak bylo?
Tento komentář byl moderátorem webu minimalizován
Krystal,

Protože nemohu nahrát svůj sešit, budu zde reprodukovat řádky a sloupce

ABCDEFGHIJKL
# Typ Žádost o vynětí půdy z produkce Upravit # Datum vydání Otázky Zákazník Místo dodání Návrh projektu Termín splatnosti

1 SS SB 1234567 1 09/6/17 Ne Jméno armády Místo Pohon Tank 09/10/17

Pomocí níže uvedeného kódu chci, aby přesunul celý řádek do nového listu, když sloupec L dosáhne dnešního data. Také pokud jsem pracovní list několik dní nedokončil, chtěl bych, aby použil vyhledávání "do dnešního data" ve sloupci L, aby to udělal. Také bych chtěl, aby to dělalo automaticky při otevření sešitu, pokud je to možné. V současné době, pokud zadám dnešní datum do libovolné buňky v řádku, například sloupec F při zadávání dat, celý řádek se přesune do archivního listu. (Pomocí Excelu 2016)

[Kód modulu 1]

Sub DaveV()

Dim xRg jako rozsah

Dim xCell As Range

Dim I As Long

Dim J As Long

I = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").UsedRange.Rows.Count

J = Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange.Rows.Count

Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Pak J = 0

End If

Set xRg = Worksheets("AKTUÁLNÍ PŘÍLEŽITOSTI OASIS").Rozsah ("L1:L" & I)

On Error Resume Next

Application.ScreenUpdating = False

Pro každý xCell In xRg

Pokud CStr(xCell.Value) = Datum Potom

xCell.EntireRow.Copy Destination:=Worksheets("ARCHIVED OASIS OPPORTUNITIES").Range("A" & J + 1)
xCell.EntireRow.Delete

J = J + 1
End If

další
Application.ScreenUpdating = True

End Sub
Tento komentář byl moderátorem webu minimalizován
[Kód listu 1]

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
Dim xCell As Range
Dim I As Long
On Error Resume Next
Application.ScreenUpdating = False
Nastavit xCell = Cíl(1)
Pokud xCell.Value = Datum Potom
I = Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange.Rows.Count
Pokud I = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Pak I = 0 End If
xCell.EntireRow.Copy Worksheets("ARCHIVED OASIS OPPORTUNITIES").Range("A" & I + 1)
xCell.EntireRow.Delete
End If
Application.ScreenUpdating = True
End Sub

Doufám, že výše uvedené pomůže, ale nejsem osoba VBA, proto nerozumím tomu, jak přimět kód, aby dělal to, co potřebuji. Vaši pomoc oceníme.
Tento komentář byl moderátorem webu minimalizován
Ve vašem skriptu je velká chyba!

Řekněme, že jste zjistili, že řádek 7 má ve sloupci C slovo „Hotovo“, takže jej zkopírujete a řádek smažete.
Jakmile odstraníte řádek, další řádek v seznamu bude řádek 9 a ne 8, protože jakmile jste odstranili 7. řádek, nyní je obsah 8. řádku na řádku 7 a všechny řádky se zvýšily o 1 řádek. Takže další řádek ke kontrole měl být řádek č. 8, ale nyní obsahuje data, která byla dříve na řádku č. 9, takže pokaždé, když mažete řádek, ve skutečnosti přeskakujete řádek ke kontrole!!!
Tento komentář byl moderátorem webu minimalizován
Vážený Shau Alone,

Děkuji za váš komentář. Kód byl aktualizován s opravenou chybou. Děkuji mnohokrát za vašeho asistenta.

S pozdravem, Crystal
Tento komentář byl moderátorem webu minimalizován
Myslím, že se mi to děje, stále to kopíruje stejný řádek znovu a znovu, i když to říká, že kód byl aktualizován. Toto mám:

Sub Cheezy()
'Aktualizováno Kutools pro Excel 2017/8/28
Dim xRg jako rozsah
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Archiv nákupů").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("Archiv nákupu").UsedRange) = 0, pak J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Rozsah ("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
Pro K = 1 To xRg.Count
Pokud CStr(xRg(K).Value) = "Ano" Pak
xRg(K).EntireRow.Copy Destination:=Worksheets("Archiv nákupu").Range("A" & J + 1)
xRg(K).EntireRow.Delete
Pokud CStr(xRg(K).Value) = "Ano" Pak
K = K-1
End If
J = J + 1
End If
další
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj Fred,
Pokaždé, když kód spustíte, kód hledá zadaný rozsah, takže kopíruje stejný řádek znovu a znovu, protože nedokáže zjistit, který řádek již byl zkopírován. Chcete-li se vyhnout opakovanému kopírování stejného řádku, můžete nechat kód spustit automaticky, když je do zadané buňky zadána odpovídající hodnota.
V listu s názvem „PURCHASE FORCAST“ klikněte pravým tlačítkem na záložku listu a klikněte Zobrazit kód z kontextové nabídky. Poté zkopírujte následující kód VBA v okně List (kód).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Kutools for Excel 20220830
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Yes" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Yes" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Mohl by mi někdo pomoci, aby to fungovalo? Pokusil jsem se změnit část, která se musí shodovat s mým souborem, ale objevilo se to a já si nejsem jistý, co mám dělat.
Tento komentář byl moderátorem webu minimalizován
při pokusu o nahrání souboru aplikace Excel to říká, že soubor není podporován. Promiň...dnes s tím zápasím.
Tento komentář byl moderátorem webu minimalizován
Chtěl bych pomoc s podobným úkolem, ale trochu jiným. Mám 5 sloupců čísel, kolem 25000 1 na sloupec, každý sloupec se záhlavím 5-1. Rád bych zkopíroval celý řádek na jiný list, pokud je hodnota sloupce 2 větší než nula, NEBO sloupec 3 je větší než nula , NEBO sloupec 4 je menší než nula, NEBO sloupec 5 je větší než pět NEBO sloupec XNUMX je větší než dva atd. je to možné?
Tento komentář byl moderátorem webu minimalizován
nahrávání obrázku nefunguje... omlouvám se.
Tento komentář byl moderátorem webu minimalizován
Ahoj,
Použijte prosím toto tlačítko pro nahrávání.
Tento komentář byl moderátorem webu minimalizován
Takže cílem je zjistit, zda některý z plynů nepřekračuje limit, který nastavím ve vzorci, celá jikra se ZKOPÍRUJE na nový list.

Děkuji mnohokrát za jakoukoli pomoc.
Tento komentář byl moderátorem webu minimalizován
Obrázek připojený
Tento komentář byl moderátorem webu minimalizován
milý Michaeli,
Možná můžete tento problém vyřešit pomocí doplňku aplikace Excel. Zde vám doporučuji nástroj Vybrat konkrétní buňky Kutools pro Excel. Pomocí tohoto nástroje můžete snadno vybrat všechny řádky v určitém rozsahu, pokud je hodnota zadaného sloupce větší nebo menší než číslo. Po výběru všech potřebných řádků je můžete ručně zkopírovat a vložit do nového listu. Viz níže přiložený obrázek.

Další informace o této funkci získáte kliknutím na níže uvedený hypertextový odkaz.
https://www.extendoffice.com/product/kutools-for-excel/excel-select-specific-cells-rows.html
Tento komentář byl moderátorem webu minimalizován
díky za tento vzorec, ale měl jsem problém, který je, že když chci přesunout řádek na jiný list, nestane se to automaticky. můžete mi dát jiný vzorec? takže kdykoli změním hodnotu buňky, přesune se automaticky.


Díky
Tento komentář byl moderátorem webu minimalizován
milý janangu,
Kód se nepřidá automaticky, dokud ručně nespustíte tlačítko spuštění.
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Chtěl bych mít toto makro nastavené, ale se 2 argumenty. Podařilo se mi zprovoznit makro v mém souboru na základě hodnoty buněk ve sloupci O. Chtěl bych však, aby makro před přesunem řádku zkontrolovalo, zda je vyplněn i sloupec S (nebo <> "") . Nakonec bych také rád, aby zkopírované řádky měly stejné formátování jako řádky na druhém listu. Změní to úplně makro?
Tento komentář byl moderátorem webu minimalizován
Vážení Hugues,
Nevím, jestli vám rozumím správně. Chcete říct, že pokud je buňka ve sloupci S vyplněna a buňka ve sloupci O zároveň obsahuje určitou hodnotu, přesunout řádek s formátováním? Jinak se nehýbat?
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal,

Ano, přesně to mám na mysli. Ve skutečnosti jsou moje data o projektech. Můj sloupec O je stav mého projektu a S je datum ukončení mého projektu.
Chci, aby moji uživatelé, lidé, kteří mají informace a budou je muset vložit, mohli „Archivovat“ projekt POUZE v případě, že mají status „Uzavřeno“ a vložili „Datum ukončení“.


Doufám, že to pomůže objasnit věci
Tento komentář byl moderátorem webu minimalizován
Vážení Hugues,
Omlouvám se, že odpovídám tak pozdě. Následující kód VBA vám může pomoci vyřešit problém. Chcete-li použít skript VBA, postupujte podle kroků v tomto článku.

Sub MoveRowBasedOnCellValue()
Dim xRgStatus jako rozsah
Dim xRgDate jako rozsah
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, pak J = 0
End If
Set xRgStatus = Worksheets("Sheet1").Range("O1:O" & I)
Set xRgDate = Worksheets("Sheet1").Range("S1:S" & I)
On Error Resume Next
Application.ScreenUpdating = False
Application.CutCopyMode = False
xRgStatus(1).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Pro K = 2 To xRgStatus.Count
If CStr(xRgStatus(K).Value) = "Uzavřeno" Pak
If (xRgDate(K).Value <> "") And (TypeName(xRgDate(K).Value) = "Date") Then
xRgStatus(K).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
End If
End If
další
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Milá Crystal,

Mockrát vám děkuji za vaši pomoc!

Pozdravy,

Hugues
Tento komentář byl moderátorem webu minimalizován
Ahoj,


Jak zkopíruji řádky místo přesouvání?
Tento komentář byl moderátorem webu minimalizován
Ahoj,


Vím, že to tu už bylo několikrát, ale nemůžu najít odpověď. Jak mohu zkopírovat materiál do nového listu a NESMÍT jej odstranit z původního listu?
Tento komentář byl moderátorem webu minimalizován
Milý Mike,
Pokud chcete řádky místo mazání zkopírovat, může vám pomoci níže uvedený kód VBA. Děkuji za váš komentář!

Sub Cheezy()
Dim xRg jako rozsah
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Pokud J = 1 Pak
If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0, pak J = 0
End If
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = False
Pro K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Hotovo" Pak
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
End If
další
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Dobrý den,

Jsem nový v používání maker, je možné vložit níže uvedená data po určité hodnotě a budou se opakovat až do konce sloupce?
Stejně jako tento:

Přenést "Modrá" za "Barva"

A1 = modrá
A5= Barva
A6= (sem převeďte "Modrá")
a tak dále...
Tento komentář byl moderátorem webu minimalizován
Dear John,
Máte na mysli, pokud buňka obsahuje ve sloupci „Barva“, zkopírujte text první buňky do buňky pod buňkou „Barva“ a opakujte kopírování tohoto textu až do konce sloupce?
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í