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

Cum să mutați întregul rând în partea de jos a foii active pe baza valorii celulei din Excel?

Pentru a muta întregul rând în partea de jos a foii active pe baza valorii celulei din Excel, încercați codul VBA din acest articol.

Mutați întregul rând în partea de jos a foii active pe baza valorii celulei cu cod VBA


Mutați întregul rând în partea de jos a foii active pe baza valorii celulei cu cod VBA


De exemplu, după cum se arată în imaginea de mai jos, dacă o celulă din coloana C conține o anumită valoare „Terminat”, mutați întregul rând în partea de jos a foii curente. Vă rugăm să faceți următoarele.

1. presa Alt+ F11 tastele simultan pentru a deschide Microsoft Visual Basic pentru aplicații fereastră.

2. În Microsoft Visual Basic pentru aplicații fereastră, faceți clic pe Insera > Module. Apoi copiați și lipiți codul VBA de mai jos în fereastră.

Cod VBA: Mutați întregul rând în partea de jos a foii active pe baza valorii celulei

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

notițe: În codul VBA, „Făcut”Este valoarea celulei pe care veți muta întregul rând pe baza căruia. Îl puteți schimba după cum aveți nevoie.

3. apasă pe F5 tasta pentru a rula codul, apoi în fereastra pop-up Kutools pentru Excel caseta de dialog, selectați intervalul de coloane în care există o anumită valoare, apoi faceți clic pe OK butonul.

După ce faceți clic OK butonul, întregul rând care conține valoarea „Terminat” în coloana specificată este mutat automat în partea de jos a intervalului de date.


Articole pe aceeași temă:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2019 și 365. Suportă toate limbile. Implementare ușoară în întreprindere sau organizație. Funcții complete de încercare gratuită de 30 de zile. Garanție de restituire a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse în fiecare zi!
fundul officetab
Comentarii (24)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum aș putea face astfel încât kutools să selecteze anumite rânduri fără intrarea utilizatorului?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Anon,
Îmi pare rău, nu sunt sigur ce vrei să spui. Ar fi bine dacă ați putea explica din nou sau puteți oferi o captură de ecran pentru a arăta ce încercați să faceți.
Vă mulțumim pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Crystal, acest cod funcționează excelent, mulțumesc. Aș dori să muți toate rândurile care conțin cuvântul "Complet" în coloana D în partea de sus a tabelului (inserați în rândul 3). Este posibil? atunci aș dori să șterg toate aceste rânduri complete care conțin „data de ieri” în coloana V.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna ziua. Este aproape perfect pentru ceea ce vreau. Am o parte din aceeași solicitare pe care Anon a trebuit să facă acest lucru fără intrarea utilizatorului, împreună cu câteva suplimente.

Mă întreb dacă este posibil ca singura coloană căutată să fie de la i4 la i50 și să ruleze automat la deschidere sau oricând se editează coloana i. De asemenea, dacă ar fi posibil să mutați rândurile în partea de jos a foii fără rânduri goale între rândurile „terminate” și „fără” rânduri. În prezent, dacă selectez i4:i50 și dacă am doar date până la rândul 25, va lipi rândurile „terminate” crescând de la rândul 50 în loc de rândul 25. Numărul de rânduri din foaia mea se schimbă constant și nu ar trebui să ajungă la peste 50. Mulțumesc pentru ajutor.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Brandon,
Îmi pare rău, vă pot ajuta cu asta. Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, există vreo modalitate de a modifica acest lucru, astfel încât să mute un rând în altă parte în aceeași foaie în afară de sfârșit? Am o foaie care conține informații despre comandă pentru comenzile datate și comenzile viitoare care urmează să fie încă datate și o am astfel încât, atunci când pun un „X” în coloana A, lucrurile evidențiate și aldine, în funcție de # piese și de locațiile de livrare. Acum trebuie să tai și să inserez fizic nou datat (data expedierii), astfel încât să se potrivească în partea de sus sortată după dată (de la 1 la sfârșitul lunii). Am reușit să formatez totul condiționat până în acest moment, dar nu cred că pot muta rândurile în acest fel. Mă întrebam dacă VBA ar putea face acest lucru, muta un rând atunci când este introdusă o dată pentru a se potrivi cu celelalte rânduri datate?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, singura modalitate prin care pot face acest lucru să funcționeze este dacă „rulez” macro-ul în subecranul Visual Basic. Este posibil ca acest cod VBA să ruleze automat, odată ce utilizatorul introduce „Terminat”? De fiecare dată când primesc fereastra de dialog Kutools pentru Excel pentru a cere parametrii după care cer codul pentru a căuta. Am rezolvat oarecum acest lucru prin înlocuirea : xTxt = ActiveSheet.UsedRange.AddressLocal cu parametrii pe care trebuie să-i caut și apăsând enter. Dar ar fi mai convenabil dacă ar face automat modificările după ce a fost introdus „Terminat”. Mulțumesc!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Anon,
Codul VBA de mai jos vă poate face o favoare. Vă rugăm să încercați.
Vă rugăm să faceți clic dreapta pe fila foii (foaia conține datele pe care le veți muta în jos), selectați Vizualizare cod din meniul contextual și copiați codul de mai jos în fereastra Cod.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)
„Actualizat de Extendoffice 20190925
Dim xRg As Range
Dim xIRg As Range
Dim xTxt ca șir
Dim xCell As Range
Dim xEndRow As Long
Dim I As Long
Dim xDStr As String
La data de eroare CV următoare
xDStr = „C:C”
Set xRg = Me.Range(xDStr)
Set xIRg = Application.Intersect(Target, xRg)
Dacă xIRg este Nimic, Ieșiți din Sub
Application.ScreenUpdating = Fals
Application.EnableEvents = Fals

Dacă țintă = „Terminat”, atunci
xEndRow = ActiveSheet.UsedRange.Rows.Count + 1
Target.EntireRow.Cut
Rânduri(xEndRow).Insert Shift:=xlDown
Final, dacă
Application.EnableEvents = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut cristal,

Vă mulțumim că ați postat acest cod. Aș dori să știu cum să fac codul pentru a muta rândul înapoi în partea de sus dacă Terminat a fost introdus din greșeală. Ar putea fi adăugat un cod secundar pentru „mutare” pentru a-l muta în partea de sus și „terminat” pentru partea de jos?
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut cristal, codul pe care l-ai dat lui anon pentru ca codul de rulare vba automat este grozav, dar nu pot introduce o foaie de rânduri, există o modalitate posibilă de a-l remedia
Acest comentariu a fost redus la minimum de moderatorul de pe site
salut sarah,
Scuze pentru neplăceri. Vă rugăm să încercați VBA de mai jos. Mulțumiri.

Subsol de lucrări private_Change (țintă ByVal ca rază de acțiune)

„Actualizat de Extendoffice 20200424

Dim xRg As Range

Dim xIRg As Range

Dim xTxt ca șir

Dim xCell As Range

Dim xEndRow As Long

Dim I As Long

Dim xDStr As String

La eroare GoTo Err1

xDStr = „C:C”

Set xRg = Me.Range(xDStr)

Set xIRg = Application.Intersect(Target, xRg)

Dacă xIRg este Nimic, Ieșiți din Sub

Application.ScreenUpdating = Fals

Application.EnableEvents = Fals



Dacă Target.Value = „Terminat” Atunci

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

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

Target.EntireRow.Cut

Rânduri(xEndRow).Insert Shift:=xlDown

Final, dacă

Err1:

Application.EnableEvents = Adevărat

Application.ScreenUpdating = Adevărat

End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am încercat să copiez acest cod, dar continuă să spună folosirea mea nevalidă.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Ce se întâmplă dacă trebuie doar să mutați rândurile sub coloana A și B; atunci coloana C ar trebui să rețină? ar trebui să mai folosim EntireRow?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Jerel,
Încercați codul de mai jos. Sper că pot ajuta.

Sub MoveToEnd()

„Actualizat de Extendoffice 20200717

Dim xRg As Range

Dim xTxt ca șir

Dim xCell As Range

Dim xEndRow As Long

Dim xIntR ca întreg

Dim I As Long

Dim xWs ca fișă de lucru

La data de eroare CV următoare

Dacă ActiveWindow.RangeSelection.Count > 1, atunci

xTxt = ActiveWindow.RangeSelection.AddressLocal

Altfel

xTxt = ActiveSheet.UsedRange.AddressLocal

Final, dacă

singuratic:

Set xRg = Application.InputBox(„Selectați intervalul:”, „Kutools pentru Excel”, xTxt, , , , , 8)

Dacă xRg nu este nimic, ieșiți din sub

Dacă xRg.Columns.Count > 1 sau xRg.Areas.Count > 1, atunci

MsgBox „Au fost selectate mai multe intervale sau coloane”, vbInformation, „Kutools pentru Excel”

GoTo LOne

Final, dacă

xEndRow = xRg.Rows.Count + xRg.Row

xWs = xRg.Foaie de lucru

xWs.Activare

Application.ScreenUpdating = Fals

Pentru I = xRg.Rows.Count To 1 Step -1

Dacă xRg.Item(I) = „Terminat”, atunci

Rânduri(xEndRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

xIntR = xRg.Cells(I).Row

Interval ("A" & xIntR & ":B" & xIntR).Selectați

Selectie.Tăiat

Interval(„A” și xEndRow).Selectați

ActiveSheet.Paste

xEndRow = xEndRow + 1



Final, dacă

Pagina Următoare →

Application.ScreenUpdating = Adevărat

End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,



Am probleme cu utilizarea codului furnizat și primesc în continuare o eroare de sintaxă. Sunt foarte nou în excelență și am încercat să învăț singur ceea ce am nevoie pentru a-mi conduce afacerea acasă. Am un ID de foaie de calcul pentru inventar, pentru a putea desemna articole dintr-o coloană ca PENSIAR? da/nu și dacă da, se deplasează în partea de jos a foii, în ordine alfabetică, fără a lăsa un spațiu gol în foaia de calcul principală. avem articole retrase complet și apoi revenim pentru o relansare specială în cantități limitate și identificați ca aceste articole stocate în partea de jos a foii mele până când devin disponibile din nou. Mulțumesc.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, am o sarcină pe care mi-a dat-o șeful meu. La început părea destul de simplu, dar acum sunt confuz în ceea ce privește cum să procedez. Avem o foaie de prognoză a posibilelor locuri de muncă și au o coloană „Probabilitatea comenzii” cu %. El vrea să înființez 3 foi diferite cu 100-70%, 69%-41 și 40-0%. Ideea este că, pe măsură ce informațiile sunt introduse în foaia principală, atunci când procentul este introdus, acesta este automat copiat în foaia de procedură care se potrivește cu acea percentilă. Am făcut acest lucru cu un simplu IF (și formulă. Cu toate acestea, trebuie să sortez pentru a pierde celulele goale și a le face să arate mai curat. Apoi, când sortez, dacă adaug o nouă ofertă Oder Probability la foaia principală, aceasta nu se face automat. arătați-l, fără a anula sortarea, apoi sortați din nou. Îmi cer scuze dacă această întrebare nu îi aparține. Dar există un șir de cod pe care l-aș putea introduce care ar rezolva mai ușor această problemă? Singura valoare care determină dacă întregul rând este mutat este Coloana K. pare simplă, dar oricât de complexă pentru acest începător excel. Mulțumesc anticipat pentru ajutor.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Cum se procedează dacă „Terminat” este doar o parte a unui șir de coloană. Să presupunem că Coloanele mele conțin o valoare precum - XYZDone, ABCDone, 123Done etc., pot doar să filtrez pe baza șirului parțial „Done”?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Crystal,
Mulțumesc pentru ajutor, codul funcționează grozav, dar mai degrabă decât să muți rândul în partea de jos a unei pagini, cum să-l muți într-o altă filă, adică o filă „Închis”?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Scuze că răspund atât de târziu.
În cod, trebuie doar să schimbați linia "Dacă xRg.Cells(I) = „Terminat”, atunci" la Dacă xRg.Cells(I) Like „*Done*” Atunci pentru a o face.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Am o listă cu casete de selectare pe care atunci când o coloană este bifată, am nevoie de ea pentru a merge într-o secțiune a foii de calcul, iar dacă cealaltă este bifată, merge până la sfârșit. Am încercat o sută de moduri diferite de a face acest lucru, poate cineva să mă ajute cu asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut! Tocmai am achiziționat kutools pentru a putea *** acest cod vba în foaia mea Excel, deoarece va fi o caracteristică excelentă de utilizat! Instrucțiunile de mai sus sunt simple și utile; cu toate acestea, odată ce am ajuns la pasul în care codul este copiat și lipit în fereastră și apăsați F5, m-a trimis într-o casetă pentru a denumi și a crea macro-ul. Am făcut asta, dar acum nu mă va duce la caseta de dialog, astfel încât să pot selecta intervalul de celule. Apare o eroare de compilare de „procedură externă invalidă”. Te rog ajuta-ma!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Îmi pare rău că te-am indus în eroare. Codul poate fi folosit singur și nu necesită achiziționarea Kutools. Dacă nu aveți nevoie, vă rugăm să trimiteți un e-mail la sales@extendoffice.com pentru a cere o rambursare.
Pentru ca codul să funcționeze fără probleme, trebuie să vă asigurați că cursorul este în fereastra codului (faceți clic pe orice cuvânt din cod), apoi apăsați butonul F5 tasta pentru a rula codul. Apoi va apărea caseta de dialog pentru a selecta un interval de celule.
Scuze din nou pentru inconvenient.
Acest comentariu a fost redus la minimum de moderatorul de pe site
eu din nou! Mi-am dat seama codul. Copiam și lipisem manual codul în loc să folosesc butonul de copiere din partea dreaptă sus a ecranului. Am schimbat „terminat” cu „x”. Am rulat codul în fiecare dintre foile de lucru. Pe măsură ce încep să introduc „x” în acele celule din intervalele de celule selectate din caseta de dialog, nu se întâmplă nimic (rândurile nu se deplasează automat în jos). Sunt FOARTE NOU în asta.... mulțumesc pentru ajutor!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Dacă doriți să mutați automat rândul în jos când introduceți cuvântul specificat, încercați următorul cod VBA.
notițe: trebuie să introduceți codul în fereastra Cod foaia de lucru (dați clic dreapta pe fila foii și selectați Vizualizare cod din meniul contextual).

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
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0  Caractere
Locații sugerate