Note: The other languages of the website are Google-translated. Back to English

Cum să parcurgeți fișierele dintr-un director și să copiați datele într-o foaie principală în Excel?

Presupunând că există mai multe cărți de lucru Excel într-un dosar și doriți să parcurgeți toate aceste fișiere Excel și să copiați datele dintr-un interval specificat de foi de lucru cu același nume într-o foaie de lucru principală în Excel, ce puteți face? Acest articol introduce o metodă de realizare în detalii.

Buclați fișierele dintr-un director și copiați datele într-o foaie principală cu cod VBA


Buclați fișierele dintr-un director și copiați datele într-o foaie principală cu cod VBA

Dacă doriți să copiați datele specificate în intervalul A1: D4 din toată foaia 1 a registrelor de lucru dintr-un anumit folder într-o foaie principală, vă rugăm să procedați după cum urmează.

1. În registrul de lucru veți crea o foaie de lucru principală, apăsați pe Alt + F11 tastele pentru a deschide Microsoft Visual Basic pentru aplicații fereastră.

2. În Microsoft Visual Basic pentru aplicații fereastră, faceți clic pe Insera > Module. Apoi copiați mai jos codul VBA în fereastra codului.

Cod VBA: parcurgeți fișierele dintr-un folder și copiați datele într-o foaie principală

Sub Merge2MultiSheets()
    Dim xRg As Range
    Dim xSelItem As Variant
    Dim xFileDlg As FileDialog
    Dim xFileName, xSheetName, xRgStr As String
    Dim xBook, xWorkBook As Workbook
    Dim xSheet As Worksheet
    On Error Resume Next
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    xSheetName = "Sheet1"
    xRgStr = "A1:D4"
    Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    With xFileDlg
        If .Show = -1 Then
            xSelItem = .SelectedItems.Item(1)
            Set xWorkBook = ThisWorkbook
            Set xSheet = xWorkBook.Sheets("New Sheet")
            If xSheet Is Nothing Then
                xWorkBook.Sheets.Add(after:=xWorkBook.Worksheets(xWorkBook.Worksheets.Count)).Name = "New Sheet"
                Set xSheet = xWorkBook.Sheets("New Sheet")
            End If
            xFileName = Dir(xSelItem & "\*.xlsx", vbNormal)
            If xFileName = "" Then Exit Sub
            Do Until xFileName = ""
               Set xBook = Workbooks.Open(xSelItem & "\" & xFileName)
                Set xRg = xBook.Worksheets(xSheetName).Range(xRgStr)
                xRg.Copy xSheet.Range("A65536").End(xlUp).Offset(1, 0)
                xFileName = Dir()
                xBook.Close
            Loop
        End If
    End With
    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

notițe:

1). În cod, „A1: D4"Și"Sheet1”Înseamnă că datele din intervalul A1: D4 din toată foaia 1 vor fi copiate în foaia principală. Și "Foaie nouă”Este numele noii foi master create.
2). Fișierele Excel din folderul specific nu ar trebui să se deschidă.

3. apasă pe F5 tasta pentru a rula codul.

4. În deschidere Naviga fereastra, selectați folderul care conține fișierele pe care le veți parcurge, apoi faceți clic pe OK buton. Vedeți captura de ecran:

Apoi se creează o foaie de lucru principală numită „Foaie nouă” la sfârșitul registrului de lucru curent. Și datele din intervalul A1: D4 din toate Sheet1 din folderul selectat sunt listate în foaia de lucru.


Legate de articole:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (20)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
multumesc pentru codul vba! Functioneaza perfect! Aș dori să știu care este codul dacă trebuie să lipesc ca valoare? Multumesc anticipat!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Lai Ling,
Următorul cod vă poate ajuta să rezolvați problema. Multumesc pentru comentariu.

Sub Merge2MultiSheets()
Dim xRg As Range
Dim xSelItem ca variantă
Dim xFileDlg ca FileDialog
Dim xFileName, xSheetName, xRgStr ca șir
Dim xBook, xWorkBook ca registru de lucru
Dim xSheet ca foaie de lucru
La data de eroare CV următoare
Application.DisplayAlerts = Fals
Application.EnableEvents = Fals
Application.ScreenUpdating = Fals
xSheetName = "Sheet1"
xRgStr = „A1:D4”
Setați xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
Cu xFileDlg
Dacă .Show = -1 Atunci
xSelItem = .SelectedItems.Item(1)
Setați xWorkBook = ThisWorkBook
Set xSheet = xWorkBook.Sheets(„Foaie nouă”)
Dacă xSheet este nimic, atunci
xWorkBook.Sheets.Add(după:=xWorkBook.Worksheets(xWorkBook.Worksheets.count)).Name = „Foaie nouă”
Set xSheet = xWorkBook.Sheets(„Foaie nouă”)
Final, dacă
xFileName = Dir(xSelItem & „\*.xlsx”, vbNormal)
Dacă xFileName = "", Ieșiți din sub
Faceți până la xFileName = ""
Set xBook = Workbooks.Open(xSelItem & "\" & xFileName)
Setați xRg = xBook.Worksheets(xSheetName).Range(xRgStr)
xRg.Copy xSheet.Range("A65536").End(xlUp).Offset(1, 0)
xFileName = Dir()
xBook.Închidere
Buclă
Final, dacă
Se termina cu
Setați xRg = xSheet.UsedRange
xRg.ClearFormats
xRg.UseStandardHeight = Adevărat
xRg.UseStandardWidth = Adevărat
Application.DisplayAlerts = Adevărat
Application.EnableEvents = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut, multumesc pentru cod. Vă rog, puteți să-mi spuneți cum pot include numele fișierului Excel din care a fost copiat intervalul de date? Acesta ar fi de mare ajutor!

Mulțumesc.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,

Mulțumesc pentru tutorial.

Cum aș putea: copia doar rândul din „Sheet1” cu valorile din rândul „total” și inserați cu [nume fișier] în foaia de lucru principală numită „New Sheet”. Notarea rândului cu Total poate fi diferită în fiecare foaie de lucru.

De exemplu:
File1: Sheet1
Col1, Col2, Colx
1,2,15
Rezultat,10,50

File2: Sheet1
Col1, Col2, Colx
1,5,10
2,4,16
3,3,6
4,5,6
5,7,10
Rezultat,300,500

MasterFile: „Foaie nouă”:
dosar 1, 10, 50
dosar 2, 300, 500
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, Funcționează grozav. Există o modalitate de a schimba pentru a trage doar valorile și nu formula?
Mulțumesc!!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Trish,
Următorul cod vă poate ajuta să rezolvați problema. Multumesc pentru comentariu.

Sub Merge2MultiSheets()
Dim xRg As Range
Dim xSelItem ca variantă
Dim xFileDlg ca FileDialog
Dim xFileName, xSheetName, xRgStr ca șir
Dim xBook, xWorkBook ca registru de lucru
Dim xSheet ca foaie de lucru
La data de eroare CV următoare
Application.DisplayAlerts = Fals
Application.EnableEvents = Fals
Application.ScreenUpdating = Fals
xSheetName = "Sheet1"
xRgStr = „A1:D4”
Setați xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
Cu xFileDlg
Dacă .Show = -1 Atunci
xSelItem = .SelectedItems.Item(1)
Setați xWorkBook = ThisWorkBook
Set xSheet = xWorkBook.Sheets(„Foaie nouă”)
Dacă xSheet este nimic, atunci
xWorkBook.Sheets.Add(după:=xWorkBook.Worksheets(xWorkBook.Worksheets.count)).Name = „Foaie nouă”
Set xSheet = xWorkBook.Sheets(„Foaie nouă”)
Final, dacă
xFileName = Dir(xSelItem & „\*.xlsx”, vbNormal)
Dacă xFileName = "", Ieșiți din sub
Faceți până la xFileName = ""
Set xBook = Workbooks.Open(xSelItem & "\" & xFileName)
Setați xRg = xBook.Worksheets(xSheetName).Range(xRgStr)
xRg.Copy xSheet.Range("A65536").End(xlUp).Offset(1, 0)
xFileName = Dir()
xBook.Închidere
Buclă
Final, dacă
Se termina cu
Setați xRg = xSheet.UsedRange
xRg.ClearFormats
xRg.UseStandardHeight = Adevărat
xRg.UseStandardWidth = Adevărat
Application.DisplayAlerts = Adevărat
Application.EnableEvents = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, încă trage formulele, nu valorile, așa că îmi dă o eroare #REF. Știu că ar putea avea nevoie de un .PasteSpecial xlPasteValues ​​undeva, dar nu îmi dau seama unde. Poți să ajuți? Mulțumiri!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună. Mulțumesc pentru asta.


Cum includ codul pentru a parcurge toate folderele și subfolderele și pentru a efectua copia de mai sus?


Multumesc!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut - Acest cod este perfect pentru ceea ce încerc să obțin.

Există o modalitate de a parcurge toate folderele și subfolderele și de a efectua copierea?


Multumesc!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut - Acest cod funcționează foarte bine pentru primele 565 de linii pentru fiecare fișier, dar toate liniile de după sunt suprapuse de următorul fișier.
există vreo modalitate de a remedia asta?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc - cum ar putea cineva să copieze și să lipească (valori speciale) din fiecare foaie de lucru dintr-un registru de lucru în foi separate într-un fișier principal principal?
Acest comentariu a fost redus la minimum de moderatorul de pe site
cum faci ca codul să lase un gol dacă celula este goală?
Acest comentariu a fost redus la minimum de moderatorul de pe site
pentru mine, numele filei „Sheet1” se modifică pentru fiecare dintre fișierele mele. De exemplu, Tab1, Tab2, Tab3, Tab4... Cum pot configura o buclă pentru a rula printr-o listă în Excel și continuă să schimb numele „Sheet1” până când rulează totul?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Nick, Codul VBA de mai jos vă poate ajuta să rezolvați problema. Vă rugăm să încercați. Sub LoopThroughFileRename()
'Actualizat de Extendofice 2021/12/31
Dim xRg As Range
Dim xSelItem ca variantă
Dim xFileDlg ca FileDialog
Dim xFileName, xSheetName, xRgStr ca șir
Dim xBook, xWorkBook ca registru de lucru
Dim xSheet ca foaie de lucru
Dim xShs As Sheets
Dim xName ca șir
Dim xFNum ca număr întreg
La data de eroare CV următoare
Application.DisplayAlerts = Fals
Application.EnableEvents = Fals
Application.ScreenUpdating = Fals
Setați xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xFileDlg.Show
xSelItem = xFileDlg.SelectedItems.Item(1)
xFileName = Dir(xSelItem & „\*.xlsx”, vbNormal)
Faceți în timp ce xFileName <> ""
Set xWorkBook = Workbooks.Open(xSelItem & "\" & xFileName)
Setați xShs = xWorkBook.Sheets
Pentru xFNum = 1 To xShs.Count
Setează xSheet = xShs.Item(xFNum)
xName = xSheet.Name
xNume = Înlocuiește(xNume, "Coală""Tab") „Înlocuiește foaia cu Tab
xSheet.Name = xName
Pagina Următoare →
xWorkBook.Salvare
xWorkBook.Închidere
xFileName = Dir()
Buclă
Application.DisplayAlerts = Adevărat
Application.EnableEvents = Adevărat
Application.ScreenUpdating = Adevărat
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, vreau un cod pentru a copia datele în 6 registre de lucru diferite (într-un folder) care are foi incluse în ele în NEW WORKBOOK. în vba
va rog ajutati-ma asp
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Paranusha,
Scriptul VBA din articolul următor poate combina mai multe registre de lucru sau foi specificate de registre de lucru într-un registru de lucru principal. Vă rugăm să verificați dacă vă poate ajuta.
Cum să combinați mai multe registre de lucru într-un singur registru de lucru principal în Excel?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Olá bom dia.
Gostei muito dessde código, mas não me ajudou com os relatórios que eu precis impreimir.
Preciso imprimă 2.400 relatorio de exel care sunt paste diferite și nu sunt configurate corect pentru a impresiona. Îmi puteți trimite codul VBA pentru a automatiza aceste impresii? Me ajuta muito, obrigada.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Maria Soares,
Vă rugăm să verificați dacă codul VBA din următoarea postare vă poate ajuta.
Cum se imprimă mai multe registre de lucru în Excel?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Scenariul meu este similar, cu excepția faptului că am mai multe foi în fiecare fișier, toate cu nume diferite, dar consecvente între fișiere. Există o modalitate de a bucla acest cod pentru a copia datele din fișiere și a lipi (valori) în anumite nume de foi din registrul de lucru principal? Numele foilor din master sunt aceleași ca și în fișiere. Vreau să răsfoiesc ele. De asemenea, cantitatea de date din fiecare foaie va varia, așa că va trebui să selectez datele din fiecare foaie folosind ceva de genul acesta:

Interval("A1").Selectați
Interval(Selectie, Selection.End(xlDown)).Select
Interval(Selectie, Selection.End(xlToRight)).Select


Numele foilor de fișiere sunt Dăruire, Servicii, Asigurare, Mașină, Alte Cheltuieli etc...

Mulțumesc în avans.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Andrew Shahan,
Următorul cod VBA vă poate rezolva problema. După rularea codului și selectarea unui folder, codul se va potrivi automat cu foaia de lucru după nume și va lipi datele în foaia de lucru cu același nume din registrul de lucru principal.
Sub Merge2MultiSheets()
'Updated by Extendoffice 20221209
    Dim xRg As Range
    Dim xSelItem As Variant
    Dim xFileDlg As FileDialog
    Dim xFileName, xSheetName, xRgStr As String
    Dim xBook As Workbook, xMainBook As Workbook
    Dim xSheet As Worksheet
    On Error Resume Next
    
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Set xMainBook = ThisWorkbook
    
    Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
    With xFileDlg
        If .Show = -1 Then
            xSelItem = .SelectedItems.Item(1)
            xFileName = Dir(xSelItem & "\*.xlsx", vbNormal)
            If xFileName = "" Then Exit Sub
            
            Do Until xFileName = ""
            Set xBook = Workbooks.Open(xSelItem & "\" & xFileName)

            For Start = 1 To xBook.Worksheets.Count
                Set xSheet = xBook.Worksheets.Item(Start)
                xSheet.Activate
                xSheetName = xSheet.Name
                xSheet.UsedRange.Copy (xMainBook.Worksheets.Item(xSheetName).Range("A1048576").End(xlUp).Offset(1, 0))
            Next
                xFileName = Dir()
                xBook.Close
            Loop
        End If
    End With
    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL