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!!!
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?
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
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!!!
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ử,
Ô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ứ...???
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 ạ
- 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.
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
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é).