Copia un intervallo da ciascuna cartella di lavoro in una cartella utilizzando VBA in Microsoft Excel

Anonim

In questo articolo, creeremo una macro per copiare i dati da più cartelle di lavoro in una cartella in una nuova cartella di lavoro.

Creeremo due macro; una macro copierà solo i record dalla prima colonna alla nuova cartella di lavoro e la seconda macro copierà tutti i dati al suo interno.

I dati grezzi per questo esempio sono costituiti da record di presenze dei dipendenti. In TestFolder, abbiamo più file Excel. I nomi dei file Excel rappresentano una data particolare in formato "ggmmaaaa".

Ogni file Excel contiene la data, l'ID dipendente e il nome del dipendente di quei dipendenti che erano presenti in quel particolare giorno.

Abbiamo creato due macro; “CopyingSingleColumnData” e “CopyingMultipleColumnData”. La macro "CopyingSingleColumnData" copierà solo i record dalla prima colonna di tutti i file nella cartella nella nuova cartella di lavoro. La macro "CopyingMultipleColumnData" copierà tutti i dati da tutti i file nella cartella nella nuova cartella di lavoro.

La macro "CopyingSingleColumnData" può essere eseguita facendo clic sul pulsante "Copying Single Column". La macro "CopyingMultipleColumnData" può essere eseguita facendo clic sul pulsante "Copying Multiple Columns".

Prima di eseguire la macro, è necessario specificare il percorso della cartella nella casella di testo, in cui sono inseriti i file Excel.

Quando si fa clic sul pulsante "Copia singola colonna", verrà generata una nuova cartella di lavoro "ConsolidatedFile" nella cartella definita. Questa cartella di lavoro conterrà i dati consolidati dalla prima colonna di tutti i file nella cartella.

La nuova cartella di lavoro conterrà solo i record nella prima colonna. Una volta che abbiamo i dati consolidati, possiamo scoprire il numero di dipendenti presenti in un determinato giorno contando il numero di date. Il conteggio di una data particolare sarà uguale al numero di dipendenti presenti in quel particolare giorno.

Quando si fa clic sul pulsante "Copia di più colonne", verrà generata la nuova cartella di lavoro "ConsolidatedAllColumns" nella cartella definita. Questa cartella di lavoro conterrà i dati consolidati da tutti i record di tutti i file nella cartella.

La nuova cartella di lavoro creata conterrà tutti i record di tutti i file nella cartella. Una volta che abbiamo i dati consolidati, abbiamo tutti i dettagli delle presenze disponibili in un unico file. Possiamo facilmente trovare il numero di dipendenti presenti in quel particolare giorno e anche ottenere i nomi dei dipendenti che erano presenti in quel particolare giorno.

Spiegazione del codice

Foglio1.TextBox1.Value

Il codice sopra viene utilizzato per ottenere il valore inserito nella casella di testo “TextBox1” dal foglio “Sheet1”.

Dir(Percorsocartella & "*.xlsx")

Il codice sopra viene utilizzato per ottenere il nome del file, che ha estensione file ".xlsx". Abbiamo usato il carattere jolly * per il nome di file con più caratteri.

Mentre FileName ""

Conta1 = Conta1 + 1

ReDim Mantieni FileArray(1 per contare1)

FileArray(Count1) = FileName

NomeFile = Dir()

Wend

Il codice sopra viene utilizzato per ottenere i nomi dei file di tutti i file nella cartella.

Per i = 1 a UBound(FileArray)

Prossimo

Il codice sopra viene utilizzato per scorrere tutti i file nella cartella.

Range("A1", Cells(LastDesRow, 1)).Copia DestWB.ActiveSheet.Cells(LastDesRow, 1)

Il codice sopra viene utilizzato per copiare il record dalla prima colonna nella cartella di lavoro di destinazione.

Range("A1", ActiveCell.SpecialCells(xlCellTypeLastCell)).Copia DestWB.ActiveSheet.Cells(LastDesRow, 1)

Il codice sopra viene utilizzato per copiare tutto il record dalla cartella di lavoro attiva alla cartella di lavoro di destinazione.

Si prega di seguire sotto per il codice

 Option Explicit Sub CopyingSingleColumnData() 'Dichiarazione delle variabili Dim FileName, FolderPath, FileArray(), FileName1 As String Dim LastRow, LastDesRow, Count1, i As Integer Dim SourceWB, DestWB As Workbook Application.ScreenUpdating = False FolderPath = Sheet1.TextBox1.Value ' Inserimento di una barra rovesciata nel percorso della cartella se manca la barra rovesciata(\) If Right(FolderPath, 1) "\" Then FolderPath = FolderPath & "\" End If 'Ricerca file Excel FileName = Dir(FolderPath & "*.xlsx") Count1 = 0 'Esegui il ciclo di tutti i file Excel nella cartella While FileName "" Count1 = Count1 + 1 ReDim Preserve FileArray(1 To Count1) FileArray(Count1) = FileName FileName = Dir() Wend 'Creazione di una nuova cartella di lavoro Imposta DestWB = Workbooks.Add For i = 1 To UBound(FileArray) 'Trovare l'ultima riga nella cartella di lavoro LastDesRow = DestWB.ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row 'Aprire la cartella di lavoro di Excel Set SourceWB = Workbooks.Open (FolderPath & FileArray(i)) LastRow = ActiveCell.SpecialCells(xlCellTypeLas tCell).Row 'Incolla i dati copiati nell'ultima riga nella cartella di lavoro di destinazione If LastDesRow = 1 Then 'Copia la prima colonna sull'ultima riga nell'intervallo della cartella di lavoro di destinazione ("A1", Cells (LastRow, 1)). Copia DestWB. ActiveSheet.Cells(LastDesRow, 1) Else Range("A1", Cells(LastRow, 1)).Copia DestWB.ActiveSheet.Cells(LastDesRow + 1, 1) End If SourceWB.Close False Next 'Salvataggio e chiusura di un nuovo Excel cartella di lavoro DestWB.SaveAs FileName:=FolderPath & "ConsolidatedFile.xlsx" DestWB.Close Imposta DestWB = Nothing Imposta SourceWB = Nothing End Sub Sub CopyingMultipleColumnData() 'Dichiarazione delle variabili Dim FileName, FolderPath, FileArray(), FileName1 As String DesRow LastRow, Last , Count1, i As Integer Dim SourceWB, DestWB As Workbook Application.ScreenUpdating = False FolderPath = Sheet1.TextBox1.Value 'Inserimento di una barra rovesciata nel percorso della cartella se manca la barra rovesciata (\) If Right (FolderPath, 1) "\" Then FolderPath = FolderPath & "\" End If 'Ricerca file Excel FileName = Dir(FolderPath & "*.xlsx") Count1 = 0 'Esegui il ciclo di tutti i file Excel nella cartella While FileName "" Count1 = Count1 + 1 ReDim Preserve FileArray(1 To Count1) FileArray(Count1) = FileName FileName = Dir() Wend 'Creazione di una nuova cartella di lavoro Set DestWB = Workbooks.Add For i = 1 To UBound(FileArray) 'Trovare l'ultima riga nella cartella di lavoro LastDesRow = DestWB.ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row 'Aprire la cartella di lavoro di Excel Set SourceWB = Workbooks.Open(FolderPath & FileArray(i)) 'Incolla i dati copiati nell'ultima riga nella cartella di lavoro di destinazione If LastDesRow = 1 Then 'Copia tutti i dati nel foglio di lavoro sull'ultima riga nell'intervallo della cartella di lavoro di destinazione ("A1", ActiveCell.SpecialCells (xlCellTypeLastCell)). Copia DestWB.ActiveSheet.Cells(LastDesRow, 1) Else Range("A1", ActiveCell.SpecialCells(xlCellTypeLastCell)).Copia DestWB.ActiveSheet.Cells(LastDesRow + 1, 1) End If SourceWB.Close False Next 'Salvataggio e chiusura una nuova cartella di lavoro di Excel DestWB.SaveAs FileName:=FolderPath & "ConsolidatedAllColumns.xlsx" DestWB.Close Set D estWB = Niente Imposta SourceWB = Niente End Sub 

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook. Inoltre, puoi seguirci su Twitter e Facebook.

Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica