Gộp nhiều file excel thành 1 file và tách theo từng sheet theo dữ liệu của mỗi file!! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

lenongree

Thành viên tích cực
Tham gia
26/1/10
Bài viết
942
Được thích
675
Chào mọi người, em có vấn đề cần mọi người giúp, em có 2 file excel tên là "File 1" và "File 2"
Có cách nào mình gôm 2 file excel thành một file mới và chia theo từng sheet (sheet "File 1" chứa dữ liệu của "File 1" và sheet "File 2" chứa dữ liệu của "File 2") không ạ, em cám ơn!!!
 
Mở hai file, để con trỏ ở tên Sheet (dưới đáy màn hình), bấm chuột phải, chọn Move or copy, chọn file trong To book, chọn creat a copy, chọn Ok
 
Vậy là phải mở file nên mới được hả bạn, mình có 102 đơn vị , mỗi đơn vị có 12 file cần gộp, vậy là mỗi đơn vị mình mở 12 file mới được hả bạn, có cách nào gộp mà không cần mở file không bạn?
 
Vậy là phải mở file nên mới được hả bạn, mình có 102 đơn vị , mỗi đơn vị có 12 file cần gộp, vậy là mỗi đơn vị mình mở 12 file mới được hả bạn, có cách nào gộp mà không cần mở file không bạn?

102 đơn vị x 12 = 1224 file . khác xa so với "tình yêu ban đầu"

Chào mọi người, em có vấn đề cần mọi người giúp, em có 2 file excel tên là "File 1" và "File 2"

mà cái này thì cần xem được file thì anh #4 mới làm được .
 
1. Bạn xóa 3 sheet đã ví dụ trong file hoàn thành (vì chạy code trùng tên cũ thì ko được). Copy code sau cho vào Module của file hoàn thành. Lưu file này đuôi .xlsm hoặc .xlsb thì mới chứa được code VBA

2. Cho 4 file trên vào 1 Folder. Chạy code -> của sổ mở ra -> Chọn nguyên Folder và OK. Đợi xíu chạy xong

P/s: Code trên chỉ lấy sheet có tên là VTU trong các file con. Bạn muốn copy nhiều file hơn nữa thì cứ tống các file đó vào Folder trên... (theo trên thì bạn nói là 12 file gì đó.)

Code trên viết theo tên sheet là VTU, thực tế của bạn khác thì bạn tự chỉnh sửa lại cho phù hợp mà chạy.

Chỉ cần code này trên file tổng hợp, các file con bạn đưa vào folder và chạy thì nó tự tổng hơp => Không cần phải mở file con.

Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path, ShName As String
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Chon Folder"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        ShName = ChonO.GetBaseName(fil)
        For Each Sh In Wb.Worksheets
        If Sh.Name = "VTU" Then
            Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
            WbMain.Sheets(WbMain.Sheets.Count).Name = ShName
        End If
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Ngưỡng mộ anh quá xá. Nhờ anh, em mới biết cách tổng hợp nhanh đến như vầy. Cảm ơn anh nhiều.
 
1. Bạn xóa 3 sheet đã ví dụ trong file hoàn thành (vì chạy code trùng tên cũ thì ko được). Copy code sau cho vào Module của file hoàn thành. Lưu file này đuôi .xlsm hoặc .xlsb thì mới chứa được code VBA

2. Cho 4 file trên vào 1 Folder. Chạy code -> của sổ mở ra -> Chọn nguyên Folder và OK. Đợi xíu chạy xong

P/s: Code trên chỉ lấy sheet có tên là VTU trong các file con. Bạn muốn copy nhiều file hơn nữa thì cứ tống các file đó vào Folder trên... (theo trên thì bạn nói là 12 file gì đó.)

Code trên viết theo tên sheet là VTU, thực tế của bạn khác thì bạn tự chỉnh sửa lại cho phù hợp mà chạy.

Chỉ cần code này trên file tổng hợp, các file con bạn đưa vào folder và chạy thì nó tự tổng hơp => Không cần phải mở file con.

Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path, ShName As String
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Chon Folder"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        ShName = ChonO.GetBaseName(fil)
        For Each Sh In Wb.Worksheets
        If Sh.Name = "VTU" Then
            Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
            WbMain.Sheets(WbMain.Sheets.Count).Name = ShName
        End If
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Em làm được rồi, nhưng chỗ này mình chọn file để gộp được không anh đỡ mắc công phải chỉnh lại code và copy/paste/delete file, nếu được cho em xin một cái nút để bấm, hi, xin lỗi anh em hơi đòi hỏi tý!! Em cám ơn anh!!!/-*+/
 
Lần chỉnh sửa cuối:
1. Ý màu đỏ: là sao phải mắc công chỉnh code, copy/paste Delete cái gì vậy? Muốn chạy code thì bạn chạy code 1 lần thôi...chứ bạn làm gì nữa???

2. Ý màu xanh: nút bấm gì...bạn đưa code vào. Bạn insert cho nó cái Shapes hoặc cái Button, click phải/Assign Macro: add cái Sub ấy vào rồi bấm thôi mà...
1. Ah, ý em là, nếu làm theo cách anh mới tạo, thì giả sử em muốn gộp đơn vị "NAN" thì em phải vô code sửa lại là "NAN", và trong cái folder gộp file em phải xóa hết những file cũ "*VTU", và em phải paste những file "*NAN" để vào trong thư mục gộp file rồi chạy file tổng hợp mới được, và file phải đặt theo đơn vị dạng '*NAN", dữ liệu của em cái chỗ đơn vị nó không đồng nhất, do tổng hợp từ nhiều nguồn khác nhau, ví dụ: "*VT","VTU*", Vũng tàu",...
2. Dạ, chỗ này em không biết, để em mò thử,/-*+/
 
Lần chỉnh sửa cuối:
Ôi cái bạn này...:
1. Chẳng nhẻ file của 100 đơn vị bạn để chung 1 Foder hay sao???
2. Rồi bạn tổng hợp tất cả các đơn vị chung vào 1 File hay sao?

3. Nếu bạn có danh sách tất cả các đơn vị rồi thì bạn đưa danh sách ấy vào File đi...rồi úp lên đây rồi code tiếp....Nếu kô muốn chỉnh code thì phải có danh sách:

P/s: Mà theo tôi nghĩ bạn nên tổng hợp mỗi đơn vị ở 1 file và chỉnh sửa code trên cho từng file là của đơn vị nào...rồi tổng hợp cho nó rạch ròi chứ...???
Hi, em nghĩ code anh vậy là ok rồi, tại em làm biếng sửa mấy tên sheet lại +-+-+-+, em cám ơn anh nhiều/-*+/!!!
 
Lần chỉnh sửa cuối:
1. Bạn xóa 3 sheet đã ví dụ trong file hoàn thành (vì chạy code trùng tên cũ thì ko được). Copy code sau cho vào Module của file hoàn thành. Lưu file này đuôi .xlsm hoặc .xlsb thì mới chứa được code VBA

2. Cho 4 file trên vào 1 Folder. Chạy code -> của sổ mở ra -> Chọn nguyên Folder và OK. Đợi xíu chạy xong

P/s: Code trên chỉ lấy sheet có tên là VTU trong các file con. Bạn muốn copy nhiều file hơn nữa thì cứ tống các file đó vào Folder trên... (theo trên thì bạn nói là 12 file gì đó.)

Code trên viết theo tên sheet là VTU, thực tế của bạn khác thì bạn tự chỉnh sửa lại cho phù hợp mà chạy.

Chỉ cần code này trên file tổng hợp, các file con bạn đưa vào folder và chạy thì nó tự tổng hơp => Không cần phải mở file con.

Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path, ShName As String
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Chon Folder"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        ShName = ChonO.GetBaseName(fil)
        For Each Sh In Wb.Worksheets
        If Sh.Name = "VTU" Then
            Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
            WbMain.Sheets(WbMain.Sheets.Count).Name = ShName
        End If
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
1. Bạn xóa 3 sheet đã ví dụ trong file hoàn thành (vì chạy code trùng tên cũ thì ko được). Copy code sau cho vào Module của file hoàn thành. Lưu file này đuôi .xlsm hoặc .xlsb thì mới chứa được code VBA

2. Cho 4 file trên vào 1 Folder. Chạy code -> của sổ mở ra -> Chọn nguyên Folder và OK. Đợi xíu chạy xong

P/s: Code trên chỉ lấy sheet có tên là VTU trong các file con. Bạn muốn copy nhiều file hơn nữa thì cứ tống các file đó vào Folder trên... (theo trên thì bạn nói là 12 file gì đó.)

Code trên viết theo tên sheet là VTU, thực tế của bạn khác thì bạn tự chỉnh sửa lại cho phù hợp mà chạy.

Chỉ cần code này trên file tổng hợp, các file con bạn đưa vào folder và chạy thì nó tự tổng hơp => Không cần phải mở file con.

Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path, ShName As String
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Chon Folder"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        ShName = ChonO.GetBaseName(fil)
        For Each Sh In Wb.Worksheets
        If Sh.Name = "VTU" Then
            Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
            WbMain.Sheets(WbMain.Sheets.Count).Name = ShName
        End If
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Anh có thể cho em nhờ chút được không ạ
Em cũng có chung câu hỏi như chủ Topic nhưng em muốn tự động copy data từ các file trong folder vào các sheet đã có tên sẵn và ở vào vị trí cố định (A150) trong sheet đó. Vì các sheet dữ liệu đều setup công thức để link vào sheet "invoice" nên sẽ không thể tạo mới sheet như chủ top.
Anh xem có cách nào giúp em với ạ. File gốc quá nặng (tận hơn 200Mb) nên em cut bớt chỉ để các sheet data từ 1-5 chứ thực ra nó phải có hơn 200 sheet data để link vào sheet đầu tiên "Invoice". Nghĩa là công việc copy thủ công khá mất thời gian vì mỗi lần copy vào đều phải đợi cho nó tính toán
Anh xem file của em rồi tìm cách copy tự động giúp em với được không ạ
 

File đính kèm

- Sao mình cho12 file vào rồi mà chỉ copy được 5 sheet thôi .
_trong 1 file mình có 2 sheet tên ebom 1 và update và file khác cũng tương tự nhưng sheet tên ebom2 và update cứ thế các trong các file tiếp theo tên sheet sẽ tăng dần. Mình muốn copy sheet tên ebom trong các file ko muốn copy sheet update. Thì trong đoạn code mình sửa VTU thành ebom là ok phải ko các bạn.
Các bạn giúp mình nha.
 
Code rất hay em đã chạy được. Em muốn giúp đỡ tên của các sheet lấy ra phải trùng với tên của list sẵn có từ phai tổng.
Có nghĩa là file tổng hợp của em có sheet("Report") có chứa danh sách tên các sheet được để từ ô A3:A145.
Trong các file chứa các sheet sẽ copy các sheet có chứa trong ô A3:A45 thôi còn các sheet khác không copy.
Đoạn này sẽ phải sửa ra sao ạ.

For Each Sh In Wb.Worksheets
If Sh.Name = "VTU" Then
 
Anh có thể cho em nhờ chút được không ạ
Em cũng có chung câu hỏi như chủ Topic nhưng em muốn tự động copy data từ các file trong folder vào các sheet đã có tên sẵn và ở vào vị trí cố định (A150) trong sheet đó. Vì các sheet dữ liệu đều setup công thức để link vào sheet "invoice" nên sẽ không thể tạo mới sheet như chủ top.
Anh xem có cách nào giúp em với ạ. File gốc quá nặng (tận hơn 200Mb) nên em cut bớt chỉ để các sheet data từ 1-5 chứ thực ra nó phải có hơn 200 sheet data để link vào sheet đầu tiên "Invoice". Nghĩa là công việc copy thủ công khá mất thời gian vì mỗi lần copy vào đều phải đợi cho nó tính toán
Anh xem file của em rồi tìm cách copy tự động giúp em với được không ạ
Góp ý cho bạn:
1/ Nên sử dụng 1 sheet làm SheetForm dùng cho 1 hóa đơn.
2/ Và 1 sheet theo dõi hóa đơn để lưu dữ liệu từng hóa đơn, khi cần truy vấn lại 1 hóa đơn nào đó ta dựa vào dữ liệu của sheet này để tạo lại hóa đơn chứ không nên lưu mỗi hóa đơn 1 File (vừa tốn công, tốn sức và làm chiếm dung lượng ổ dĩa vô ích).
3/ Dựa vào sheet theo dõi hóa đơn ta có thể tổng hợp theo nhu cầu thì quá dễ dàng.
 
1. Bạn xóa 3 sheet đã ví dụ trong file hoàn thành (vì chạy code trùng tên cũ thì ko được). Copy code sau cho vào Module của file hoàn thành. Lưu file này đuôi .xlsm hoặc .xlsb thì mới chứa được code VBA

2. Cho 4 file trên vào 1 Folder. Chạy code -> của sổ mở ra -> Chọn nguyên Folder và OK. Đợi xíu chạy xong

P/s: Code trên chỉ lấy sheet có tên là VTU trong các file con. Bạn muốn copy nhiều file hơn nữa thì cứ tống các file đó vào Folder trên... (theo trên thì bạn nói là 12 file gì đó.)

Code trên viết theo tên sheet là VTU, thực tế của bạn khác thì bạn tự chỉnh sửa lại cho phù hợp mà chạy.

Chỉ cần code này trên file tổng hợp, các file con bạn đưa vào folder và chạy thì nó tự tổng hơp => Không cần phải mở file con.

Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path, ShName As String
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Chon Folder"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        ShName = ChonO.GetBaseName(fil)
        For Each Sh In Wb.Worksheets
        If Sh.Name = "VTU" Then
            Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
            WbMain.Sheets(WbMain.Sheets.Count).Name = ShName
        End If
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Anh ơi, cho em hỏi nếu file có nhiều sheet thì làm thế nào để gộp được ah anh. Em cảm ơn anh
 
Cho Tôi hỏi . Tôi có 10 file, mỗi file có 4 sheet. Tôi chỉ muốn gom 1 trong 4 sheet thành 1 file lớn, những sheet còn lại ko cần thiết thì dùng CODE nào ạ ? Cám ơn.
 
Cho Tôi hỏi
Tôi có 10 file, mỗi file có 4 sheet.
Tôi chỉ muốn gom 1 trong 4 sheet thành 1 file lớn, những sheet còn lại ko cần thiết thì dùng CODE nào ạ ? Cám ơn.
Bạn nên đính kèm vài file ví dụ và nêu tên sheet cần gôp, diễn giải rõ là gom những gì, lấy hết tiêu đề hay không...(Lưu ý: Không nên viết tắt trong bài viết, ví dụ: "ko", "đc"... bạn nhé).
 
Bạn nên đính kèm vài file ví dụ và nêu tên sheet cần gôp, diễn giải rõ là gom những gì, lấy hết tiêu đề hay không...(Lưu ý: Không nên viết tắt trong bài viết, ví dụ: "ko", "đc"... bạn nhé).
Tôi gửi file đính kèm, nhờ Anh xem giúp. Tôi muốn gom 3 file số 1, 2 , 3 vào file số 4 (có 3 sheet: STRUCTURE, LOGISTIC, COST ). Cám ơn Anh.
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom