Copiare l’UsedRange di ogni foglio in un foglio utilizzando VBA in Microsoft Excel
Nel caso in cui desideri copiare l’intervallo utilizzato di ciascun foglio di lavoro nel foglio principale, dovresti leggere questo articolo. Useremo il codice VBA per copiare i dati da ciascun foglio di lavoro e quindi incollarli in un altro foglio senza sovrascrivere .
La macro aggiungerà un foglio con il nome Master alla tua cartella di lavoro e copierà le celle da ogni foglio della tua cartella di lavoro in questo foglio di lavoro .
La prima macro esegue una copia normale e la seconda macro copia i valori. I sottotitoli della macro utilizzano le funzioni seguenti; la macro non funzionerà senza le funzioni.
Di seguito è riportato l’istantanea dei dati da Foglio1 e Foglio2:
Dobbiamo seguire i passaggi seguenti per avviare l’editor VB:
Fare clic sulla scheda Sviluppatore Dal gruppo Codice, selezionare Visual Basic
-
Copia il codice seguente nel modulo standard
Sub CopyUsedRange() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Master") = True Then MsgBox "The sheet Master already exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name = "Master" For Each sh In ThisWorkbook.Worksheets If sh.Name <> DestSh.Name Then If sh.UsedRange.Count > 1 Then Last = LastRow(DestSh) sh.UsedRange.Copy DestSh.Cells(Last + 1, 1) End If End If Next Application.ScreenUpdating = True End Sub Sub CopyUsedRangeValues() Dim sh As Worksheet Dim DestSh As Worksheet Dim Last As Long If SheetExists("Master") = True Then MsgBox "The sheet Master already exist" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name = "Master" For Each sh In ThisWorkbook.Worksheets If sh.Name <> DestSh.Name Then If sh.UsedRange.Count > 1 Then Last = LastRow(DestSh) With sh.UsedRange DestSh.Cells(Last + 1, 1).Resize(.Rows.Count, _ .Columns.Count).Value = .Value End With End If End If Next Application.ScreenUpdating = True End Sub Function LastRow(sh As Worksheet) On Error Resume Next LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row On Error GoTo 0 End Function Function Lastcol(sh As Worksheet) On Error Resume Next Lastcol = sh.Cells.Find(What:="*", _ After:=sh.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Column On Error GoTo 0 End Function Function SheetExists(SName As String, _ Optional ByVal WB As Workbook) As Boolean On Error Resume Next If WB Is Nothing Then Set WB = ThisWorkbook SheetExists = CBool(Len(Sheets(SName).Name)) End Function
Ora, il codice macro è impostato; eseguiremo la macro “CopyUsedRange” e inseriremo un nuovo foglio “Master” e copieremo i dati da ogni foglio.
Conclusione: * La copia dei dati da più fogli è un’attività manuale; però; con il codice sopra, possiamo consolidare i dati con un solo clic su una macro.
Se i nostri blog ti sono piaciuti, condividilo con i tuoi amici su Facebook. E anche tu puoi seguirci su Twitter e Facebook.
_ Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare, integrare o innovare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]_