Se gestisci più fogli contemporaneamente e desideri copiare i dati da ogni foglio in un foglio di lavoro principale, dovresti leggere questo articolo. Useremo la proprietà currentregion del codice VBA per consolidare i dati di tutti i fogli di lavoro in un unico foglio. Questa proprietà è utile per molte operazioni che espandono automaticamente la selezione per includere l’intera regione corrente, come il metodo AutoFormat. Questa proprietà non può essere utilizzata su un foglio di lavoro protetto.

La condizione è: ogni foglio deve contenere un formato simile, ovvero lo stesso numero di colonne; utilizzando lo stesso formato possiamo avere dati accuratamente uniti.

Nota: questo articolo dimostrerà l’utilizzo del codice VBA; se per qualsiasi motivo il numero di colonne differisce in uno dei fogli, tutti i dati uniti non daranno un’immagine precisa. Si consiglia vivamente di utilizzare lo stesso numero di colonne. Il codice VBA aggiungerà un nuovo foglio alla cartella di lavoro e quindi copia e incolla i dati dopo ogni foglio senza sovrascriverli.

Prendiamo un esempio di 3 fogli, vale a dire gennaio, febbraio e marzo. Di seguito è riportata l’istantanea di questi fogli:

img1

img2

img3

Per combinare i dati di tutti i fogli in un unico foglio, dobbiamo seguire i passaggi seguenti per avviare l’editor VB:

Fare clic sulla scheda Sviluppatore Dal gruppo Codice selezionare Visual Basic

img4

  • Copia il codice seguente nel modulo standard

Sub CopyCurrentRegion()

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.Range("A1").CurrentRegion.Copy DestSh.Cells(Last + 1, 1)

End If

End If

Next

Application.ScreenUpdating = True

End Sub

Sub CopyCurrentRegionValues()

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.Range("A1").CurrentRegion

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

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]_