Macro excel taglia e incolla righe con determinato valore

Anonimo
2022-12-31T17:42:16+00:00

Buonasera, spero qualcuno riesca ad aiutarmi.

Ho una tabella che va da C8 ad L8 con tante righe. Devo creare una macro associata ad un pulsante in modo tale che mi copi soltanto le righe che presentano un determinato valore, 0 nella colonna J oppure un valore <della data di oggi che si trova nella Colonna G. Queste righe che presentano questi valori devono essere tagliate e incollate in un'altra tabella che si trova su un altro foglio della stessa cartella.

Grazie a chi mi sa rispondere

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2023-01-02T23:34:35+00:00

    Ciao Samuele,

    Con un piccolo elemento di pensiero laterale, un altro approccio (possibilmente meno intuitivo per i tuoi colleghi) sarebbe quello di sfruttare lo strumento di filtro avanzato integrato in Excel. In questo modo puoi imporre le condizioni di filtro richieste ed estrarre i dati dei risultati richiesti nel foglio di destinazione di tua scelta.

    A questo proposito, vedi il seguente articolo del supporto Microsoft: Filtrare in base a criteri avanzati

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2023-01-02T23:12:15+00:00

    Ciao Samuele,

    Grazie per la risposta, ho provato, però così non riesco a farlo funzionare.

    Dal link è possibile scaricare il file di mio interesse.

    Praticamente devo fare in modo che taglia tutte le righe della prima tabella che presentano come valore la data di scadenza minore di oggi e la quantità rimenente uguale a 0. Queste righe le deve incollare nella seconda tabella presente nel secondo foglio e quando le inserisce dovrebbe inserire delle righe alla tabella preesistente in modo da non perdere i vecchi dati.

    È fattibile come cosa?

    https://1drv.ms/x/s!AgCpugcDIAUNbzjOYVLoPam29ro

    La mia risposta iniziale sarebbe chiedere se hai provato a eseguire il mio codice con i dati forniti nel mio file prova e se, in alternativa, hai provato a implementare l'approccio della formula suggerito.

    Detto questo, ho scaricato il tuo file e, mi scuso, oltre a non essere in grado di vedere alcuna potenziale implementazione del mio codice, non riesco a capire i risultati desiderati.

    Leggendo il tuo file, non sono in grado di percepire né le necessarie condizioni di filtro, né il codice modificato richiesto, né i risultati previsti.

    In breve mi capito di calarmi nel pantano e incapace di assisterti ulteriormente - a meno che tu non scelga, gentilmente, di fornire una migliore indicazione non solo dei dati di origine ma anche un'indicazione dei risultati desiderati.

    Il mio suggerimento, quindi, sarebbe che tu confermi se la tua preferenza è per una formula o una soluzione VBA e che fornisci esempi adeguatamente descrittivi dei tuoi dati di origine e dei risultati desiderati.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2023-01-02T17:36:02+00:00

    Grazie per la risposta, ho provato, però così non riesco a farlo funzionare.

    Dal link è possibile scaricare il file di mio interesse.

    Praticamente devo fare in modo che taglia tutte le righe della prima tabella che presentano come valore la data di scadenza minore di oggi e la quantità rimenente uguale a 0. Queste righe le deve incollare nella seconda tabella presente nel secondo foglio e quando le inserisce dovrebbe inserire delle righe alla tabella preesistente in modo da non perdere i vecchi dati.

    È fattibile come cosa?

    Grazie

    https://1drv.ms/x/s!AgCpugcDIAUNbzjOYVLoPam29ro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2023-01-01T03:05:45+00:00

    Ciao Samuele,

    Ho una tabella che va da C8 ad L8 con tante righe. Devo creare una macro associata ad un pulsante in modo tale che mi copi soltanto le righe che presentano un determinato valore, 0 nella colonna J oppure un valore <della data di oggi che si trova nella Colonna G. Queste righe che presentano questi valori devono essere tagliate e incollate in un'altra tabella che si trova su un altro foglio della stessa cartella.

    Se disponi di Excel 365, potresti ottenere i risultati desiderati con una semplice formula.

    Più in particolare se i dati di origine si trovano in una tabella Excel, Tabella1, e le colonne G e J della tabella hanno le intestazioni Dati e Importo, la seguente formula estrarrà i dati richiesti:

      **=FILTRO(Tabella1;(Tabella1[Importo]=0)\*(Tabella1[Data]&lt;OGGI()))**
    

    Tieni presente che questa formula deve essere inserita solo in una cella poiché la funzione FILTRO() si espande automaticamente per restituire tutti i dati richiesti.

    Se hai una versione precedente di Excel, o se preferisci sfruttare VBA, potresti provare qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '========>>

    Option Explicit

    '-------->>

    Public Sub Tester()

    Dim WB As Workbook 
    
    Dim srcSH As Worksheet, destSH As Worksheet 
    
    Dim srcRng As Range, destRng As Range, headerRng As Range 
    
    Dim oTabella As ListObject 
    
    Dim arrIn As Variant, arrOut As Variant 
    
    Dim i As Long, j As Long, iCtr As Long 
    
    Dim UB As Long, UB2 As Long 
    
    Const sFoglio\_Sorgente As String = **"Foglio1"                   '&lt;&lt;=== Modifica** 
    
    Const sFoglio\_Destinazione  As String = **"Foglio2"            '&lt;&lt;=== Modifica** 
    
    Const sTabella As String = **"Tabella1"                                 '&lt;&lt;=== Modifica** 
    
    Set WB = ThisWorkbook 
    
    With WB 
    
        Set srcSH = .Sheets(sFoglio\_Sorgente) 
    
        Set destSH = .Sheets(sFoglio\_Destinazione) 
    
    End With 
    
    Set oTabella = srcSH.ListObjects(sTabella) 
    
    With oTabella 
    
        Set srcRng = .DataBodyRange 
    
        Set headerRng = .HeaderRowRange 
    
    End With 
    
    arrIn = srcRng.Value2 
    
    UB = UBound(arrIn) 
    
    UB2 = UBound(arrIn, 2) 
    
    ReDim arrOut(1 To UB, 1 To UB2) 
    
    For i = 1 To UB 
    
        If arrIn(i, 5) &lt; Date And arrIn(i, 8) = 0 Then 
    
            iCtr = iCtr + 1 
    
            For j = 1 To UB2 
    
                arrOut(iCtr, j) = arrIn(i, j) 
    
            Next j 
    
        End If 
    
    Next i 
    
    Set destRng = destSH.Range("A2") 
    
    With destRng 
    
        destSH.Range(.Cells(1), .End(xlDown)).Resize(, UB2).ClearContents 
    
        .Resize(iCtr, UB2).Value = arrOut 
    
        .Cells(0).Resize(1, UB2).Value = headerRng.Value 
    
    End With 
    

    End Sub

    '<<========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel.
    • Salva il file con l'estensione xlsm
    • Assegna la macro Tester al tuo pulsante

    Potresti scaricare il mio file di prova Samuele20230101.xlsm In cui dimostro sia la formula che l'approccio VBA.

    A causa di un problema con l'attuale editor del forum, che inserisce righe vuote indesiderate nel codice copiato dal forum, suggerirei di copiare il mio codice direttamente dal mio file di prova.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento