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

Come spostare l'intera riga nella parte inferiore del foglio attivo in base al valore della cella in Excel?

Per spostare l'intera riga nella parte inferiore del foglio attivo in base al valore della cella in Excel, prova il codice VBA in questo articolo.

Sposta l'intera riga nella parte inferiore del foglio attivo in base al valore della cella con codice VBA


Sposta l'intera riga nella parte inferiore del foglio attivo in base al valore della cella con codice VBA

Ad esempio, come mostrato nell'immagine sottostante, se una cella nella colonna C contiene un determinato valore "Fatto", sposta l'intera riga in fondo al foglio corrente. Si prega di fare quanto segue.

1. Stampa altro+ F11 tasti contemporaneamente per aprire il file Microsoft Visual Basic, Applications Edition finestra.

2. Nel Microsoft Visual Basic, Applications Edition finestra, fare clic inserire > Modulo. Quindi copia e incolla il codice VBA sottostante nella finestra.

Codice VBA: sposta l'intera riga in fondo al foglio attivo in base al valore della cella

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

Note:: Nel codice VBA, "Fatto"È il valore della cella su cui sposterai l'intera riga. Puoi cambiarlo quando ti serve.

3. premi il F5 chiave per eseguire il codice, quindi nel pop-up Kutools for Excel finestra di dialogo, selezionare l'intervallo di colonne in cui esiste un determinato valore, quindi fare clic su OK pulsante.

Dopo aver cliccato il OK , l'intera riga che contiene il valore "Fatto" nella colonna specificata viene spostata automaticamente in fondo all'intervallo di dati.


Articoli correlati:


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (28)
Rinomato 4.75 su 5 · Valutazioni 2
Questo commento è stato fatto dal moderatore sul sito
Come posso fare in modo che kutools selezioni righe specifiche senza l'input dell'utente?
Questo commento è stato fatto dal moderatore sul sito
Ciao Anon,
Mi dispiace, non sono sicuro di cosa intendi. Sarebbe bello se potessi spiegarlo di nuovo o fornire uno screenshot per mostrare cosa stai cercando di fare.
Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
Ciao Crystal, questo codice funziona alla grande, grazie. Vorrei spostare tutte le righe che contengono la parola "Completo" nella colonna D nella parte superiore della tabella (inserire nella riga 3). È possibile? quindi vorrei eliminare tutte queste righe complete che contengono "data di ieri" nella colonna V.
Questo commento è stato fatto dal moderatore sul sito
Ciao. Questo è quasi perfetto per quello che voglio. Ho parte della stessa richiesta in cui Anon ha dovuto farlo funzionare senza l'input dell'utente insieme ad alcuni extra.

Mi chiedo se è possibile che l'unica colonna cercata sia da i4 a i50 e che venga eseguita automaticamente all'apertura o ogni volta che la colonna i viene modificata. Anche se fosse possibile spostare le righe in fondo al foglio senza righe vuote tra le righe "finite" e le righe "no". Attualmente se seleziono i4:i50 e se ho solo dati fino alla riga 25, incollerà le righe "finite" ascendenti dalla riga 50 anziché dalla riga 25. Il numero di righe nel mio foglio è in continua evoluzione e non dovrebbe arrivare a più di 50. Grazie per l'aiuto.
Questo commento è stato fatto dal moderatore sul sito
Ciao Brandon,
Mi dispiace, posso aiutarti in questo. Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
Ciao, c'è un modo per modificarlo in modo che sposti una riga da qualche altra parte nello stesso foglio oltre alla fine? Ho un foglio che contiene informazioni sull'ordine per ordini datati e ordini imminenti ancora non datati e ce l'ho in modo che quando inserisco una "X" nella colonna A le cose evidenzino e in grassetto a seconda dei numeri di parte e dei luoghi di spedizione. Ora devo tagliare e incollare fisicamente la nuova data (data di spedizione) in modo che rientri nella parte superiore ordinata per data (dal primo alla fine del mese). Sono stato in grado di formattare condizionalmente tutto fino a questo punto, ma non credo di poter spostare le righe in questo modo. Mi chiedevo se VBA potesse farlo, spostare una riga quando viene inserita una data per adattarsi alle altre righe datate?
Questo commento è stato fatto dal moderatore sul sito
Ciao, l'unico modo in cui posso farlo funzionare è se "eseguo" la macro nella schermata secondaria di Visual Basic. È possibile eseguire automaticamente questo codice VBA, una volta che l'utente digita "Fatto"? Ogni volta che viene visualizzata la finestra di dialogo Kutools for Excel per chiedere i parametri per cui sto richiedendo il codice per la ricerca. Ho in qualche modo risolto questo problema sostituendo: xTxt = ActiveSheet.UsedRange.AddressLocal con i parametri che devo cercare e premendo invio. Ma sarebbe più conveniente se apportasse automaticamente le modifiche dopo l'immissione di "Fatto". Grazie!
Questo commento è stato fatto dal moderatore sul sito
Ciao Anon,
Il codice VBA sottostante può farti un favore. Per favore, prova.
Fai clic con il pulsante destro del mouse sulla scheda del foglio (il foglio contiene i dati che sposterai in basso), seleziona Visualizza codice dal menu contestuale e copia il codice seguente nella finestra Codice.

Private Sub Worksheet_Change (ByVal Target As Range)
'Aggiornato da Extendoffice 20190925
Dim xRg come intervallo
Dim xIRg come intervallo
Dim xTxt come stringa
Dim xCell come intervallo
Dim xEndRow finché
Dim I quanto a lungo
Dim xDStr come stringa
On Error Resume Next
xDStr = "C:C"
Imposta xRg = Me.Range(xDStr)
Imposta xIRg = Application.Intersect(Target, xRg)
Se xIRg non è nulla, esci da Sub
Application.ScreenUpdating = False
Application.EnableEvents = False

Se Target = "Fatto", allora
xEndRow = ActiveSheet.UsedRange.Rows.Count + 1
Target.EntreRow.Cut
Righe(xEndRow).Insert Shift:=xlDown
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao cristallo,

Grazie per aver pubblicato questo codice. Vorrei sapere come ottenere il codice per riportare la riga in alto se Done è stato digitato per errore. È possibile aggiungere un codice secondario per "sposta" per spostarlo in alto e "fatto" per il basso?
Questo commento è stato fatto dal moderatore sul sito
ciao cristallo il codice che hai dato ad anon per far eseguire automaticamente il codice vba è fantastico ma non posso inserire un foglio di righe c'è un modo possibile per risolverlo
Questo commento è stato fatto dal moderatore sul sito
ciao sara,
Ci dispiace per l'inconvenienza. Si prega di provare il seguente VBA. Grazie.

Private Sub Worksheet_Change (ByVal Target As Range)

'Aggiornato da Extendoffice 20200424

Dim xRg come intervallo

Dim xIRg come intervallo

Dim xTxt come stringa

Dim xCell come intervallo

Dim xEndRow finché

Dim I quanto a lungo

Dim xDStr come stringa

In caso di errore Vai a Err1

xDStr = "C:C"

Imposta xRg = Me.Range(xDStr)

Imposta xIRg = Application.Intersect(Target, xRg)

Se xIRg non è nulla, esci da Sub

Application.ScreenUpdating = False

Application.EnableEvents = False



Se Target.Value = "Fatto", allora

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

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

Target.EntreRow.Cut

Righe(xEndRow).Insert Shift:=xlDown

End If

Err1:

Application.EnableEvents = True

Application.ScreenUpdating = True

End Sub
Questo commento è stato fatto dal moderatore sul sito
Ho provato a copiare questo codice ma continua a dire uso non valido di Me.
Questo commento è stato fatto dal moderatore sul sito
Cosa succede se hai solo bisogno di spostare le righe sotto la colonna A e B; quindi la colonna C dovrebbe conservare? dovremmo ancora usare EntireRow?
Questo commento è stato fatto dal moderatore sul sito
Ciao Jerel,
Prova il codice qui sotto. Spero di poter aiutare.

Sub MoveToEnd()

'Aggiornato da Extendoffice 20200717

Dim xRg come intervallo

Dim xTxt come stringa

Dim xCell come intervallo

Dim xEndRow finché

Dim xIntR come intero

Dim I quanto a lungo

Dim xWs come foglio di lavoro

On Error Resume Next

Se ActiveWindow.RangeSelection.Count > 1 Allora

xTxt = ActiveWindow.RangeSelection.AddressLocal

Altro

xTxt = ActiveSheet.UsedRange.AddressLocal

End If

solitario:

Set xRg = Application.InputBox("Seleziona intervallo:", "Ktools for Excel", xTxt, , , , , 8)

Se xRg non è niente, esci da Sub

Se xRg.Columns.Count > 1 o xRg.Areas.Count > 1 Allora

MsgBox "Sono stati selezionati più intervalli o colonne", vbInformation, "Ktools for Excel"

Vai a uno

End If

xEndRow = xRg.Rows.Count + xRg.Row

xWs = xRg.Foglio di lavoro

xWs.Attiva

Application.ScreenUpdating = False

Per I = xRg.Rows.Count a 1 passaggio -1

Se xRg.Item(I) = "Fatto" Allora

Righe(xEndRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

xIntR = xRg.Cells(I).Riga

Intervallo("A" & xIntR & ":B" & xIntR).Seleziona

Selezione.Taglia

Intervallo("A" & xEndRow).Seleziona

ActiveSheet.Paste

xFineRiga = xFineRiga + 1



End If

Successiva

Application.ScreenUpdating = True

End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao,



Sto riscontrando problemi con l'utilizzo del codice fornito e continuo a ricevere un errore di sintassi. Sono super nuovo per eccellere e ho cercato di insegnare da solo ciò di cui ho bisogno per gestire la mia attività da casa. Ho un ID del foglio di calcolo dell'inventario per poter designare gli articoli in una colonna come RITIRATI? si/no e se si si spostano in fondo al foglio, in ordine alfabetico, senza lasciare uno spazio vuoto nel foglio di calcolo principale. abbiamo articoli che si ritirano completamente e poi tornano per una riedizione speciale in quantità limitate e identificano come questi articoli archiviati in fondo al mio foglio fino a quando non diventano nuovamente disponibili. Grazie.
Questo commento è stato fatto dal moderatore sul sito
Salve, ho un compito che il mio capo mi ha dato. All'inizio sembrava abbastanza semplice, ma ora sono confuso su come procedere. Abbiamo un foglio di previsione dei possibili lavori e hanno una colonna "Probabilità ordine" di %. Vuole che imposti 3 fogli diversi con 100-70%, 69%-41 e 40-0%. L'idea è che, poiché l'informazione viene digitata nel foglio principale, quando viene inserita la percentuale, viene automaticamente copiata nel foglio successivo corrispondente a quel percentile di rabbia. L'ho fatto con un semplice IF (e una formula. Tuttavia ho bisogno di ordinare per perdere le celle vuote e farlo sembrare più pulito. Quindi quando ordino, se aggiungo una nuova offerta di probabilità di Oder al foglio principale, non lo fa automaticamente mostralo, senza annullare l'ordinamento e quindi riordinare. Mi scuso se questa domanda non le appartiene. Ma c'è una stringa di codice che potrei inserire per gestire questo problema più facilmente? L'unico valore che determina se l'intera riga viene spostata è il Colonna K. sembra semplice, ma comunque complessa per questo principiante di Excel. Grazie in anticipo per il tuo aiuto.
Questo commento è stato fatto dal moderatore sul sito
Come farlo se "Fatto" è solo una parte di una stringa di colonna. Supponiamo che le mie colonne contengano valori come - XYZDone, ABCDone, 123Done ecc., posso semplicemente filtrare in base alla stringa parziale "Fatto"?
Questo commento è stato fatto dal moderatore sul sito
Ciao Cristallo,
Grazie per l'aiuto, il codice funziona alla grande ma invece di spostare la riga in fondo a una pagina come faccio a spostarla in un'altra scheda, ad esempio una scheda "Chiusa"?
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Scusa se rispondo così tardi.
Nel codice, devi solo cambiare la riga "Se xRg.Cells(I) = "Fatto" Allora"A Se a xRg.Cells(I) piace "*Fatto*", allora per farlo.
Questo commento è stato fatto dal moderatore sul sito
Ho un elenco con caselle di controllo che quando una colonna è selezionata ho bisogno che vada in una sezione del foglio di calcolo e se l'altra è selezionata, invece, va alla fine. Ho provato un centinaio di modi diversi per farlo qualcuno può aiutarmi con questo?
Questo commento è stato fatto dal moderatore sul sito
Ciao! Ho appena acquistato kutools in modo da poter *** questo codice vba sul mio foglio excel, poiché sarà una funzionalità eccellente da usare! Le istruzioni di cui sopra sono semplici e utili; tuttavia, una volta arrivato al passaggio in cui il codice viene copiato e incollato nella finestra e premuto F5, mi ha inviato una casella per nominare e creare la macro. L'ho fatto ma ora non mi porterà alla finestra di dialogo in modo da poter selezionare l'intervallo di celle. Viene visualizzato un errore di compilazione di "procedura esterna non valida". Per favore aiuto!
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Mi dispiace di averti fuorviato. Il codice può essere utilizzato da solo e non richiede l'acquisto di Kutools. Se non ne hai bisogno, invia un'e-mail a sales@extendoffice.com per chiedere un rimborso.
Affinché il codice funzioni correttamente, devi assicurarti che il tuo cursore si trovi nella finestra del codice (fai clic su una parola qualsiasi nel codice), quindi premi il F5 chiave per eseguire il codice. Quindi verrà visualizzata la finestra di dialogo per selezionare un intervallo di celle.
Ci scusiamo ancora per il disagio.
Questo commento è stato fatto dal moderatore sul sito
ancora io! Ho capito il codice. Avevo copiato e incollato manualmente il codice anziché utilizzare il pulsante di copia in alto a destra dello schermo. Ho cambiato "fatto" in "x". Ho eseguito il codice in ciascuno dei fogli di lavoro. Quando inizio a inserire "x" in quelle celle all'interno degli intervalli di celle selezionati dalla finestra di dialogo, non succede nulla (le righe non si spostano automaticamente verso il basso). Sono MOLTO NUOVO in questo .... grazie per il tuo aiuto!
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Se desideri spostare automaticamente la riga in fondo quando inserisci la parola specificata, prova il seguente codice VBA.
Note:: è necessario inserire il codice nella finestra del codice del foglio di lavoro (fare clic con il pulsante destro del mouse sulla scheda del foglio e selezionare Visualizza codice dal menu contestuale).

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
Questo commento è stato fatto dal moderatore sul sito
Ciao Cristallo,

Grazie per tutti i fantastici codici. C'è un modo per farlo senza Kutools? Inoltre, non vedo una finestra di dialogo per selezionare un intervallo di celle, non viene visualizzato per me.

Grazie,
Jaz
Rinomato 5 su 5
Questo commento è stato fatto dal moderatore sul sito
Ciao Jaz,
Puoi specificare l'intervallo di celle direttamente nel codice senza dover visualizzare la finestra di dialogo Kutools per selezionare l'intervallo.
Nel codice, sostituire la seguente riga:
Set xRg = Application.InputBox("Select range:", "Kutools for Excel", xTxt, , , , , 8)

con:
Set xRg = Range("C2:C13")
Questo commento è stato fatto dal moderatore sul sito
C'è un modo per riportare le righe nella posizione originale quando cambia lo stato dell'input? Ad esempio, se qualcuno lo cambia da "Fatto" a "incompleto", c'è un modo per programmare Excel per spostarlo indietro?
Inoltre, questo cambiamento è permanente? Ho notato che dopo aver lavorato la prima volta, ha smesso di funzionare dopo.

Grazie per il tuo aiuto e post!
Rinomato 4.5 su 5
Questo commento è stato fatto dal moderatore sul sito
Ciao Zoe,

Grazie per il tuo commento.
1. Per la prima domanda:
La riga che è stata spostata non può essere spostata nella sua posizione originale;
2. Per la seconda domanda:
Questo codice VBA deve essere eseguito manualmente ogni volta che è necessario spostare le righe. Se vuoi spostare automaticamente la riga quando il valore della cella corrisponde alla condizione, puoi provare il seguente codice VBA.
Note: Devi inserire questo codice nell'editor del foglio (codice) (fai clic con il pulsante destro del mouse sulla scheda del foglio e seleziona Visualizza codice per aprire l'editor). E cambia l'intervallo di colonne B2: B12 nel tuo intervallo.
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
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL