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

Jak přesunout celý řádek do spodní části aktivního listu na základě hodnoty buňky v aplikaci Excel?

Pokud chcete přesunout celý řádek do spodní části aktivního listu na základě hodnoty buňky v aplikaci Excel, vyzkoušejte kód VBA v tomto článku.

Přesuňte celý řádek do spodní části aktivního listu na základě hodnoty buňky s kódem VBA


Přesuňte celý řádek do spodní části aktivního listu na základě hodnoty buňky s kódem VBA

Například, jak je ukázáno níže, snímek obrazovky, pokud buňka ve sloupci C obsahuje určitou hodnotu „Hotovo“, pak přesuňte celý řádek do dolní části aktuálního listu. Postupujte prosím následovně.

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

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

Kód VBA: Přesunout celý řádek na spodní část aktivního listu na základě hodnoty buňky

Sub MoveToEnd()
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xEndRow As Long
    Dim I As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
lOne:
    Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    If xRg.Columns.Count > 1 Or xRg.Areas.Count > 1 Then
        MsgBox " Multiple ranges or columns have been selected ", vbInformation, "Kutools for Excel"
        GoTo lOne
    End If
    xEndRow = xRg.Rows.Count + xRg.Row
    Application.ScreenUpdating = False
    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "Done" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Poznámka: V kódu VBA, „Hotovo„Je hodnota buňky, podle které přesunete celý řádek. Můžete to změnit podle potřeby.

3. zmáčkni F5 klíč ke spuštění kódu, pak v vyskakovacím okně Kutools pro Excel V dialogovém okně vyberte rozsah sloupců, ve kterých existuje určitá hodnota, a klikněte na OK .

Po kliknutí na tlačítko OK tlačítko, celý řádek, který v zadaném sloupci obsahuje hodnotu „Hotovo“, se automaticky přesune do spodní části rozsahu dat.


Související články:


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

Kutools pro Excel vyřeší většinu vašich problémů a zvýší vaši produktivitu
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é funkce
    . Podporuje Office/Excel
    2007-2019 a 365
    . Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Plné funkce
    30
    -denní zkušební verze zdarma. 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 tím
    50%
    a každý den vám sníží stovky kliknutí myší!
officetab dno
Komentáře (26)
Hodnocení 5 z 5 · 1 hodnocení:
Tento komentář byl moderátorem webu minimalizován
Jak bych to mohl udělat, aby kutools vybral konkrétní řádky bez vstupu uživatele?
Tento komentář byl moderátorem webu minimalizován
Ahoj Anon,
Je mi líto, nejsem si jistý, co máte na mysli. Bylo by hezké, kdybyste to mohli vysvětlit znovu nebo poskytnout snímek obrazovky, který ukáže, co se snažíte udělat.
Díky za váš komentář.
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal, tento kód funguje skvěle, děkuji. Chtěl bych přesunout všechny řádky, které obsahují slovo "Dokončit" ve sloupci D na začátek tabulky (vložit do řádku 3). Je to možné? pak bych chtěl smazat všechny tyto úplné řádky, které ve sloupci V obsahují „včerejší datum“.
Tento komentář byl moderátorem webu minimalizován
Ahoj. To je téměř dokonalé pro to, co chci. Mám část stejného požadavku jako Anon, aby to fungovalo bez uživatelského vstupu spolu s některými doplňky.

Zajímalo by mě, zda je možné nechat prohledat jediný sloupec i4 až i50 a nechat jej automaticky spouštět při otevření nebo kdykoli je sloupec i upravován. Také pokud by bylo možné přesunout řádky na konec listu bez prázdných řádků mezi řádky „hotovo“ a řádky „žádné“. V současné době, pokud vyberu i4:i50 a pokud mám data pouze do řádku 25, vloží se „hotové“ řádky vzestupně od řádku 50 místo řádku 25. Počet řádků v mém listu se neustále mění a neměl by se dostat na více než 50. Díky za pomoc.
Tento komentář byl moderátorem webu minimalizován
Ahoj Brandone,
Sorry ti s tím může pomoct. Děkuji za váš komentář.
Tento komentář byl moderátorem webu minimalizován
Dobrý den, jde to nějak vyladit tak, aby se to posunulo o řádek jinde ve stejném listu kromě konce? Mám list s informacemi o objednávkách pro datované objednávky a nadcházející objednávky, které ještě nebyly datovány, a mám to tak, že když dám "X" do sloupce A, věci se zvýrazní a tučným písmem v závislosti na části # a dodacích místech. Nyní musím fyzicky vyjmout a vložit nově datované (datum odeslání) tak, aby se vešlo nahoře seřazené podle data (od 1. do konce měsíce). Do této chvíle jsem byl schopen podmíněně formátovat vše, ale nemyslím si, že bych mohl řádky přesouvat tímto způsobem. Zajímalo by mě, jestli by to VBA mohl udělat, přesunout řádek, když je zadáno datum, aby se vešel do ostatních datovaných řádků?
Tento komentář byl moderátorem webu minimalizován
Dobrý den, jediný způsob, jak to zprovoznit, je "spustit" makro na dílčí obrazovce jazyka Visual Basic. Je možné, aby se tento kód VBA spouštěl automaticky, jakmile uživatel zadá „Hotovo“? Pokaždé, když se mi zobrazí dialogové okno Kutools pro Excel, které se zeptá na parametry, podle kterých požaduji kód pro vyhledávání. Vyřešil jsem to tak, že jsem nahradil: xTxt = ActiveSheet.UsedRange.AddressLocal parametry, které potřebuji vyhledat, a stisknu Enter. Ale bylo by pohodlnější, kdyby automaticky provedl změny po zadání "Hotovo". Děkuji!
Tento komentář byl moderátorem webu minimalizován
Ahoj Anon,
Níže uvedený kód VBA vám může udělat laskavost. Zkuste to prosím.
Klikněte prosím pravým tlačítkem na záložku listu (list obsahuje data, která přesunete dolů), z kontextové nabídky vyberte Zobrazit kód a zkopírujte níže uvedený kód do okna Kód.

Soukromá dílčí tabulka_Změna (ByVal Target As Range)
'Aktualizováno Extendoffice 20190925
Dim xRg jako rozsah
Dim xIRg As Range
Dim xTxt As String
Dim xCell As Range
Dim xEndRow As Long
Dim I As Long
Dim xDStr jako řetězec
On Error Resume Next
xDStr = "C:C"
Nastavit xRg = Me.Range(xDStr)
Nastavit xIRg = Application.Intersect(Target, xRg)
Pokud xIRg Is Nothing Pak Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False

Pokud cíl = "Hotovo" Pak
xEndRow = ActiveSheet.UsedRange.Rows.Count + 1
Target.EntireRow.Cut
Rows(xEndRow).Insert Shift:=xlDown
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj krystale,

Děkujeme za zveřejnění tohoto kódu. Chtěl bych vědět, jak získat kód pro přesunutí řádku zpět na začátek, pokud jste omylem zadali Hotovo. Mohl by být přidán sekundární kód pro "přesunout", aby se přesunul nahoru, a "hotovo" pro spodní?
Tento komentář byl moderátorem webu minimalizován
ahoj krystal, kód, který jsi dal společnosti anon, aby automaticky spouštěl kód vba, je skvělý, ale nemohu vložit list řádků, existuje možný způsob, jak to opravit
Tento komentář byl moderátorem webu minimalizován
ahoj sarah,
Omluvám se za nepříjemnost. Zkuste prosím níže uvedený VBA. Dík.

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

'Aktualizováno Extendoffice 20200424

Dim xRg jako rozsah

Dim xIRg As Range

Dim xTxt As String

Dim xCell As Range

Dim xEndRow As Long

Dim I As Long

Dim xDStr jako řetězec

Při chybě Přejít na Err1

xDStr = "C:C"

Nastavit xRg = Me.Range(xDStr)

Nastavit xIRg = Application.Intersect(Target, xRg)

Pokud xIRg Is Nothing Pak Exit Sub

Application.ScreenUpdating = False

Application.EnableEvents = False



If Target.Value = "Done" Then

'xEndRow = ActiveSheet.UsedRange.Rows.Count + 1

xEndRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1

Target.EntireRow.Cut

Rows(xEndRow).Insert Shift:=xlDown

End If

Err1:

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub
Tento komentář byl moderátorem webu minimalizován
Pokusil jsem se zkopírovat tento kód, ale stále říká, že jsem použil nesprávné.
Tento komentář byl moderátorem webu minimalizován
Co když potřebujete pouze přesunout řádky pod sloupce A a B; pak by měl sloupec C zůstat? měli bychom stále používat EntireRow?
Tento komentář byl moderátorem webu minimalizován
ahoj Jerel,
Vyzkoušejte níže uvedený kód. Doufám, že pomůžu.

Sub MoveToEnd()

'Aktualizováno Extendoffice 20200717

Dim xRg jako rozsah

Dim xTxt As String

Dim xCell As Range

Dim xEndRow As Long

Dim xIntR jako celé číslo

Dim I As Long

Dim xWs jako pracovní list

On Error Resume Next

Pokud ActiveWindow.RangeSelection.Count > 1 Potom

xTxt = ActiveWindow.RangeSelection.AddressLocal

Jiný

xTxt = ActiveSheet.UsedRange.AddressLocal

End If

osamělý:

Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)

Pokud xRg není nic, pak Exit Sub

Pokud xRg.Columns.Count > 1 nebo xRg.Areas.Count > 1, pak

MsgBox " Bylo vybráno více rozsahů nebo sloupců ", vbInformation, "Kutools pro Excel"

Přejít na lOne

End If

xEndRow = xRg.Rows.Count + xRg.Row

xWs = xRg.Worksheet

xWs.Aktivovat

Application.ScreenUpdating = False

Pro I = xRg.Rows.Count To 1 Krok -1

If xRg.Item(I) = "Done" Then

Rows(xEndRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAhove

xIntR = xRg.Cells(I).Row

Rozsah("A" & xIntR & ":B" & xIntR).Vybrat

Selection.Cut

Rozsah("A" & xEndRow).Vyberte

ActiveSheet.Paste

xEndRow = xEndRow + 1



End If

další

Application.ScreenUpdating = True

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



Mám problémy s používáním poskytnutého kódu a stále se mi zobrazuje chyba syntaxe. Jsem super nováček v excelu a snažím se sám učit, co potřebuji k vedení svého domácího podnikání. Mám ID tabulky inventáře, abych mohl označit položky ve sloupci jako UKONČENÉ? ano/ne, a pokud ano, přesunou se na konec listu v abecedním pořadí, aniž by ponechaly prázdné místo v hlavním rozkládacím listu. máme položky úplně vyřazeny a pak se vrátíme pro speciální opětovné vydání v omezeném množství a podobně jako tyto položky jsou uloženy na konci mého listu, dokud nebudou znovu dostupné. Děkuji.
Tento komentář byl moderátorem webu minimalizován
Dobrý den, mám úkol, který mi zadal můj šéf. Zpočátku to vypadalo dost jednoduše, ale teď jsem zmatený, jak postupovat. Máme list Prognóza možných zakázek a mají sloupec "Pravděpodobnost objednávky" podle %. Chce, abych nastavil 3 různé listy se 100-70 %, 69 %-41 a 40-0 %. Myšlenka je taková, že když jsou informace zadávány do hlavního listu, když je zadáno procento, automaticky se zkopírují do následujícího listu, který odpovídá danému percentilu vzteku. Udělal jsem to s jednoduchým IF (a vzorcem. Potřebuji však třídit, abych uvolnil prázdné buňky a vypadalo to čistěji. Když pak třídím , přidám do hlavního listu novou nabídku Pravděpodobnosti Odry, automaticky se to nestane ukažte to, bez zrušení řazení a poté znovu seřaďte. Omlouvám se, pokud tato otázka nepatří jí. Existuje však řetězec kódu, který bych mohl vložit a který by tento problém vyřešil snadněji? Jediná hodnota, která určuje, zda se přesune celý řádek, je Sloupec K. se zdá být jednoduchý, ale pro tohoto začátečníka v Excelu jakkoli složitý. Předem děkuji za vaši pomoc.
Tento komentář byl moderátorem webu minimalizován
Jak to udělat, když "Hotovo" je pouze částí řetězce sloupce. Předpokládejme, že moje sloupce obsahují hodnotu jako - XYZDone, ABCDone, 123Done atd., mohu filtrovat pouze na základě částečného řetězce "Hotovo"?
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal,
Díky za pomoc, kód funguje skvěle, ale spíše než přesunout řádek na konec stránky, jak jej přesunout na jinou kartu, tj. kartu "Uzavřeno"?
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Omlouvám se, že odpovídám tak pozdě.
V kódu stačí změnit řádek "If xRg.Cells(I) = "Done" Then" If xRg.Cells(I) Like "*Done*" Then udělat to.
Tento komentář byl moderátorem webu minimalizován
Mám seznam se zaškrtávacími políčky, že když je zaškrtnutý jeden sloupec, potřebuji, aby šel do jedné části tabulky, a pokud je místo toho zaškrtnuta druhá, jde na konec. Vyzkoušel jsem sto různých způsobů, jak to udělat, může s tím někdo pomoci?
Tento komentář byl moderátorem webu minimalizován
Ahoj! Právě jsem si koupil kutools, abych mohl *** tento vba kód do mého listu Excel, protože to bude vynikající funkce k použití! Výše uvedené pokyny jsou jednoduché a užitečné; jakmile se však dostanu ke kroku, kdy se kód zkopíruje a vloží do okna, a stisknu F5, poslalo mě to do pole, kde mám makro pojmenovat a vytvořit. Udělal jsem to, ale teď mě to nepřenese do dialogového okna, abych mohl vybrat rozsah buněk. Objeví se chyba kompilace "neplatná vnější procedura". Prosím pomozte!
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Omlouvám se, že jsem vás uvedl v omyl. Kód lze použít samostatně a nevyžaduje nákup Kutools. Pokud to nepotřebujete, napište e-mail na sales@extendoffice.com požádat o vrácení peněz.
Aby kód fungoval hladce, musíte se ujistit, že je kurzor v okně kódu (klikněte na libovolné slovo v kódu), poté stiskněte klávesu F5 klíč pro spuštění kódu. Poté se objeví dialogové okno pro výběr rozsahu buněk.
Ještě jednou se omlouváme za nepříjemnosti.
Tento komentář byl moderátorem webu minimalizován
znovu Já! Kód jsem vymyslel. Spíše jsem kód zkopíroval a vložil ručně, než abych použil tlačítko kopírování v pravém horním rohu obrazovky. Změnil jsem "hotovo" na "x". Spustil jsem kód v každém z listů. Když začnu v dialogovém okně zadávat "x" do těchto buněk v rámci vybraných oblastí buněk, nic se nestane (řádky se automaticky neposunou dolů). Jsem v tom VELMI NOVÝ....děkuji za vaši pomoc!
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Pokud chcete při zadávání zadaného slova automaticky přesunout řádek dolů, vyzkoušejte prosím následující kód VBA.
Poznámka: kód musíte zadat do okna Kód listu (klikněte pravým tlačítkem na záložku listu a z kontextové nabídky vyberte Zobrazit kód).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Extendoffice 20220520
    Dim xRg As Range
    Dim xTxt As String
    Dim xCell As Range
    Dim xEndRow As Long
    Dim I As Long
    On Error Resume Next
    If ActiveWindow.RangeSelection.Count > 1 Then
      xTxt = ActiveWindow.RangeSelection.AddressLocal
    Else
      xTxt = ActiveSheet.UsedRange.AddressLocal
    End If
lOne:
    Set xRg = Range("C2:C18")
    If xRg Is Nothing Then Exit Sub
    If xRg.Columns.Count > 1 Or xRg.Areas.Count > 1 Then
        MsgBox " Multiple ranges or columns have been selected ", vbInformation, "Kutools for Excel"
        GoTo lOne
    End If
    xEndRow = xRg.Rows.Count + xRg.Row
    Application.ScreenUpdating = False
    For I = xRg.Rows.Count To 1 Step -1
        If xRg.Cells(I) = "Done" Then
           xRg.Cells(I).EntireRow.Cut
           Rows(xEndRow).Insert Shift:=xlDown
        End If
    Next
    Application.ScreenUpdating = True
End Sub
Tento komentář byl moderátorem webu minimalizován
Ahoj Crystal,

Děkuji za všechny skvělé kódy. Existuje způsob, jak to udělat bez Kutoolů? Také nevidím dialogové okno pro výběr rozsahu buněk, nevyskakuje mi to.

Děkuji,
Jaz
Hodnocení 5 z 5
Tento komentář byl moderátorem webu minimalizován
Ahoj Jazi,
Rozsah buněk můžete zadat přímo v kódu, aniž byste museli vyskakovat dialogové okno Kutools pro výběr rozsahu.
V kódu nahraďte následující řádek:
Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)

s:
Set xRg = Range("C2:C13")
Zatím zde nejsou žádné komentáře
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění

Sociální sítě

Copyright © 2009 - www.extendoffice.com. | Všechna práva vyhrazena. Poháněno ExtendOffice. | |. | Sitemap
Microsoft a logo Office jsou ochranné známky nebo registrované ochranné známky společnosti Microsoft Corporation ve Spojených státech a / nebo jiných zemích.
Chráněno Sectigo SSL