Vba: copia le righe su un altro foglio in base a criteri


È possibile utilizzare la seguente sintassi in VBA per copiare ogni riga di un foglio che soddisfa criteri specifici su un altro foglio:

 Sub CopyToAnotherSheet()

   Dim LastRow As Long

  'Find last used row in a Column A of Sheet1
   With Worksheets(" Sheet1 ")
      LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
   End With

   'Find first row where values should be posted in Sheet2
   With Worksheets(" Sheet2 ")
      j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
   End With
   
   'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
   For i = 1 TB LastRow
       With Worksheets(" Sheet1 ")
           If .Cells(i, 1).Value = "Mavs" Then
               .Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
               j = j + 1
           End If
       End With
   Next i
   
End Sub

Questa particolare macro copierà ogni riga di Sheet1 dove la colonna A è uguale a “Mavs” e incollerà ciascuna di quelle righe nelle successive righe disponibili di Sheet2 .

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: copiare le righe su un altro foglio in base ai criteri utilizzando VBA

Supponiamo di avere il seguente set di dati nel Foglio 1 che contiene informazioni su vari giocatori di basket:

E supponiamo di avere il seguente set di dati nel Foglio2 :

Tieni presente che il Foglio2 contiene solo dati sui giocatori della squadra Warriors.

Diciamo che vogliamo copiare ogni riga da Sheet1 dove la colonna Team è uguale a Mavs e incollare ciascuna di quelle righe nelle successive righe disponibili di Sheet2 .

Per fare ciò possiamo creare la seguente macro:

 Sub CopyToAnotherSheet()

   Dim LastRow As Long

  'Find last used row in a Column A of Sheet1
   With Worksheets(" Sheet1 ")
      LastRow = .Cells(.Rows.Count, " A ").End(xlUp).Row
   End With

   'Find first row where values should be posted in Sheet2
   With Worksheets(" Sheet2 ")
      j = .Cells(.Rows.Count, " A ").End(xlUp).Row + 1
   End With
   
   'Paste each row that contains "Mavs" in column A of Sheet1 into Sheet2
   For i = 1 TB LastRow
       With Worksheets(" Sheet1 ")
           If .Cells(i, 1).Value = "Mavs" Then
               .Rows(i).Copy Destination:=Worksheets(" Sheet2 ").Range(" A " & j)
               j = j + 1
           End If
       End With
   Next i
   
End Sub

Quando eseguiamo questa macro, riceviamo il seguente output in Sheet2 :

Tieni presente che ogni riga nel Foglio1 in cui il nome della squadra era uguale a Mavs è stata incollata nelle successive righe disponibili nel Foglio2 .

Nota : qui è possibile trovare la documentazione completa per il metodo Copia VBA.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in VBA:

VBA: come trovare l’ultima riga utilizzata
VBA: come contare il numero di righe nell’intervallo
VBA: come contare il numero di colonne utilizzate

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *