Xin code VBA gộp nhiều file thành 1 file

Liên hệ QC

kiendaide1

Thành viên chính thức
Tham gia
3/4/13
Bài viết
93
Được thích
4
Em có rất nhiều file giống nhau em muốn ghép vào 1 file excel nhưng em chỉ muốn lấy 1 ròng số thứ tự 13 mà không muốn lấy các ròng khác. xin các bác giúp đỡ lệnh VBA ạ. Em có file đính kèm
 

File đính kèm

Em có rất nhiều file giống nhau em muốn ghép vào 1 file excel nhưng em chỉ muốn lấy 1 ròng số thứ tự 13 mà không muốn lấy các ròng khác. xin các bác giúp đỡ lệnh VBA ạ. Em có file đính kèm
1/ Bạn đăng lộn box. Cần phải đăng vào box Lập trình với Excel.
2/ dòng chứ không phải ròng.
 
Mình dùng code Getdata của anh Ndu bao lâu nay gộp file trong cùng thư mục thấy rất ổn (Máy mình xài office 2016 32bit)
Sub main() mình đã đặt các tham số cho phù hợp với yêu cầu của bạn:
- SheetName = "Mẫu số 04" (các file khác phải cùng tên sheet này mới tổng hợp được)
- RangeSheet = B13:L13 (chỉ lấy hàng 13)
p/s: bài bạn nhầm box nhưng nhìn file của bạn mình thấy là biểu mẫu trợ cấp cho người lao động do ảnh hưởng dịch Covid nên hy vọng bạn sẽ tổng hợp nhanh chóng.
 

File đính kèm

Em có rất nhiều file giống nhau em muốn ghép vào 1 file excel nhưng em chỉ muốn lấy 1 ròng số thứ tự 13 mà không muốn lấy các ròng khác. xin các bác giúp đỡ lệnh VBA ạ. Em có file đính kèm
Bạn thử file này xem sao. Code của Anh NDU hay của 1 anh nào đó trên diên đàn mình có chế cháo lại đôi chút.
Khi nhấn nút TỔNG HỢP sẽ hiện lên một bảng cho bạn chọn các file cần tổng hợp (bằng cách bôi đen và nhấn OK) và chờ xem kết quả. Kết quả trả về đang để bắt đầu từ ô A13đến ô L .... Ô L13:L... là tên của file và sheet đã được lấy dữ liệu. bạn có thể thay đổi hoặc xóa nếu thấy cần thiết.
Lưu ý Trong các File có nhiều sheet thì cũng lấy hết và chỉ lấy dòng 13 (Row=13). nếu Trong mỗi Worbook chỉ lấy 1 hoặc 2, 3 Sh gì đó, hoặc lấy nhiều dòng theo điều kiện nào đó thì phải sửa lại code
 

File đính kèm

Mình dùng code Getdata của anh Ndu bao lâu nay gộp file trong cùng thư mục thấy rất ổn (Máy mình xài office 2016 32bit)
Sub main() mình đã đặt các tham số cho phù hợp với yêu cầu của bạn:
- SheetName = "Mẫu số 04" (các file khác phải cùng tên sheet này mới tổng hợp được)
- RangeSheet = B13:L13 (chỉ lấy hàng 13)
p/s: bài bạn nhầm box nhưng nhìn file của bạn mình thấy là biểu mẫu trợ cấp cho người lao động do ảnh hưởng dịch Covid nên hy vọng bạn sẽ tổng hợp nhanh chóng.
Hay quá em cảm ơn bác ạ. vidu em muốn tổng hợp danh sách dài (độ dài các danh sách không bằng nhau) em muốn tổng hợp thành 1 file thì xóa RangeSheet = B13:L13 đi phải không ạ
Bài đã được tự động gộp:

Bạn thử file này xem sao. Code của Anh NDU hay của 1 anh nào đó trên diên đàn mình có chế cháo lại đôi chút.
Khi nhấn nút TỔNG HỢP sẽ hiện lên một bảng cho bạn chọn các file cần tổng hợp (bằng cách bôi đen và nhấn OK) và chờ xem kết quả. Kết quả trả về đang để bắt đầu từ ô A13đến ô L .... Ô L13:L... là tên của file và sheet đã được lấy dữ liệu. bạn có thể thay đổi hoặc xóa nếu thấy cần thiết.
Lưu ý Trong các File có nhiều sheet thì cũng lấy hết và chỉ lấy dòng 13 (Row=13). nếu Trong mỗi Worbook chỉ lấy 1 hoặc 2, 3 Sh gì đó, hoặc lấy nhiều dòng theo điều kiện nào đó thì phải sửa lại code
Em cảm ơn bác ạ. bác có thể cho em xin file gốc được ko ạ. vì rất nhiều dư liệu em muốn gọp nó thành 1 file ạ
 
Em cảm ơn bác ạ. bác có thể cho em xin file gốc được ko ạ. vì rất nhiều dư liệu em muốn gọp nó thành 1 file ạ
bạn chạy code tôi gủi cho thấy thế nào?
dữ liệu nhiều , lấy theo điều kiện nào? lấy toàn bộ hay chỉ lấy một số dòng và một số cột thỏa mãn điều kiện nào đó cũng được mà, bởi vì là code sẽ chạy theo quy trình
là duyệt từng file trong khối file đã chọ code sẽ duyệt tiếp từng workbook, sau dó duyệt tiếp tùng sheet trong workbook đó, nếu tên sheet thỏa thì gán vùng dũ liệu thành một mảng, duyệt trong mảng ấy lấy dữ liệu cần thiết đưa vào một mảng khác( mảng KQ),sau khi duyệt hết các các wb, các sh, thì đóng wb lại duyệt sang file khác,cứ tuần tự như vậy cho đến hết.kết thúc là gán xuống sh (sh TONGHOP).và end sub.
code của anh NDU hay đề tài này có rất nhiều trên diễn đàn này bạn chụi khó tìm và nghiên cứu thêm nhé.
 
bạn chạy code tôi gủi cho thấy thế nào?
dữ liệu nhiều , lấy theo điều kiện nào? lấy toàn bộ hay chỉ lấy một số dòng và một số cột thỏa mãn điều kiện nào đó cũng được mà, bởi vì là code sẽ chạy theo quy trình
là duyệt từng file trong khối file đã chọ code sẽ duyệt tiếp từng workbook, sau dó duyệt tiếp tùng sheet trong workbook đó, nếu tên sheet thỏa thì gán vùng dũ liệu thành một mảng, duyệt trong mảng ấy lấy dữ liệu cần thiết đưa vào một mảng khác( mảng KQ),sau khi duyệt hết các các wb, các sh, thì đóng wb lại duyệt sang file khác,cứ tuần tự như vậy cho đến hết.kết thúc là gán xuống sh (sh TONGHOP).và end sub.
code của anh NDU hay đề tài này có rất nhiều trên diễn đàn này bạn chụi khó tìm và nghiên cứu thêm nhé.
da rất ổn ạ. em muốn xin code lấy toàn bộ dư liệu và tên sheet cho thông dung không phải đổi tên sheet ạ. em cảm ơn anh
 
da rất ổn ạ. em muốn xin code lấy toàn bộ dư liệu và tên sheet cho thông dung không phải đổi tên sheet ạ. em cảm ơn anh
thì đó. như mình đã nói code sẽ duyệt từng ws có trong wb và lấy dữ liệu.
nếu muốn nấy dữ liệu ở 1 số sh có tên là A1, A4, A7 ...trong code sau chỗ duyệt từng ws trong wb bạn thêm vào dòng lệnh:
if ws.name = "A1" or ws.name="A2"or ws.name="A7".... then
khối lệnh cần tổng hợp
end if ở cuối trước khi next wb là được.
nếu nhiều sh cần tổng hợp thì có thể để trong 1 cột nào đó (ví dụ E1:E( m ) của Sh TONGHOP và khi đó code sẽ là
For n=1 to m ' Tổng số Sh cần lấy dữ liệu
If Ws.name=Sheets("TONGHOP").range("E"&n) then
khối lệnh
end if
next n
...
next Ws
.....
next Wb

tốt nhất là bạn gửi file tonghop và 1 vài file cần tổng hợp lên (nói rõ kết quả mong muốn) sẽ có người giúp bạn bằng vba, ado, power table,pivot table, sqr. nhiều nhiều lắm, nếu chịu khó tìm hiểu thì không thiếu.
 
Lần chỉnh sửa cuối:
Hay quá em cảm ơn bác ạ. vidu em muốn tổng hợp danh sách dài (độ dài các danh sách không bằng nhau) em muốn tổng hợp thành 1 file thì xóa RangeSheet = B13:L13 đi phải không ạ
Bạn vẫn phải đặt RangeSheet xác định vị trị cột bắt đầu đến cột kết thúc và hàng bắt đầu đến hàng kết thúc (vd: lấy dữ liệu 60.000 dòng thì đặt RangeSheet = B13:L60000 là lấy dữ liệu từ cột B13 đến cột L60000)
 
Web KT

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

Back
Top Bottom