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

Hur flyttar jag hela raden till botten av det aktiva arket baserat på cellvärde i Excel?

För att flytta hela raden till botten av det aktiva arket baserat på cellvärde i Excel, försök VBA-koden i den här artikeln.

Flytta hela raden till botten av det aktiva arket baserat på cellvärde med VBA-kod


Flytta hela raden till botten av det aktiva arket baserat på cellvärde med VBA-kod

Till exempel, som nedan visas skärmdump, om en cell i kolumn C innehåller ett visst värde "Klar", flytta sedan hela raden till botten av det aktuella arket. Gör så här.

1. Tryck andra+ F11 samtidigt för att öppna Microsoft Visual Basic för applikationer fönster.

2. I Microsoft Visual Basic för applikationer fönstret klickar Insert > Modulerna. Kopiera sedan och klistra in nedanstående VBA-kod i fönstret.

VBA-kod: Flytta hela raden till botten av det aktiva arket baserat på cellvärde

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

Anmärkningar: I VBA-koden, “Färdig ”Är det cellvärde du kommer att flytta hela raden baserat på. Du kan ändra det efter behov.

3. tryck på F5 nyckel för att köra koden och sedan poppar upp Kutools för Excel i dialogrutan, välj det kolumnintervall som ett visst värde finns i och klicka sedan på OK knapp.

När du klickat på OK -knappen flyttas hela raden som innehåller värdet "Klar" i den angivna kolumnen automatiskt till botten av dataområdet.


Relaterade artiklar:


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (28)
Klassad 4.75 av 5 · 2 betyg
Denna kommentar minimerades av moderatoren på webbplatsen
Hur skulle jag kunna göra det så att kutools väljer specifika rader utan användarinmatning?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Anon,
Jag är ledsen, jag är inte säker på vad du menar. Skulle vara trevligt om du kan förklara det igen eller ge en skärmdump för att visa vad du försöker göra.
Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Crystal, den här koden fungerar utmärkt, tack. Jag skulle vilja flytta alla rader som innehåller ordet "Complete" i kolumn D till toppen av tabellen (infoga i rad 3). Är det möjligt? då skulle jag vilja ta bort alla dessa kompletta rader som innehåller "igår-datum" i kolumn V.
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå. Det här är nästan perfekt för det jag vill ha. Jag har en del av samma begäran som Anon var tvungen att få det här att fungera utan användarinput tillsammans med några extrafunktioner.

Jag undrar om det är möjligt att få den enda kolumnen som söks till att vara i4 till i50 och få den att köras automatiskt vid öppen eller när som helst i-kolumnen redigeras. Även om det skulle vara möjligt att flytta raderna till botten av arket utan några tomma rader mellan "klara"-rader och "no"-rader. Om jag för närvarande väljer i4:i50 och om jag bara har data upp till rad 25 kommer det att klistra in de "klara" raderna som stiger upp från rad 50 istället för rad 25. Antalet rader i mitt ark ändras ständigt och borde inte komma till fler än 50. Tack för hjälpen.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Brandon,
Sorry kan hjälpa dig med det. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, finns det något sätt att justera detta så att det flyttar en rad någon annanstans i samma ark än slutet? Jag har ett blad som har beställningsinformation för daterade beställningar och kommande beställningar som ännu inte är daterade och jag har det så att när jag sätter ett "X" i kolumn A markeras saker och ting i fetstil beroende på delnummer och leveransplatser. Nu måste jag fysiskt klippa och klistra in det nyligen daterade (leveransdatum) så att det passar överst sorterat efter datum (1:a till slutet av månaden). Jag har kunnat villkorsformatera allt fram till denna punkt, men jag tror inte att jag kan flytta rader på det sättet. Jag undrade om VBA kunde göra detta, flytta en rad när ett datum skrivs in för att passa in med de andra daterade raderna?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, det enda sättet jag kan få detta att fungera är om jag "kör" makrot på underskärmen Visual Basic. Är det möjligt att få den här VBA-koden att köras automatiskt när användaren skriver in "Klar"? Varje gång jag får Kutools för Excel-dialogrutan dyker upp för att fråga parametrarna jag ber om koden att söka efter. Jag har typ löst detta genom att ersätta : xTxt = ActiveSheet.UsedRange.AddressLocal med parametrarna jag behöver söka efter och trycka på enter. Men det skulle vara bekvämare om den automatiskt gjorde ändringarna efter att "Klar" matats in. Tack!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Anon,
VBA-koden nedan kan göra dig en tjänst. Gör ett försök.
Vänligen högerklicka på arkfliken (arket innehåller data som du kommer att flytta till botten), välj Visa kod från snabbmenyn och kopiera nedanstående kod till kodfönstret.

Privata delarkivsförändring (ByVal-mål som område)
'Uppdaterad av Extendoffice 20190925
Dim xRg As Range
Dim xIRg As Range
Dim xTxt As String
Dim xCell As Range
Dim xEndRow As Long
Dim I As Long
Dim xDSr As String
On Error Resume Next
xDStr = "C:C"
Ställ in xRg = Me.Range(xDSr)
Ställ in xIRg = Application.Intersect(Target, xRg)
Om xIRg är ingenting, avsluta Sub
Application.ScreenUpdating = False
Application.EnableEvents = False

Om Target = "Klart" då
xEndRow = ActiveSheet.UsedRange.Rows.Count + 1
Target.EntireRow.Cut
Rows(xEndRow). Infoga Shift:=xlDown
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej kristall,

Tack för att du postade den här koden. Jag skulle vilja veta hur man får koden för att flytta raden tillbaka till toppen om Klart skrevs in av misstag. Kan en sekundär kod läggas till för "flytta" för att flytta den till toppen och "klar" för botten?
Denna kommentar minimerades av moderatoren på webbplatsen
hej crystal koden du gav till anon för att få vba att köra koden automatiskt är bra men jag kan inte infoga ett ark med rader finns det ett möjligt sätt att fixa det
Denna kommentar minimerades av moderatoren på webbplatsen
Hej sarah,
Beklagar olägenheten. Vänligen prova nedanstående VBA. Tack.

Privata delarkivsförändring (ByVal-mål som område)

'Uppdaterad av Extendoffice 20200424

Dim xRg As Range

Dim xIRg As Range

Dim xTxt As String

Dim xCell As Range

Dim xEndRow As Long

Dim I As Long

Dim xDSr As String

Vid fel GoTo Err1

xDStr = "C:C"

Ställ in xRg = Me.Range(xDSr)

Ställ in xIRg = Application.Intersect(Target, xRg)

Om xIRg är ingenting, avsluta Sub

Application.ScreenUpdating = False

Application.EnableEvents = False



Om Target.Value = "Klart" Då

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

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

Target.EntireRow.Cut

Rows(xEndRow). Infoga Shift:=xlDown

End If

Err1:

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Jag försökte kopiera den här koden men den fortsätter att säga ogiltig användning av mig.
Denna kommentar minimerades av moderatoren på webbplatsen
Vad händer om du bara behöver flytta rader under kolumn A och B; då ska kolumn C behållas? ska vi fortfarande använda EntireRow?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Jerel,
Prova koden nedan. Hoppas jag kan hjälpa till.

Sub MoveToEnd()

'Uppdaterad av Extendoffice 20200717

Dim xRg As Range

Dim xTxt As String

Dim xCell As Range

Dim xEndRow As Long

Dim xIntR Som heltal

Dim I As Long

Dim xWs Som arbetsblad

On Error Resume Next

Om ActiveWindow.RangeSelection.Count > 1 Då

xTxt = ActiveWindow.RangeSelection.AddressLocal

annars

xTxt = ActiveSheet.UsedRange.AddressLocal

End If

ensam:

Set xRg = Application.InputBox("Välj intervall:", "Kutools för Excel", xTxt, , , , , 8)

Om xRg är ingenting, avsluta Sub

Om xRg.Columns.Count > 1 Eller xRg.Areas.Count > 1 Då

MsgBox " Flera intervall eller kolumner har valts ", vbInformation, "Kutools för Excel"

Gå till lOne

End If

xEndRow = xRg.Rows.Count + xRg.Row

xWs = xRg.Arbetsblad

xWs.Aktivera

Application.ScreenUpdating = False

För I = xRg.Rows.Count To 1 Steg -1

Om xRg.Item(I) = "Klar" Då

Rows(xEndRow).Infoga Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

xIntR = xRg.Cells(I).Row

Range("A" & xIntR & ":B" & xIntR). Välj

Selection.Cut

Range("A" & xEndRow). Välj

ActiveSheet.Paste

xEndRow = xEndRow + 1



End If

Nästa

Application.ScreenUpdating = True

End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hallå,



Jag har problem med att använda koden som tillhandahålls och får ett syntaxfel hela tiden. Jag är superny på att utmärka mig och har försökt att själv lära ut vad jag behöver för att driva mitt hemföretag. Jag har ett kalkylarks-id för inventering som vill kunna ange objekt i en kolumn som PENSIONERAD? ja/nej och om ja, flyttas de till botten av arket, i alfabetisk ordning, utan att lämna ett tomt utrymme i huvudkalkylarket. vi har artiklarna helt och hållet och kommer sedan tillbaka för en speciell återutgivning i begränsade mängder och id som dessa artiklar lagras längst ner på mitt ark tills de blir tillgängliga igen. Tack.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, jag har en uppgift som min chef har gett mig. Det verkade enkelt nog i början men nu är jag förvirrad över hur jag ska gå vidare. Vi har ett prognosblad över möjliga jobb och de har kolumnen "Ordersannolikhet" med %. Han vill att jag ska sätta upp 3 olika ark med 100-70%, 69%-41 och 40-0%. Tanken är att när informationen skrivs in i huvudarket, när procentsatsen skrivs in, kopieras den automatiskt till det fortlöpande arket som matchar den percentilen. Jag gjorde detta med en enkel IF (och formel. Men jag måste sortera för att tappa de tomma cellerna och få det att se renare ut. Sedan när jag sorterar , om jag lägger till ett nytt Oder-sannolikhetserbjudande till masterarket, gör det inte automatiskt visa det, utan att avsortera och sedan sortera igen. Jag ber om ursäkt om den här frågan inte tillhör henne. Men finns det en kodsträng jag skulle kunna lägga in som skulle hantera det här problemet lättare? Det enda värdet som avgör om hela raden flyttas är Kolumnen K. verkar enkel, men hur komplex den än är för denna excel-nybörjare. Tack på förhand för din hjälp.
Denna kommentar minimerades av moderatoren på webbplatsen
Hur gör man om "Klart" bara är en del av en kolumnsträng. Anta att mina kolumner innehåller värden som - XYZDone, ABCDone, 123Done etc, kan jag bara filtrera bort baserat på en delsträng "Done"?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Crystal,
Tack för hjälpen, koden fungerar utmärkt men i stället för att flytta raden till botten av en sida, hur flyttar jag den till en annan flik, dvs. en "Stängd" flik?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Förlåt för att jag svarar så sent.
I koden behöver du bara ändra raden "Om xRg.Cells(I) = "Klar" Då"till Om xRg.Cells(I) Gillar "*Done*" Då för att få det gjort.
Denna kommentar minimerades av moderatoren på webbplatsen
Jag har en lista med kryssrutor att när en kolumn är markerad behöver jag den för att gå till en del av kalkylarket och om den andra är markerad istället går den till slutet. Jag har provat hundra olika sätt att göra detta, kan någon hjälpa med detta?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej! Jag har precis köpt kutools så att jag kunde *** denna vba-kod till mitt excelark, eftersom det kommer att vara en utmärkt funktion att använda! Instruktionerna ovan är enkla och användbara; men när jag kommer till steget där koden kopieras och klistras in i fönstret och trycker på F5, skickade den mig till en ruta för att namnge och skapa makrot. Jag gjorde det men nu kommer det inte att ta mig till dialogrutan så att jag kan välja cellintervall. Ett kompileringsfel med "ogiltig extern procedur" dyker upp. Snälla hjälp!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Jag är ledsen att jag vilseledde dig. Koden kan användas på egen hand och kräver inte köp av Kutools. Om du inte behöver det, vänligen maila till sales@extendoffice.com för att be om återbetalning.
För att koden ska fungera smidigt måste du se till att markören är i kodfönstret (klicka på valfritt ord i koden), tryck sedan på F5 nyckel för att köra koden. Då dyker dialogrutan för att välja ett cellområde upp.
Jag ber om ursäkt igen för besväret.
Denna kommentar minimerades av moderatoren på webbplatsen
jag igen! Jag kom på koden. Jag hade manuellt kopierat och klistrat in koden istället för att använda kopieringsknappen längst upp till höger på skärmen. Jag ändrade "klar" till "x". Jag har kört koden i vart och ett av kalkylbladen. När jag börjar skriva in "x" i de cellerna inom de valda cellområdena från dialogrutan, händer ingenting (rader flyttas inte automatiskt ner till botten). Jag är MYCKET NY på detta....tack för din hjälp!
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Om du automatiskt vill flytta raden till botten när du anger det angivna ordet, försök med följande VBA-kod.
Anmärkningar: du måste ange koden i fönstret Arbetsbladskod (högerklicka på arkfliken och välj Visa kod från snabbmenyn).

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
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Crystal,

Tack för alla bra koder. Finns det något sätt att göra detta utan Kutools? Jag ser inte heller en dialogruta för att välja ett cellområde, den dyker inte upp för mig.

Tack,
Jaz
Klassad 5 av 5
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Jaz,
Du kan ange cellintervallet direkt i koden utan att behöva pop upp dialogrutan Kutools för att välja intervallet.
Byt ut följande rad i koden:
Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)

med:
Set xRg = Range("C2:C13")
Denna kommentar minimerades av moderatoren på webbplatsen
Finns det något sätt att flytta tillbaka rader till den ursprungliga platsen när statusen för ingången ändras? Till exempel om någon ändrar den från "Klar" till "ofullständig", finns det något sätt att programmera Excel för att flytta tillbaka det?
Dessutom, är denna förändring permanent? Jag har märkt att efter att ha jobbat första gången slutade det fungera efter det.

Tack för hjälpen och inlägget!
Klassad 4.5 av 5
Denna kommentar minimerades av moderatoren på webbplatsen
Hej zoe,

Tack för din kommentar.
1. För den första frågan:
Raden som flyttades kan inte flyttas tillbaka till sin ursprungliga plats;
2. För den andra frågan:
Denna VBA-kod måste köras manuellt varje gång du behöver flytta rader. Om du vill flytta raden automatiskt när cellvärdet matchar villkoret kan du prova följande VBA-kod.
Anmärkningar: Du måste lägga den här koden i arkredigeraren (kod) (högerklicka på arkfliken och välj Visa kod för att öppna redigeraren). Och ändra kolumnintervallet B2:B12 till ditt eget intervall.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated Extendoffice 20230111
    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("B2:B12")
    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
Det finns inga kommentarer här ännu
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL