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