Copia un intervallo da ogni foglio in un foglio usando VBA in Microsoft Excel
In questo articolo, creeremo una macro per copiare i dati da tutti i fogli della cartella di lavoro in un nuovo foglio.
I dati grezzi per questo esempio sono costituiti dai dettagli dei dipendenti di diversi reparti in fogli diversi. Vogliamo consolidare i dettagli dei dipendenti in un unico foglio.
Abbiamo creato la macro “CopyRangeFromMultipleSheets” per il consolidamento dei dati. Questa macro può essere eseguita facendo clic sul pulsante “Consolida dati”.
Macro creerà un nuovo foglio di lavoro e inserirà i dati consolidati da tutti i fogli di lavoro.
Spiegazione del codice
Eseguire il “ciclo” attraverso tutti i fogli per verificare se esiste il foglio “Master”.
Per ogni fonte in ThisWorkbook.Worksheets If Source.Name = “Master” Then MsgBox “Master sheet già esistente”
Il codice Exit Sub End If Next Above viene utilizzato per verificare se il foglio “Master” esiste nella cartella di lavoro. Se il foglio “Master” è presente nella cartella di lavoro, il codice viene chiuso e viene visualizzato un messaggio di errore.
Source.Range (“A1”). SpecialCells (xlLastCell) .Row Il codice sopra viene utilizzato per ottenere il numero di riga dell’ultima cella del foglio.
Source.Range (“A1”, Range (“A1”). SpecialCells (xlLastCell)). Copia Destination.Range (“A” & DestLastRow)
Il codice sopra viene utilizzato per copiare l’intervallo specificato nella cella definita.
Segui sotto per il codice
Sub CopyRangeFromMultipleSheets() 'Declaring variables Dim Source As Worksheet Dim Destination As Worksheet Dim SourceLastRow, DestLastRow As Long Application.ScreenUpdating = False 'Looping through all sheets to check whether "Master" sheet exist For Each Source In ThisWorkbook.Worksheets If Source.Name = "Master" Then MsgBox "Master sheet already exist" Exit Sub End If Next 'Inserting a new sheet after the "Main" sheet Set Destination = Worksheets.Add(after:=Sheets("Main")) Destination.Name = "Master" 'Looping through all the sheets in the workbook For Each Source In ThisWorkbook.Worksheets 'Preventing consolidation of data from "Main" and "Master" sheet If Source.Name <> "Main" And Source.Name <> "Master" Then SourceLastRow = Source.Range("A1").SpecialCells(xlLastCell).Row Source.Activate If Source.UsedRange.Count > 1 Then DestLastRow = Sheets("Master").Range("A1").SpecialCells(xlLastCell).Row If DestLastRow = 1 Then 'copying data from the source sheet to destination sheet Source.Range("A1", Range("A1").SpecialCells(xlLastCell)).Copy Destination.Range("A" & DestLastRow) Else Source.Range("A2", Range("A1").SpecialCells(xlCellTypeLastCell)).Copy Destination.Range("A" & (DestLastRow + 1)) End If End If End If Next Destination.Activate Application.ScreenUpdating = True End Sub
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]